Docker 相關

Posted by Adam on August 24, 2022
```bash # 快速產生一個 python 容器 docker run -ti --rm python bash # 快速產生一個 ubuntu 沙盒做測試 docker run -it --rm ubuntu bash docker run -it --name sandbox ubuntu bash # 快速產生一個 webserver 容器 docker run -d -p 192.168.0.254:7777:80 --rm nginx # Docker 指定連接埠 # Where the first 8081 is the local port and the second 8080 is the container port. docker run -p 8081:8080 -tid java # Docker 容器掛載本地資料夾 docker run -dti --name test \ --rm \ -v /home/local/f1:/home/docker/f1 \ -v /home/local/f2:/home/docker/f2 \ java bash # Docker 開啟橋接網路 docker network create -d bridge my-net docker run -it --rm --name busybox1 --network my-net busybox sh docker run -it --rm --name busybox2 --network my-net busybox sh # 取得容器 IP docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id # Open Bash to running container docker exec -it ubuntu_bash bash # Docker exec as root docker exec -ti -u 0 74f86665f0fd bash # Docker remove <none> TAG images docker image prune # 產生一個網頁伺服器 docker run --rm -v /some/content:/usr/share/nginx/html:ro nginx ``` ### 設定容器的 log 大小 ```bash docker run --log-opt max-size=10m --log-opt max-file=7 <image> ``` ### 確認容器的資源 使用 `docker stats` 命令可以顯示每個正在運行的容器的資源使用情況,包括 CPU、記憶體和網路等。 ```bash docker stats ``` 這將顯示正在運行的每個容器的即時資源使用情況,包括記憶體使用量。 ### prune Docker 提供了一系列的 prune 指令,用於清理未使用的資源,包括容器、映像、卷和網絡等。以下是一些常用的 Docker prune 指令: 1. **清理未使用的容器**: ```bash docker container prune ``` 2. **清理未使用的映像**: ```bash docker image prune ``` 3. **清理未使用的卷**: ```bash docker volume prune ``` 4. **清理未使用的網絡**: ```bash docker network prune ``` 5. **清理建置快取檔案**: ```bash docker builder prune ``` 這些 prune 指令會刪除 Docker 中未使用的相應資源,從而釋放磁盤空間並清理系統。在運行這些指令之前,請確保你了解它們的影響,因為它們將永久刪除未使用的資源,這可能會影響你的 Docker 環境。 清理不必要的Docker映像和容器:執行`docker system prune -a`命令可以清理掉所有未使用的映像、容器和網絡。 ### images ```bash docker images --filter 'dangling=false' --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}' | sort -k 4 ``` 這個命令會列出所有非過期的映像,並根據映像創建的時間進行排序。 `--filter 'dangling=false'` 是一個過濾條件,用來篩選出不是懸空(dangling)的映像檔。懸空的映像檔是指沒有被任何容器使用或參考的映像檔。透過這個過濾條件,我們可以只列出正在被使用中的映像檔,而不包括懸空的映像檔。 `--format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}'` 用於指定Docker映像的顯示格式。在這個例子中,它指定了要顯示的每個映像的四個屬性:存儲庫(repository)、標籤(tag)、ID和創建時間。這將導致輸出以表格形式呈現,每個映像一行,每個屬性在相應的列中。 ```bash # 根據 Image 的名稱(imageName) 搜尋目前的 Images # 保留數個 Image (keepSize) 剩下的逐一詢問是否刪除 deleteImagesOver() { imageName=$1 keepSize=$2 images=$(sudo docker images $imageName --filter 'dangling=false' --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}' | sort -r -k 4 | tail -n +$keepSize | awk '{print $3}') for image in $images; do sudo docker inspect --format '{{.RepoTags}} {{.Created}}' $image echo -n "Delete(Y/N) Default Y: " read -r flag flag=${flag:-Y} # 顯示輸入值 if [ "$flag" = "Y" ]; then sudo docker rmi $image fi done } ``` ### 匯出/匯入 要匯出指定的 image,可以使用 `docker save` 指令。以下是具體的步驟: 1. 確認已經下載並且存在該 image,使用 `docker images` 指令查看所有本地的 images。 2. 使用以下指令將 image 匯出到檔案中: ``` docker save -o <匯出的檔案名稱.tar> <image名稱> ``` 例如,如果要匯出名稱為 myimage 的 image 到檔案 myimage.tar 中,指令如下: ``` docker save -o myimage.tar myimage ``` 3. 執行完上述指令後,即可在當前目錄中找到匯出的檔案 myimage.tar。 要將由 docker save 做成的 tar 檔匯入到 Docker 中,可以使用 docker load 命令來完成。以下是一個示例命令: ```bash docker load -i /path/to/your/image.tar ``` 請將 "/path/to/your/image.tar" 替換為您保存的 tar 檔路徑。執行此命令後,Docker 將會將 tar 檔中的映像恢復到本地 Docker 映像中。