差異處

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

連向這個比對檢視

兩邊的前次修訂版 前次修改
下次修改
前次修改
tech:docker [2023/03/13 13:01] jonathantech:docker [2025/04/10 12:51] (目前版本) – [清除目前主機端未使用的 docker images] jonathan
行 2: 行 2:
  
 ===== 安裝程序 ===== ===== 安裝程序 =====
 +==== Ubuntu 22.04 ====
 +  * 安裝語法 
 +    * 標準安裝 <cli>
 +sudo apt-get update
 +sudo apt-get install ca-certificates curl gnupg
 +sudo install -m 0755 -d /etc/apt/keyrings
 +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 +sudo chmod a+r /etc/apt/keyrings/docker.gpg
 +
 +# Add the repository to Apt sources:
 +echo \
 +  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
 +  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
 +  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 +sudo apt-get update
 +
 +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
 +</cli>
 +
 ==== Ubuntu 20.04 ==== ==== Ubuntu 20.04 ====
   * 安裝語法    * 安裝語法 
     * 標準安裝 <cli>     * 標準安裝 <cli>
-sudo apt install docker docker-compose-plugin+curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 
 +sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 
 +sudo apt install docker.io docker-compose-plugin
 </cli> </cli>
     * 指定 docker 版本 <cli>     * 指定 docker 版本 <cli>
行 26: 行 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 的最新版方式 ====
 +  * 參考 - https://stackoverflow.com/questions/49316462/how-to-update-existing-images-with-docker-compose
 +  * 因為有很多使用的 image 都是 latest 的 tag , 簡單更新與移除舊 image 方式如下<cli>
 +docker compose pull
 +docker compose up --force-recreate --build -d
 +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>
 +
 ===== 開始下載與測試 Template ===== ===== 開始下載與測試 Template =====
   * CentOS <code sh>   * CentOS <code sh>
行 66: 行 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
 </code>在 STATUS 欄位可以看到是否運中還是離開(Exited)狀態 </code>在 STATUS 欄位可以看到是否運中還是離開(Exited)狀態
 +  * 使用 bash 進入到運行中的 docker container **docker exec -it <CONTAINER ID> or <NAMES> /bin/bash**<cli>
 +~$ docker exec -it c789b6b5ee99 bash
 +bash-5.0#
 +</cli>
   * 切換到運行中的 docker container **docker attach <CONTAINER ID> or <NAMES>**<code sh>   * 切換到運行中的 docker container **docker attach <CONTAINER ID> or <NAMES>**<code sh>
 docker attach silly_hawking docker attach silly_hawking
  • tech/docker.1678683662.txt.gz
  • 上一次變更: 2023/03/13 13:01
  • jonathan