Docker 語法與操作整理
安裝程序
Ubuntu 22.04
- 安裝語法
- 標準安裝
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
Ubuntu 20.04
- 安裝語法
- 標準安裝
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
- 指定 docker 版本
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-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
- 設定特定使用者使用 docker 權限 Exp. jonathan
sudo usermod -aG docker jonathan
- 安裝 rootless docker 方式
curl -s https://get.docker.com/ | bash dockerd-rootless-setuptool.sh install
- 如果要在 rootless docker 讓 container 能夠 listen 1024 以下的 Port 需要執行
sudo setcap cap_net_bind_service=+ep "/usr/bin/rootlesskit" systemctl --user restart docker
更新 docker compose 內相同 image 的最新版方式
- 因為有很多使用的 image 都是 latest 的 tag , 簡單更新與移除舊 image 方式如下
docker compose pull docker compose up --force-recreate --build -d docker image prune -f
設定自動清除 docker log
- 主要是建立 /etc/docker/daemon.json 這設定檔, 定義自動分割與刪除 Exp. log size 最大 10m, 保留最近 3 份
{ "log-opts": {"max-size": "10m", "max-file": "3"} }
清除目前主機端未使用的 docker images
- 先刪除已經 exited 狀態的 docker 程序
docker rm $(docker ps -a -q -f status=exited)
sudo docker system prune -a -f docker volume ls -qf dangling=true | xargs --no-run-if-empty docker volume rm
開始下載與測試 Template
- CentOS
docker pull centos
- Fedora
docker pull fedora docker run -i -t fedora /bin/bash
- 輸入 exit 就可以結束與離開
- 輸入 CTRL-p + CTRL-q 可以離開 (docker container 繼續在背景執行)
基本操作方式
Image Template
- 找目前 Internet 已存在的 Image Template docker search <keyword>
docker search ubuntu
- 安裝 Image Template docker pull <img tmp name>
docker pull centos
- 列出目前已安裝的 Image Template docker images
docker images
- 刪除不需要的 Image Template docker rmi <IMAGE ID>
docker rmi 2a973533a1af
- 建立自己的 Image Template docker commit -m=“<Message>” -a=“<Author Name>” <CONTAINER ID> <REPOSITORY>:<TAG>
docker commit -m="Add trysrvtool and pingserver" -a="Jonathan Tsai" c299814447ed tryweb/tryimg01:v1
- 對 Image Template 增加 TAG docker tag <IMAGE ID> <REPOSITORY>:<New TAG>
docker tag dc30d39a01da tryweb/phplist:latest
- 將 Image Template 存成檔案 docker save <img tmp name> > <img tmp name>.tar Exp. busybox
docker save busybox > busybox.tar
- 將 Image Template 檔案匯入 docker load –input <img tmp name>.tar Exp. busybox
docker load --input busybox.tar
- 顯示 Images 的 Digest
docker images --digests
- 顯示特定格式 Images 資訊 Exp. iiiorg/devops-api
docker images iiiorg/devops-api --format "{{.ID}}: {{.Repository}}:{{.Tag}} {{.Digest}}" | grep devops-api:1
結果顯示如下:
fcfbe89fe52a: iiiorg/devops-api:1 sha256:d6ce6ffa86c37b387cc07ac5cecb92fd97457b96b155cc2692658312be1b8ea5
Container
- 想要 sh 進入操作有 ENTRYPOINT 的 image 容器
- 啟動一個臨時容器, Exp. certbot/dns-cloudflare:latest
docker run -it --rm --entrypoint /bin/sh certbot/dns-cloudflare:latest
- 進入一個啟動容器, Exp. certbot
docker exec -it certbot /bin/sh -c sh
- 查詢有哪些 docker container 存在 docker ps –all
docker ps --all
在 STATUS 欄位可以看到是否運中還是離開(Exited)狀態
- 使用 bash 進入到運行中的 docker container docker exec -it <CONTAINER ID> or <NAMES> /bin/bash
~$ docker exec -it c789b6b5ee99 bash bash-5.0#
- 切換到運行中的 docker container docker attach <CONTAINER ID> or <NAMES>
docker attach silly_hawking
- 啟動離開(Exited)狀態的 docker container docker start <CONTAINER ID> or <NAMES>
docker start 2522259349a9
- 查看 docker container 的 Console 訊息 docker logs <CONTAINER ID> or <NAMES>
docker logs 2522259349a9
- 查看 docker container 的詳細資訊 docker inspect <CONTAINER ID> or <NAMES>
docker inspect 2522259349a9 docker inspect -f "{{ .NetworkSettings }}" 2522259349a9
- 備份 docker container
- 關閉啟動中的 docker container (成為離開狀態)docker stop <CONTAINER ID> or <NAMES>
docker stop 2522259349a9
- 刪除已關閉(離開狀態)的 docker containerdocker rm <CONTAINER ID> or <NAMES>
docker rm 2522259349a9
- 查看 image 內的相關訊息 docker run -i -t <image> <shell cmd>
docker run -i -t php:7.0.33-cli-jessie bash
針對 docker compose 內其中一個 container 更改設定後重新啟動
- 處理方式 Exp. iii-devops-lite-ui
docker-compose up -d --no-deps iii-devops-lite-ui
預計測試項目
- DNS (named)
- Proxy (nginx)
- Web Server (apache+php)
- Mail Server (sendmail+MailScanner)
- SVN Server (subversion)
- DB Server (mysql / postgresql)
- File Server (ceph)
- docker mrtg howto
- docker container live migration howto