顯示頁面舊版反向連結Fold/unfold all回到頁頂 本頁是唯讀的,您可以看到原始碼,但不能更動它。您如果覺得它不應被鎖上,請詢問管理員。 ====== Docker 語法與操作整理 ====== ===== 安裝程序 ===== ==== 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 ==== * 安裝語法 * 標準安裝 <cli> 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> * 指定 docker 版本 <cli> 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 </cli> * 設定特定使用者使用 docker 權限 Exp. jonathan<cli> sudo usermod -aG docker jonathan </cli> * 安裝 rootless docker 方式<cli> curl -s https://get.docker.com/ | bash dockerd-rootless-setuptool.sh install </cli> <note> * 如果要在 rootless docker 讓 container 能夠 listen 1024 以下的 Port 需要執行 <cli> sudo setcap cap_net_bind_service=+ep "/usr/bin/rootlesskit" systemctl --user restart docker </cli> </note> ==== 更新 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> ===== 開始下載與測試 Template ===== * CentOS <code sh> docker pull centos </code> * Fedora <code sh> docker pull fedora docker run -i -t fedora /bin/bash </code> * 輸入 exit 就可以結束與離開 * 輸入 CTRL-p + CTRL-q 可以離開 (docker container 繼續在背景執行) ===== 基本操作方式 ===== ==== Image Template ==== * 找目前 Internet 已存在的 Image Template **docker search <keyword>**<code sh> docker search ubuntu</code> * 安裝 Image Template **docker pull <img tmp name>**<code sh> docker pull centos</code> * 列出目前已安裝的 Image Template **docker images**<code sh> docker images</code> * 刪除不需要的 Image Template **docker rmi <IMAGE ID>**<code sh> docker rmi 2a973533a1af</code> * 建立自己的 Image Template **docker commit -m="<Message>" -a="<Author Name>" <CONTAINER ID> <REPOSITORY>:<TAG>**<code sh> docker commit -m="Add trysrvtool and pingserver" -a="Jonathan Tsai" c299814447ed tryweb/tryimg01:v1</code> * 對 Image Template 增加 TAG **docker tag <IMAGE ID> <REPOSITORY>:<New TAG>**<code sh> docker tag dc30d39a01da tryweb/phplist:latest</code> * 將 Image Template 存成檔案 **docker save <img tmp name> > <img tmp name>.tar** Exp. busybox<cli> docker save busybox > busybox.tar </cli> * 將 Image Template 檔案匯入 **docker load --input <img tmp name>.tar** Exp. busybox<cli> docker load --input busybox.tar </cli> <note> * 顯示 Images 的 Digest <cli>docker images --digests</cli> * 顯示特定格式 Images 資訊 Exp. iiiorg/devops-api <cli>docker images iiiorg/devops-api --format "{{.ID}}: {{.Repository}}:{{.Tag}} {{.Digest}}" | grep devops-api:1</cli>結果顯示如下:<cli> fcfbe89fe52a: iiiorg/devops-api:1 sha256:d6ce6ffa86c37b387cc07ac5cecb92fd97457b96b155cc2692658312be1b8ea5 </cli> </note> ==== Container ==== * 查詢有哪些 docker container 存在 **docker ps --all**<code sh> docker ps --all </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 attach silly_hawking </code> * 啟動離開(Exited)狀態的 docker container **docker start <CONTAINER ID> or <NAMES>**<code sh> docker start 2522259349a9 </code> * 查看 docker container 的 Console 訊息 **docker logs <CONTAINER ID> or <NAMES>**<code sh> docker logs 2522259349a9 </code> * 查看 docker container 的詳細資訊 **docker inspect <CONTAINER ID> or <NAMES>**<code sh> docker inspect 2522259349a9 docker inspect -f "{{ .NetworkSettings }}" 2522259349a9 </code> * 備份 docker container <code sh> </code> * 關閉啟動中的 docker container (成為離開狀態)**docker stop <CONTAINER ID> or <NAMES>**<code sh> docker stop 2522259349a9 </code> * 刪除已關閉(離開狀態)的 docker container**docker rm <CONTAINER ID> or <NAMES>**<code sh> docker rm 2522259349a9 </code> * 查看 image 內的相關訊息 **docker run -i -t <image> <shell cmd>** <cli> docker run -i -t php:7.0.33-cli-jessie bash </cli> ===== 針對 docker compose 內其中一個 container 更改設定後重新啟動 ===== * 參考 - https://stackoverflow.com/questions/37609662/docker-compose-restart-only-updated-images * 處理方式 Exp. iii-devops-lite-ui<cli> docker-compose up -d --no-deps iii-devops-lite-ui </cli> ===== 預計測試項目 ===== * 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}} tech/docker.txt 上一次變更: 2023/11/20 12:03由 jonathan