差異處

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

連向這個比對檢視

兩邊的前次修訂版 前次修改
下次修改
前次修改
tech:docker [2024/11/10 13:11] – [清除目前主機端未使用的 docker images] jonathantech:docker [2025/09/25 12:33] (目前版本) – 設定使用者與權限 jonathan
行 2: 行 2:
  
 ===== 安裝程序 ===== ===== 安裝程序 =====
-==== Ubuntu 22.04 ====+==== Ubuntu 22.04 / 24.04 ====
   * 安裝語法    * 安裝語法 
     * 標準安裝 <cli>     * 標準安裝 <cli>
行 33: 行 33:
 sudo apt-get install docker-ce=5:19.03.14~3-0~ubuntu-focal docker-ce-cli=5:19.03.14~3-0~ubuntu-focal docker-compose-plugin containerd.io -y sudo apt-get install docker-ce=5:19.03.14~3-0~ubuntu-focal docker-ce-cli=5:19.03.14~3-0~ubuntu-focal docker-compose-plugin containerd.io -y
 </cli>  </cli> 
 +
 +==== 設定使用者與權限 ====
   * 設定特定使用者使用 docker 權限 Exp. jonathan<cli>   * 設定特定使用者使用 docker 權限 Exp. jonathan<cli>
 sudo usermod -aG docker jonathan sudo usermod -aG docker jonathan
 +</cli>如果是針對目前帳號可以直接使用 $USER<cli>
 +sudo usermod -aG docker $USER
 </cli> </cli>
 +  * 讓使用權限可以立即生效 <cli>
 +newgrp docker
 +</cli>這樣執行 docker 命令就不會出現無法連上 docker 服務
   * 安裝 rootless docker 方式<cli>   * 安裝 rootless docker 方式<cli>
 curl -s https://get.docker.com/ | bash curl -s https://get.docker.com/ | bash
行 47: 行 54:
 </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 的最新版方式 ====
行 62: 行 75:
 } }
 </file> </file>
 +
 +==== 設定透過 dockerhub proxy 抓取 image =====
 +  * 建立與設定 dockerhub proxy - [[tech/dockerhubproxy]]
 +  * 在 /etc/docker/daemon.json 設定 "registry-mirrors", Exp. https://harbor.dev7.iiidevops.org/v2/dockerhub/ <file>
 +{
 +  "registry-mirrors": [
 +    "https://harbor.dev7.iiidevops.org/v2/dockerhub/"
 +  ]  
 +}
 +</file>
 +  * 需要重啟 docker 服務才能生效
 +    * alpine<cli>
 +service docker restart
 +</cli>
 +    * ubuntu<cli>
 +systemctl restart docker
 +</cli>
 +  * 確認是否設定成功 <cli>docker info</cli>
 +    * ++看範例訊息|<cli>
 +iiidevops@librenms-37:~/librenms$ docker info
 +Client:
 + Version:    26.1.3
 + Context:    default
 + Debug Mode: false
 + Plugins:
 +  buildx: Docker Buildx (Docker Inc.)
 +    Version:  v0.23.0
 +    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
 +  compose: Docker Compose (Docker Inc.)
 +    Version:  v2.35.1
 +    Path:     /usr/libexec/docker/cli-plugins/docker-compose
 +
 +Server:
 + Containers: 8
 +  Running: 8
 +  Paused: 0
 +  Stopped: 0
 + Images: 6
 + Server Version: 26.1.3
 + Storage Driver: overlay2
 +  Backing Filesystem: extfs
 +  Supports d_type: true
 +  Using metacopy: false
 +  Native Overlay Diff: true
 +  userxattr: false
 + Logging Driver: json-file
 + Cgroup Driver: cgroupfs
 + Cgroup Version: 1
 + Plugins:
 +  Volume: local
 +  Network: bridge host ipvlan macvlan null overlay
 +  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 + Swarm: inactive
 + Runtimes: io.containerd.runc.v2 runc
 + Default Runtime: runc
 + Init Binary: docker-init
 + containerd version:
 + runc version:
 + init version:
 + Security Options:
 +  apparmor
 +  seccomp
 +   Profile: builtin
 + Kernel Version: 5.4.0-205-generic
 + Operating System: Ubuntu 20.04.6 LTS
 + OSType: linux
 + Architecture: x86_64
 + CPUs: 4
 + Total Memory: 3.833GiB
 + Name: librenms-37
 + ID: da124914-d83d-4aba-abe7-6c60d903f24c
 + Docker Root Dir: /var/lib/docker
 + Debug Mode: false
 + Experimental: false
 + Insecure Registries:
 +  127.0.0.0/8
 + Registry Mirrors:
 +  https://harbor.dev7.iiidevops.org/
 + Live Restore Enabled: false
 +
 +WARNING: No swap limit support
 +</cli>++
 +
  
 ==== 清除目前主機端未使用的 docker images ===== ==== 清除目前主機端未使用的 docker images =====
-  * 先刪除已經 exit 狀態的 docker 程序<cli>+  * 先刪除已經 exited 狀態的 docker 程序<cli>
 docker rm $(docker ps -a -q -f status=exited) docker rm $(docker ps -a -q -f status=exited)
 </cli> </cli>
行 70: 行 166:
 sudo docker system prune -a -f sudo docker system prune -a -f
 docker volume ls -qf dangling=true | xargs --no-run-if-empty docker volume rm 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>
  
行 112: 行 221:
  
 ==== 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.1731215510.txt.gz
  • 上一次變更: 2024/11/10 13:11
  • jonathan