頻道欄目
首頁 > 資訊 > Linux > 正文

15個Docker 技巧和提示

17-06-30        來源:[db:作者]  
收藏   我要投稿

15個Docker 技巧和提示

CLI(Command Line Interface,命令行)

好的 docker ps 輸出

將 docker ps 輸出通過管道重定向到 less -S,避免折行:

docker ps -a | less -S

跟隨 logs

docker logs 默認情況下不會觀察日志,除非你使用 -f 參數:

docker logs  -f                                                        

docker inspect 輸出漂亮的 JSON

docker inspect 默認輸出大量的 JSON,可以通過 jq 提取需要的那些值:

# list IP addresses for all containers connected to 'bridge' network
docker network inspect bridge -f '{{json .Containers}}' | jq '.[] | {cont: .Name, ip: .IPv4Address}

也可以像下面這樣在 docker inspect 中使用內置的模板:

# is the last run container still running?
docker inspect --format '{{.State.Running}}' $(docker ps -lq)

Docker 命令完成

Docker CLI 語法非常豐富,而且還在不斷充實:添加新的命令和參數。要記住每個命令和參數幾乎不可能,所以在終端上能自動完成這些命令很有必要。

命令完成是一個終端插件,通過 Tab 鍵,它會自動完成或建議你接下來要輸入的內容。Docker 命令完成功能對命令和選項都能生效。Docker 團隊為 Bash shell 和 Zsh shell 下的 docker、docker-machine 和 docker-compose 命令提供完成功能。

清理

使用一段時間 Docker 之后,沒用的東西開始增長:不用的卷、網絡、已退出的容器和不用的映像等。

prune:運行全部

prune 是個非常有用的命令(可在 vaume 和 network 子命令中使用),但它從 Docker 1.13 開始才有。如果你使用舊的 Docker 版本,下面的命令可用于代替 prune 命令。

docker system prune

移除懸空卷

懸空卷是不被任何容器使用的卷。若要移除它們,需要結合兩個命令:首先列出懸空卷的 ID 然后移除它們。

docker volume rm $(docker volume ls -q -f "dangling=true")

刪除已退出的容器

這個操作與上面的步驟相同。首先列出要刪除(通過過濾)的容器(僅 ID)然后刪除它們(參考 rm -f 強制刪除)。

docker rm $(docker ps -q -f "status=exited")

刪除懸空映像

懸空映像是未標記的映像,它們是映像樹的葉節點(不是中間層)。

docker rmi $(docker images -q -f "dangling=true")

網絡

Docker 內部有一個保存 IP 地址的 IP 地址池。這些 IP 地址默認對外不可見,需要通過橋接進行訪問。

查找端口映射

docker run 接收明確的端口映射參數,你也可以使用 -P 來自動映射所有端口。后者的優勢在于可以防止沖突, 可以通過下面的命令查找已經分配的端口:

docker port  
# 或
docker inspect --format '{{.NetworkSettings.Ports}}' 

容器 IP

每個容器在私有子網中都有自己的 IP (默認是 172.17.0.0/16)。重啟可以改變 IP,如果你需要,可以查詢:

docker inspect --format '{{.NetworkSettings.IPAddress}}' 

docker 會檢查沖突并會在必要的時候使用不同的子網。

接管主機的網絡棧

docker run --net=host 允許使用主機的網絡棧。不要干這種事情 :)

使用另一容器的網絡棧

$ docker run --net=container: ...

新容器可以附加到另一個容器使用的網絡接口。目標容器可以通過 ID 或名稱指定。

可附加的覆蓋網絡

使用集群模式的 Docker 引擎可以在一人管理節點的覆蓋網絡上創建多個主機。創建集群服務的時候你可以將其附加到之前創建的覆蓋網絡。

有時候你需要將新的 Docker 容器(填充不同的網絡工具)附加到已經存在的覆蓋網絡,以檢查網絡配置或調試問題。你可以使用 docker run 命令來完成,不需要創建全新的調試服務。

Docker 1.13 為 docker network create 命令添加了一個新選項:attachable。這個選項允許手工附加容器。

# create an attachable overlay network
 docker network create --driver overlay --attachable mynet
# create net-tools container and attach it to mynet overlay network
docker run -it --rm --net=mynet net-tools sh

自動啟動容器

在 Docker 容器中運行的某個進程可能會有很多原因失敗。某些情況下,可以通過重新運行失敗的容器來修復。如果你在使用 Docker 業務流引擎,像 Swarm 或 Kubernetes,失敗的服務會自動重啟。

如果沒有自動重啟,那么你可能希望根據容器中主進程的退出代碼來重啟容器,或者直接重啟容器(不管退出代碼)。Docker 1.12 給 docker run 命令添加了 restart 參數來處理這種情況。

總是重啟

配置重啟策略為總是重啟,這樣一但容器退出,Docker 就會重啟它。

docker run --restart=always my_image

失敗時重啟容器

配置重啟策略為失敗時重啟,最大重啟嘗試次數為 10。

docker run --restart=on-failure:10 my_image
相關TAG標簽
上一篇:Solr初步探索(一)
下一篇:Linux下如何查看哪些進程占用的CPU內存資源最多
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片