單純 Docker 命令的彙整筆記
下述的
[ContainerID]這種項目,請替換成自己要填的內容,不要包含 [ ] 等符號
🔶 查看 docker 的版本 (以下兩種指令都可以)
docker --versiondocker -v
🔶 使用 image 創建一個 container (只有 create)
docker create [DockerImageName]
🔶 使用 image 創建一個 container & run 起來
docker run [DockerImageName]
🔶 run 一個 container,終止後會自動 remove
docker run --rm hello-world如果確認是跑完就不再使用的,可以在執行時加上 --rm 參數,當容器終止時會自動刪除
🔶 run 一個 container,做更多詳細的設定
docker run -d -p 9999:80 --name [ContainerName] --env ASPNETCORE_ENVIRONMENT=UAT [DockerImageName]-d在後台運行 Container
-p 9999:80將 Container 的 port 對應至 host 的 port。左邊的 9999 是 host 的 port,右邊的 80 是 Container 內服務開放的 port
--name Container 的名稱
--env 設定 Container 內的環境變數
🔶 查看正在執行的 Container
docker ps
🔶 查看所有 Container (包含未運行的)
docker ps -a
🔶 查看特定 status 的 Container
docker ps --filter status=exited
🔶 刪除 Container
docker rm -f [ContainerID]
🔶 刪除特定 status 的 Container
docker rm $(docker ps --filter status=exited -q)
🔶 重新啟動 Container
docker restart [ContainerID]
🔶 查看 Container 的 log
docker logs [ContainerID]後面加 --follow 或 -f 可以持續更新 log
🔶 搜尋 Container log 的特定 string
docker logs [ContaainerID] 2>&1 | grep "Message"
🔶 重新命名 Container Name
docker rename [Container-Old-Nmae] [Container-New-Nmae]
🔶 列出所有 docker image (以下兩種指令都可以)
docker image lsdocker images
🔶 刪除 docker image
docker rmi [ImageID]
🔶 刪除沒有任何 Container 使用的 docker image
docker image prune
🔶 刪除沒有任何 Container 使用的 docker image (by filter 條件)
docker image prune -a --force --filter "until=240h"上面的範例單位是 h (小時),240 h = 10 天
更多 prune 說明:docker image prune | Docker Documentation
🔶 查看所有 dangling image
docker images -f dangling=true沒有 tag 的 image 就會變成 dangling image
🔶 刪除所有 dangling image
docker rmi $(docker images -f dangling=true -q)
🔶 下載 docker image
docker pull [ImageName]
🔶 包 docker image 時加 -f 指定 Dockerfile 的路徑 or 自定義的檔名
docker build -f [MyProject.Api/MyDockerfile] .
🔶 包 docker image 時加 -t 順便指定 tag
docker build -t [ImageName] .
🔶 為現有的 docker image 添加 tag (會產生一個新的 image)
docker tag [ImageTag] [Registry/ImageName]
🔶 重新指定 docker image 的 tag
docker image tag [Registry/ImageName:oldTag] [Registry/ImageName:newTag]
🔶 刪除所有 Container
docker rm -vf $(docker ps -aq)-v 刪除與 Container 關聯的 anonymous volumes
-f 強制刪除(即使他還在 running)
-v -f可以寫成 -vf或 -fv,都可以達到相同的功能
-a 顯示所有 Container (包含所有運行中 & 非運行中的 Container)
-q 僅顯示 Container ID
-aq 等於 -a -q 的簡寫
所以以上 options 結合後,就是列出所有 Container ID 然後把他刪除的意思
🔶 刪除所有 image(要先刪 Container 才能刪他使用的 image)
docker rmi -f $(docker images -aq)Windows 的 cmd 不支援
$()語法,要在 Windows 執行此指令請使用 Powershell
🔶 查看所有 Volume
docker volume ls
🔶 查看所有 dangling volume
docker volume ls -qf dangling=true沒有任何 Container 引用的 anonymous volumes,稱為 dangling volume
🔶 刪除所有 dangling volume
docker volume rm $(docker volume ls -qf dangling=true)
🔶 查看所有 network
docker network ls
🔶 查看自己 create 的 network 設定
docker network inspect [NetworkName]
🔶 將既有 container 與 network 連接
docker network connect [NetworkName] [ContainerName]
🔶 斷開 Container 與 Network 連接
docker network disconnect [NetworkName] [ContainerName]
🔶 進到 Container 內的 bash shell
docker exec -t -i [ContainerID] bash-t -i 可以寫成 -ti 或 -it,都可以達到相同的功能
在裡面輸入 exit 即可出去
🔶 查看 Docker 的硬碟使用狀況
docker system df
🔶 檢查 Container 是否具有特權
docker inspect --format='{{.HostConfig.Privileged}}' [ContainerID]false 就是沒有特權,true 就是有特權

