差異處
這裏顯示兩個版本的差異處。
兩邊的前次修訂版 前次修改 下次修改 | 前次修改 | ||
tech:docker [2023/03/13 12:54] – [Ubuntu 20.04] jonathan | tech:docker [2025/04/10 12:51] (目前版本) – [清除目前主機端未使用的 docker images] jonathan | ||
---|---|---|---|
行 1: | 行 1: | ||
====== Docker 語法與操作整理 ====== | ====== Docker 語法與操作整理 ====== | ||
- | * 雖然 CentOS 7 內建有 Docker 但是我大部分的環境還是 CentOS 6, 所以先以現有環境安裝測試 Docker 是否真的如傳說中的神奇 | ||
===== 安裝程序 ===== | ===== 安裝程序 ===== | ||
- | ==== CentOS 6 ==== | + | ==== Ubuntu 22.04 ==== |
- | * 需要先安裝 | + | * 安裝語法 |
- | rpm -Uvh http://mirror01.idc.hinet.net/EPEL/6/x86_64/epel-release-6-8.noarch.rpm | + | * 標準安裝 |
- | </code> | + | sudo apt-get update |
- | | + | sudo apt-get install ca-certificates curl gnupg |
- | yum install docker-io | + | sudo install -m 0755 -d / |
- | </ | + | curl -fsSL https://download.docker.com/ |
- | * 啟動 | + | sudo chmod a+r /etc/apt/keyrings/docker.gpg |
- | service | + | |
- | chkconfig | + | # Add the repository to Apt sources: |
- | </code> | + | echo \ |
+ | "deb [arch=" | ||
+ | " | ||
+ | | ||
+ | sudo apt-get update | ||
+ | |||
+ | sudo apt-get install | ||
+ | </cli> | ||
==== Ubuntu 20.04 ==== | ==== Ubuntu 20.04 ==== | ||
* 安裝語法 | * 安裝語法 | ||
* 標準安裝 <cli> | * 標準安裝 <cli> | ||
- | sudo apt install docker.io docker-compose | + | curl -fsSL https:// |
+ | sudo add-apt-repository "deb [arch=amd64] https:// | ||
+ | sudo apt install docker.io docker-compose-plugin | ||
</ | </ | ||
* 指定 docker 版本 <cli> | * 指定 docker 版本 <cli> | ||
行 39: | 行 47: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | ==== 刪除已經不執行的 docker container ==== | ||
+ | * 主要是在 docker run 之後, 如果沒有指定 --rm 就會在容器被停止或執行離開後留下, | ||
+ | * 解決方式 | ||
+ | - 透過< | ||
+ | - 檢查如果有 crontab 設定自動啟動容器, | ||
+ | |||
+ | ==== 更新 docker compose 內相同 image 的最新版方式 ==== | ||
+ | * 參考 - https:// | ||
+ | * 因為有很多使用的 image 都是 latest 的 tag , 簡單更新與移除舊 image 方式如下< | ||
+ | docker compose pull | ||
+ | docker compose up --force-recreate --build -d | ||
+ | docker image prune -f | ||
+ | </ | ||
+ | |||
+ | ==== 設定自動清除 docker log ===== | ||
+ | * 主要是建立 / | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 清除目前主機端未使用的 docker images ===== | ||
+ | * 先刪除已經 exited 狀態的 docker 程序< | ||
+ | docker rm $(docker ps -a -q -f status=exited) | ||
+ | </ | ||
+ | * <cli> | ||
+ | sudo docker system prune -a -f | ||
+ | docker volume ls -qf dangling=true | xargs --no-run-if-empty docker volume rm | ||
+ | </ | ||
+ | |||
+ | ==== 匯出與匯入 docker images ===== | ||
+ | * 當離線環境或自己 build 出的 image 就需要用到此功能 | ||
+ | * Exp. ai-gen-doc: | ||
+ | - 在來源主機匯出方式 <cli> | ||
+ | docker save -o ai-gen-doc-1.1.3.tar ai-gen-doc: | ||
+ | </ | ||
+ | - 在來源主機傳輸檔案到目標主機 <cli> | ||
+ | scp ai-gen-doc-1.1.3.tar [email protected]:/ | ||
+ | </ | ||
+ | * 到目標主機匯入方式 <cli> | ||
+ | docker load -i ai-gen-doc-1.1.3.tar | ||
+ | </ | ||
+ | |||
===== 開始下載與測試 Template ===== | ===== 開始下載與測試 Template ===== | ||
* CentOS <code sh> | * CentOS <code sh> | ||
行 79: | 行 131: | ||
==== Container ==== | ==== Container ==== | ||
+ | * 想要 sh 進入操作有 ENTRYPOINT 的 image 容器 | ||
+ | * 啟動一個臨時容器, | ||
+ | * 進入一個啟動容器, | ||
* 查詢有哪些 docker container 存在 **docker ps --all**< | * 查詢有哪些 docker container 存在 **docker ps --all**< | ||
docker ps --all | docker ps --all | ||
</ | </ | ||
+ | * 使用 bash 進入到運行中的 docker container **docker exec -it < | ||
+ | ~$ docker exec -it c789b6b5ee99 bash | ||
+ | bash-5.0# | ||
+ | </ | ||
* 切換到運行中的 docker container **docker attach < | * 切換到運行中的 docker container **docker attach < | ||
docker attach silly_hawking | docker attach silly_hawking | ||
行 106: | 行 165: | ||
* 查看 image 內的相關訊息 **docker run -i -t < | * 查看 image 內的相關訊息 **docker run -i -t < | ||
docker run -i -t php: | docker run -i -t php: | ||
+ | </ | ||
+ | |||
+ | ===== 針對 docker compose 內其中一個 container 更改設定後重新啟動 ===== | ||
+ | * 參考 - https:// | ||
+ | * 處理方式 Exp. iii-devops-lite-ui< | ||
+ | docker-compose up -d --no-deps iii-devops-lite-ui | ||
</ | </ | ||