好的 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 '}' | jq '. |
也可以像下面這樣在 docker inspect 中使用內建的模板:
# is the last run container still running?
docker inspect --format '}' $(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 '}'
容器 ip
每個容器在私有子網中都有自己的 ip (預設是 172.17.0.0/16)。重啟可以改變 ip,如果你需要,可以查詢:
docker inspect --format '}'
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
谷歌15個技巧
如果你曾經使用過sublime text,那麼你一定知道沒有 go to anything 這個功能的覆蓋你不可能活下去。所以你會很高興聽到dev tools 也有這個功能。當devtools開啟的時候,你可以按下ctrl p 在mac上使用cmd p 來快速的尋找和開啟你工程中的任意檔案。但是如果...
VC小技巧15個
vc小技巧15個 一 一次只執行乙個程式例項 二 裝載游標 三 獲得主框架 獲得應用程式主視窗的指標 example afxgetmainwnd showwindow sw showmaxmized 使程式最大化 四 重新建立字型的 if m fontlogo.m hobject m fontlog...
VC小技巧15個
一 一次只執行乙個程式例項二 裝載游標三 獲得主框架 獲得應用程式主視窗的指標 example afxgetmainwnd showwindow sw showmaxmized 使程式最大化 四 重新建立字型的 if m fontlogo.m hobject m fontlogo.detach m ...