❶ 如何在mac上徹底刪除docker
1、刪除不了的軟體或文件的解決方法: 開機按F8到安全模式中刪除即可。
如果使用其他辦法無法刪除可選擇Unlocke。
4、當使用者發現有某個文件或目錄無法刪除時,只要按下滑鼠右鍵中的「Unlocke」,那麼程序馬上就會顯示出是哪一些程序佔用了該目錄或文件,接著只要按下彈出的窗口中的「Unlock」就能夠為你的文件解套。
5、 Unlocke不同於其它解鎖軟體的部分在於它並非強制關閉搜攜那些佔用文件的程序,而是以解除文件與程序關連性的方式來解鎖,因此不會像其它解鎖世核伏程序一樣因為強制關閉程序而造成使用者可能的數據遺失。
❷ Docker(5)——垃圾清理
docker會產生一些垃圾,有哪些垃圾,1.鏡像垃圾,容器垃圾,其它緩存垃圾,數據卷垃圾,構建緩存垃圾
清除docker鏡像緩存
為什麼就一個命令也要單開一個博客記錄
因為坑死我了,打了一早上鏡像一直有問題,搞到最後是緩存的鍋
佛了!
命令
docker system prune --volumes
1
該命令清除:
所有停止的容器
所有不被任何一個容器使用的網路
所有不被任何一個容器使用的volume
所有無實例的鏡像
可以通過將-a選項傳遞給docker container ls命令來獲得所有活動容器和非活動容器的列表:
docker container ls -a
知道要刪除的容器的CONTAINER ID後,請將其傳遞給docker container rm命尺察令。例如,要刪除上面輸出中列出的前兩個容器,請運行:
docker container rm cc3f2ff51cab cd20b396a061
docker rm cc3f2ff51cab cd20b396a061
停止容器
docker container stop cc3f2ff51cab
刪除所有已停止的容器
docker container prune
查看docker的鏡像
docker image ls
刪除docker鏡像
注意:要刪除圖像,必須先刪除對應的容器。
docker image rm 75835a67d134 2a4cca5ac898
docker rmi 75835a67d134 2a4cca5ac898
實際上,當同一個鏡像擁有多個標簽時,執行 docker rmi 命令,只是會刪除了該鏡像眾多標簽中指定的標簽,並不會影響原始的那個鏡像文件。如果明困襲某個鏡像不存在多個標簽,當且僅當只有一個標簽時,執行刪除命令時,這會徹底刪除鏡像
在使用 Docker 一段時間後,系統一般都激兄會殘存一些臨時的、沒有被使用的鏡像文件,可以通過以下命令進行清理:
docker image prune -a
查看docker卷
docker volume ls
刪除docker卷
docker volume rm 4e12af8913af
刪除所有未使用的卷
docker volume prune
docker system是用於管理磁碟空間的命令,docker system df,類似於df命令,專門用來查看docker的磁碟使用情況。
❸ homeassistant卡在docker
原因是Docker容器出現了一些問題。解決方法正如:
1、查看日誌:使用dockerlogs命令來查看HomeAssistant的日誌信息,從日誌中找到具體的錯誤提示信息。依據錯誤提示信息進行排查和處理。
2、重啟容器:使用dockerrestart命令重啟HomeAssistant容器,嘗試解決問返清哪題。
3、清理緩存:使用dockersystemprune命令清理Docker系統的緩存和臨時文件,釋放磁碟空間,有時候過多的緩存會導致問題。
4更新版本:檢查HomeAssistant和Docker的最新版本漏碼,並更新到最新版,有時候版本過舊也會導致問題。
❹ 如何使用 的 docker hub緩存服務
推薦使用Dockerfile方式。
服務的管理使用的是supervisord, 因為dockerfile里只會有一個cmd生效,如果我想通過ssh去管理容器還要有mysql服務的啟動起來 cmd的方式就無法實現,當然容器不需要以sshd的方式去管理,這些也都是看自己怎麼去使用,比如說我想備份容器里的數據 我完全可以使用 –volumes-from <容器name> , 重啟使用 docker restart <容器id>, 我個人也是使用ssh習慣了 所以依賴的鏡像把ssh服務栽進去了。
# docker 版本:
復制代碼
代碼如下:
[root@private_network mysql]# docker version
Client version: 1.6.0-rc5
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): fc4825d
OS/Arch (client): linux/amd64
Server version: 1.6.0-rc5
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): fc4825d
OS/Arch (server): linux/amd64[/code]
❺ 在Docker容器中操作Docker (dind)
就是在Docker容器中再次運行一個Docker服務.
在一個乎拿容器中操作Docker在CI工具中是很常見的, 如構建一個Docker鏡像.
但由於在容器中運行一個Docker服務會有各種問題, 如鏡像文件存儲, 嵌套的容器也並不容易維護, 後來便衍生出了另一種更實用的方案: 掛載主機上Docker服務的sock
這樣將不會遇到嵌套副作用,並且將在多個調用之間共享構建緩存。
ps: 更多知識請閱讀 docker 官方提及的這篇文章: do-not-use-docker-in-docker-for-ci
我接下來要寫的也是如何使用它, 並記錄我的使用場景.
我有一個需求是這樣的:
當某個鏡返頃塵像更新之後, 通知docker重新pull並部署. 簡單的來說就是當容器更新, 就自動運行
以實現更新部署.
由於自己編寫的程序也運行在Docker中, 而不是宿主機, 所有沒辦法直接執行以上命令, 這就需要Docker In Docker了.
簡單來說 你只需要這樣:
然後 docker ps 就能看到 宿主機上 的所有容器.
如我的就是
當然 這里的stack.yaml文件需要在構建這個容器時添加進來 或者 掛載進來, 這肯定難不倒你.
如果你要將這段CMD在你的程序中運行也十分簡單:
寫好程序之後你可以使用這個Dockfile構建你的鏡像
而運行這個鏡像的stack.yaml文件需要配置掛載
你會看到我又掛載了.docker文件夾, 這個無關緊要, 在後面的疑難雜症會說漏禪到這個問題.
此參數是17.9版本之後新加的, 用於解決deploy不pull最新的鏡像的問題. 詳情看這個ISSUE:
force docker deploy to pull new images
私有倉庫必須登錄才有訪問許可權, 所以需要在宿主機上先login, 登錄成功後會發現在 ~/.docker有新生成的 配置文件
, 其中存儲了認證所需要的信息. 但在Docker容器中拿不到這個信息所以就會報錯.
解決辦法是將配置文件掛載進容器
問題描述:
網路結構如下:
客戶端 -> 伺服器上的Nginx容器 (反代)-> 應用程序
在Nginx中配置了
在應用程序中得到"HTTP_X_FORWARDED_FOR"頭 卻是10.255.0.2, 而不是客戶端真正的ip.
解決辦法:
google : docker 10.255.0.2
得到的信息挺多的, 大多數是Docker3年4年都沒有close的ISSUE....
當前可用的解決辦法有
❻ docker 部署鏡像
以阿里雲鏡像示範:
一、手動部署:
1.mkdir ktc: 創建文件夾
2.把項目里的maven緩存 clean 清理掉
3.然後package 打成 jar包
4.然後登錄阿里雲,在產品與服務找到容器鏡像服務
5.創建好命名空間,然後再創個公開的歲滾鏡像倉庫;
6.創建好之後 登錄阿里雲Docker Registry,創建好倉庫有操作指南,後面的是公網地址,*要自己補全
7.輸入密碼是看不到的,顯示Login Succeeded 就登錄成功,然後就構建鏡像 名字自己鋒雀穗取
8.sudo其銀卜實可有可無,管理員許可權,imageid是什麼構建的鏡像的id 後面版本號也是自己設置
9.然後就是提交了
❼ 詳解Docker——你需要知道的Docker進階知識五
Dockerfile 是一個文本文件,其中包含了構建 Docker 鏡像需要執行的命令序列。使用 docker build 命令從 Dockerfile 中讀取指令來構建鏡像。
構建鏡像時,該過程的第一件事是將 Dockerfile 文件所在目錄下的所有內容發送給 Docker 守護進程。所以大多數情況下,最好創建一個新的目錄,在其中保存 Dockerfile ,以及構建鏡像所需的其它文件。Dockerfile 文件所在目錄也被稱為構建上下文(context)。
使用 FROM 指令指定一個基礎鏡像,後續指令將在此鏡像基礎上運行:
在 Dockerfile 中可以指定一個用戶,後續的 RUN , CMD 以及 ENTRYPOINT 指令都會使用該用戶身份去執行,該用戶必須已存在。
除了指定用戶之外,還可以使用 WORKDIR 指定當前工作目錄(CWD), RUN , CMD , COPY , ADD 指令將在指定的工作目錄中執行。
RUN 指令用於執行命令,該指令有兩種形式:
例如我們執行更新命令:
CMD 的使用方式跟 RUN 類似,不過在一個 Dockerfile 文件中只能有一個 CMD 指令,如果有多個,則只有最後一個會生效。該指令指定了啟動容器時要執行的命令,例如:
可以在 docker run 時指定命令來覆蓋默認的 CMD 命令,比如 docker run image echo"hello shiyanlou" 。
CMD 指令還有一種特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,則 CMD 指令的內容會作為 ENTRYPOINT 指令的參數:
ENTRYPOINT 指令會覆蓋 CMD 指令作為容器運行時的默認指令,並且該指令不會被 docker run 時指定的指令覆蓋,如下示例:
上述文件構建出來的鏡像,使用 docker run image 等同於 docker run image ls-a-l 。使用 docker run image-i-s 等同於 docker run image ls-a-i-s 。即 CMD 指令的值會被當作 ENTRYPOINT 指令的參數附加到 ENTRYPOINT 指令的後面,只有 CMD 指令可以被覆蓋。
COPY 和 ADD 都用於將構建上下文中的文件,目錄等復制到鏡像中。使用方式如下:
`` 可以指定多個,但是其路徑不能超出構建上下文范圍,即必須在 Dockerfile 同級或子目錄中。
不需要預先存在,不存在時會自動創建,如果使用相對路徑,則 為相對於工作目錄的路徑。塌陪
COPY 和 ADD 的不同之處在於,ADD 可伏衫或以添加遠程文件,並且 `` 可以是 gzip 或 tar 等格式的壓縮文件,添加時會自動進行解壓。
ENV 指令用於設置環境變數:
VOLUME 指令指定要創建的掛載路徑,在容器運行時,將為每個掛載路徑創建一個匿名卷並掛載上去:
上述指令將會在容器運行時,創建兩個匿名卷,並分別掛載到容器中的 /data1 和 /data2 路徑。
學習了上面這些常見的 Dockerfile 指令之後,可以使用這些指令來構建一個鏡像。如下所示,構建一個提供 ssh 服務的鏡像:
構建鏡像
查看鏡像
啟動容器
查看已經啟動的容器
測試遠程登錄
Compose 是運行由多個容器組成的 Docker 應用的工具,使用 Compose 可以一次啟動一組有關聯的服務,每個服務由來自同一鏡像的單個或多個容器組成。
在復雜應用中,應用一般由多個服務(service)組成,例如一個網站後台通常包含 Web 服務、資料庫服務、緩存缺伍服務、消息隊列服務等。
使用 Compose 的步驟如下:
目前有三種版本的 Compose 文件格式:
下載 docker-compose-Linux-x86_64
下載成功後,為了方便使用,可以將其添加到 PATH 路徑下
執行完成後,就能夠在終端下直接使用 docker-compose 命令了:
接下來我們將創建一個 Web 應用,該應用包含兩個容器:
項目目錄結構如下:
首先編輯 app/web/web.py 文件,寫入下面的內容:
上述代碼創建了一個簡單的 Web 應用。該應用會連接 redis 服務,在訪問 / 頁面時,自動將變數 number 加 1。
編輯 app/web/requirements.txt 文件,輸入如下內容:
requirements.txt 文件存放了 Web 應用依賴的第三方庫包的名稱和版本信息。
編輯 app/web/Dockerfile 文件,添加如下內容
上述 Dockerfile 定義了 Web 應用鏡像,該鏡像基於 python:2.7 基礎鏡像,在其基礎上安裝了應用依賴的庫包,並通過 CMD 指令指定了應用的啟動命令。
編輯 app/docker-compose.yml 文件:
該 docker-compose.yml 文件定義了兩個服務,分別為 web 和 redis 服務,並且配置了 web 服務的埠映射和掛載目錄。 depends_on 定義了依賴關系,被依賴的服會先啟動。
進入 app 目錄,執行 docker-compose up 命令來啟動應用:
啟動成功後,就可以打開網址 127.0.0.1:8001 來訪問 Web 應用了。
另外一些命令:
❽ Docker NextCloud Redis緩存配置
轉自我的博客:https://sleele.com/2019/04/19/docker-nextcloud-redis緩則悄存配置/
前言
nextcloud這個東西真的是挺慢的,文件一多等刷新都要等很久,孫衡渣如果配置了Redis做緩存就會快不少
搭建過程我就不再贅述了,可以參照我上篇博文
https://sleele.com/2019/03/03/linux-qbittorrent和nextcloud安裝筆記/
部署redis
docker run --name redis -d redis
查看docker容器IP
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
之後修改nextcloud的配置文件
首先到本地
docker cp nextcloud:/var/www/html/config/config.php /tmp/
vi /tmp/config.php
添加如下內容
找准位置在攔早【'memcache.local' => '\OC\Memcache\APCu',】 這行後面添加
host那行換成你的redis地址
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '172.17.0.5',
'port' => 6379,
),
再回去,注意直接回去會導致nextcloud報錯,需要修改許可權
docker cp config.php nextcloud:/var/www/html/config/
docker exec -it nextcloud bash
cd /var/www/html/config/
chmod 777 config.php
重啟nextcloud,教程結束
docker restart nextcloud
❾ 如何使用Docker開源倉庫建立代理緩存倉庫
開源Docker倉庫v2 的其中一個最新特性:能夠被用作代理緩存倉庫,以緩存Docker Hub上的鏡像。運行一個緩存倉庫允許你在本地儲存鏡像,減少過多的通過互聯網從Docker Hub拉取鏡像,這個特性對於一些在他們環境中擁有數量龐大的Docker引擎的用戶來說很有用。跟著本篇教程,你可以讓Docker引擎從本地代理緩存倉庫拉取鏡像,而不是讓每個引擎總是從Docker Hub拉取,從而節省時間和帶寬。
你可以這樣開始:
####要求:
- Docker引擎1.8.3
- Docker倉庫v2
- 足夠儲存Docker鏡像的磁碟空間
- TLS證書和密鑰
持久化數據
在這個例子中,我們會假設你會儲存所有持久化數據在本地文件系統的<code>/data</code>路徑下,這個路徑下包含TLS證書和密鑰文件,配置文件和鏡像緩存文件。我們之後會用卷掛載這個目錄進運行倉庫的容器。
保護你的代理緩存倉庫安全
代理緩存倉庫需要一個TLS證書來保證Docker引擎和緩存倉庫之間的連接安全,在這個例子中,我們會放置我們證書文件(<code>domain.crt</code>)和密鑰文件(<code>domain.key</code>)在主機的<code>/data</code>目錄。
更多關於使用TLS加強倉庫安全的信息,請參照 Docker倉庫2.0文檔 。
創建代理緩存倉庫配置文件
下一步你需要創建一個配置文件,來把這個倉庫用作代理緩存。你可以用cat命令把<code>registry:2</code>鏡像中的預設配置文件重定向輸出到一個文件中:
sh
$ docker run -it --rm --entrypoint cat registry:2 \
/etc/docker/registry/config.yml > /data/config.yml
<code>我強烈建議從Docker鏡像中獲得這個默認配置,而不是使用例子中的配置,因為將來這個默認配置可能會有更新。</code>
默認的config.yml例子:
yaml
version: 0.1
log:
fields
service: registry
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
修改'http'這節配置上TLS:
yaml
http:
addr: :5000
tls:
certificate: /var/lib/registry/domain.crt
key: /var/lib/registry/domain.key
在配置文件中新加一節'proxy'來開啟緩存:
點擊打開文檔( https://github.com/docker/dist ... or.md )
yaml
proxy:
remoteurl: https://registry-1.docker.io
username: [username]
password: [password]
'username'和'password'這兩個選項是可選的,這是Docker Hub賬號的用戶名和密碼,設置上這兩個選項,會使代理緩存倉庫獲取到這個賬號的同等許可權,也就是說,這個用戶有許可權獲取的鏡像,這個緩存倉庫同樣有許可權獲取。
<code>請確保完全理解設置這個Docker Hub賬號背後意味著什麼,並且確保你鏡像的安全還有嚴格的訪問許可權!如果你不確定,請不要再配置包含用戶名和密碼,那麼你的代理緩存倉庫就只會緩存公共鏡像。</code>
啟動代理緩存倉庫的容器:
sh
$ docker run -d --restart=always -p 5000:5000 --name v2-mirror \
-v /data:/var/lib/registry registry:2 /var/lib/registry/config.yml
以上命令使用一個卷把宿主機上的/data掛載進了容器中,使容器能使用持久儲存鏡像緩存,TLS證書和密鑰,還有自定義的倉庫配置文件。
驗證你的代理緩存倉庫已經啟動並正常運行:
sh
$ curl -I https://mycache.example.com:5000/v2/
HTTP/1.1 200 OK
Content-Length: 2
Content-Type: application/json; charset=utf-8
Docker-Distribution-Api-Version: registry/2.0
Date: Thu, 17 Sep 2015 21:42:02 GMT
配置你的Docker引擎使用代理緩存倉庫
修改Docker守護進程的啟動參數,加上<code>--registry-mirror</code>選項:
sh
--registry-mirror=https://<my-docker-mirror-host>:<port-number>
例如,如果你的緩存倉庫的主機名為mycache.example.com並且倉庫服務埠為5000,你需要加上以下選項到守護進程的參數:
sh
--registry-mirror=https://mycache.example.com:5000
參考 在各種的Linux分發版中配置運行Docker 了解更多信息關於如何添加Docker守護進程參數。
測試你的代理緩存倉庫
從Docker Hub上拉取一個你本地沒有的鏡像。例如,busybox:latest鏡像:
sh
$ docker pull busybox:latest
檢查緩存倉庫中的目錄,驗證busybox鏡像是否被緩存:
sh
$ curl https://mycache.example.com:5000/v2/_catalog
{"repositories":["library/busybox"]}
你也可以驗證latest標簽是否被緩存:
sh
$ curl https://mycache.example.com:5000/v2/library/busybox/tags/list
{"name":"library/busybox","tags":["latest"]}
現在開始當你拉取鏡像時,鏡像將被緩存到你的代理緩存倉庫,之後拉取相同的鏡像時會更快,並且這些鏡像緩存會維護自身,當他們不再被使用時將會自動清除。