====== 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 的最新版方式 ====
* 參考 - https://stackoverflow.com/questions/49316462/how-to-update-existing-images-with-docker-compose
* 因為有很多使用的 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"}
}
===== 開始下載與測試 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 **
docker search ubuntu
* 安裝 Image Template **docker pull **
docker pull centos
* 列出目前已安裝的 Image Template **docker images**
docker images
* 刪除不需要的 Image Template **docker rmi **
docker rmi 2a973533a1af
* 建立自己的 Image Template **docker commit -m="" -a="" :**
docker commit -m="Add trysrvtool and pingserver" -a="Jonathan Tsai" c299814447ed tryweb/tryimg01:v1
* 對 Image Template 增加 TAG **docker tag :**
docker tag dc30d39a01da tryweb/phplist:latest
* 將 Image Template 存成檔案 **docker save > .tar** Exp. busybox
docker save busybox > busybox.tar
* 將 Image Template 檔案匯入 **docker load --input .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 ====
* 查詢有哪些 docker container 存在 **docker ps --all**
docker ps --all
在 STATUS 欄位可以看到是否運中還是離開(Exited)狀態
* 使用 bash 進入到運行中的 docker container **docker exec -it or /bin/bash**
~$ docker exec -it c789b6b5ee99 bash
bash-5.0#
* 切換到運行中的 docker container **docker attach or **
docker attach silly_hawking
* 啟動離開(Exited)狀態的 docker container **docker start or **
docker start 2522259349a9
* 查看 docker container 的 Console 訊息 **docker logs or **
docker logs 2522259349a9
* 查看 docker container 的詳細資訊 **docker inspect or **
docker inspect 2522259349a9
docker inspect -f "{{ .NetworkSettings }}" 2522259349a9
* 備份 docker container
* 關閉啟動中的 docker container (成為離開狀態)**docker stop or **
docker stop 2522259349a9
* 刪除已關閉(離開狀態)的 docker container**docker rm or **
docker rm 2522259349a9
* 查看 image 內的相關訊息 **docker run -i -t **
docker run -i -t php:7.0.33-cli-jessie bash
===== 針對 docker compose 內其中一個 container 更改設定後重新啟動 =====
* 參考 - https://stackoverflow.com/questions/37609662/docker-compose-restart-only-updated-images
* 處理方式 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)
* [[tech:docker:phplist|PHPList]]
* [[tech:docker:openvpn|VPN Server (openvpn)]]
* SVN Server (subversion)
* DB Server (mysql / postgresql)
* File Server (ceph)
* docker mrtg howto
* docker container live migration howto
* [[tech:docker:howto:storage|docker storage howto]]
* [[tech:docker:howto:backup|docker backup / restore howto]]
* [[tech:docker:howto:autostart|docker container auto start howto]]
===== 參考網址 =====
* http://www.liquidweb.com/kb/how-to-install-docker-on-centos-6/
* https://docs.docker.com/userguide/
* https://docs.docker.com/engine/reference/commandline/images/
{{tag>安裝 Docker 虛擬化 k8s}}