差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

兩邊的前次修訂版 前次修改
下次修改
前次修改
tech:docker [2023/11/05 16:33] – [更新 docker compose 內相同 image 的最新版方式] jonathantech:docker [2025/04/10 12:51] (目前版本) – [清除目前主機端未使用的 docker images] jonathan
行 47: 行 47:
 </cli> </cli>
 </note> </note>
 +
 +==== 刪除已經不執行的 docker container ====
 +  * 主要是在 docker run 之後, 如果沒有指定 --rm 就會在容器被停止或執行離開後留下, 可以使用 <cli>docker ps -a</cli>查看這些沒執行的容器, 當這樣的容器超過一定數量後, 就無法在這主機上建立新容器, 會出現類似空間不足的錯誤訊息
 +  * 解決方式
 +    - 透過<cli>docker container prune</cli>將這些停止的容器刪除
 +    - 檢查如果有 crontab 設定自動啟動容器, 要在 docker run 命令後加上 --rm 參數
  
 ==== 更新 docker compose 內相同 image 的最新版方式 ==== ==== 更新 docker compose 內相同 image 的最新版方式 ====
   * 參考 - https://stackoverflow.com/questions/49316462/how-to-update-existing-images-with-docker-compose   * 參考 - https://stackoverflow.com/questions/49316462/how-to-update-existing-images-with-docker-compose
   * 因為有很多使用的 image 都是 latest 的 tag , 簡單更新與移除舊 image 方式如下<cli>   * 因為有很多使用的 image 都是 latest 的 tag , 簡單更新與移除舊 image 方式如下<cli>
-docker-compose up --force-recreate --build -d+docker compose pull 
 +docker compose up --force-recreate --build -d
 docker image prune -f docker image prune -f
 +</cli>
 +
 +==== 設定自動清除 docker log =====
 +  * 主要是建立 /etc/docker/daemon.json 這設定檔, 定義自動分割與刪除 Exp. log size 最大 10m, 保留最近 3 份 <file>
 +{
 +  "log-opts": {"max-size": "10m", "max-file": "3"}
 +}
 +</file>
 +
 +==== 清除目前主機端未使用的 docker images =====
 +  * 先刪除已經 exited 狀態的 docker 程序<cli>
 +docker rm $(docker ps -a -q -f status=exited)
 +</cli>
 +  * <cli>
 +sudo docker system prune -a -f
 +docker volume ls -qf dangling=true | xargs --no-run-if-empty docker volume rm
 +</cli>
 +
 +==== 匯出與匯入 docker images =====
 +  * 當離線環境或自己 build 出的 image 就需要用到此功能
 +  * Exp. ai-gen-doc:1.1.3
 +    - 在來源主機匯出方式 <cli>
 +docker save -o ai-gen-doc-1.1.3.tar ai-gen-doc:1.1.3
 +</cli>
 +    - 在來源主機傳輸檔案到目標主機 <cli>
 +scp ai-gen-doc-1.1.3.tar [email protected]:/path/to/destination/
 +</cli>
 +    * 到目標主機匯入方式 <cli>
 +docker load -i ai-gen-doc-1.1.3.tar
 </cli> </cli>
  
行 95: 行 131:
  
 ==== Container ==== ==== Container ====
 +  * 想要 sh 進入操作有 ENTRYPOINT 的 image 容器
 +    * 啟動一個臨時容器, Exp. certbot/dns-cloudflare:latest<cli>docker run -it --rm --entrypoint /bin/sh certbot/dns-cloudflare:latest</cli>
 +    * 進入一個啟動容器, Exp. certbot <cli>docker exec -it certbot /bin/sh -c sh</cli>
   * 查詢有哪些 docker container 存在 **docker ps --all**<code sh>   * 查詢有哪些 docker container 存在 **docker ps --all**<code sh>
 docker ps --all docker ps --all
  • tech/docker.1699173219.txt.gz
  • 上一次變更: 2023/11/05 16:33
  • jonathan