跳轉到主要內容
Docker CLI 每天真正會打的指令都在這。以 Docker 官方 CLI 參考為準(截至 2026-06)。觀念基礎見 核心概念

容器生命週期

指令用途範例
docker run從映像建立並啟動新容器docker run -d --name web nginx:alpine
docker start啟動已停止的容器docker start web
docker stop送 SIGTERM 優雅停止(預設等 10 秒寬限期)docker stop web
docker restart停止後重新啟動docker restart web
docker pause / unpause凍結 / 解凍容器內所有行程docker pause web
docker rm刪除已停止的容器(-f 強制刪執行中)docker rm web
docker run -d --name web nginx:alpine   # 建立並背景啟動
docker stop -t 0 web                     # 不等 SIGTERM 直接停
docker rm -f web                         # 強制刪除執行中的容器

docker run 重要旗標

旗標決定容器怎麼跑,這些最常用:
旗標用途範例
-d背景執行(detached),只印 container IDdocker run -d nginx:alpine
-it互動式 shell(-i 保留 STDIN、-t 配 TTY)docker run -it ubuntu bash
--name指定容器名稱(同一主機須唯一)docker run --name web nginx
--rm容器結束後自動刪除(含匿名 volume)docker run --rm alpine echo hi
-p發布埠,格式 主機:容器docker run -p 8080:80 nginx
--network連到指定網路docker run --network mynet app
-v / --mount掛載 volume 或 bind mountdocker run -v data:/app/data app
-e / --env-file設環境變數 / 從檔案讀docker run -e TZ=Asia/Taipei app
--restart重啟策略(見下)docker run --restart=always nginx
--gpus傳入 GPU(需 NVIDIA Container Toolkit)docker run --gpus all app nvidia-smi
-w / -u工作目錄 / 執行身分docker run -w /app -u 1000:1000 app
--memory / --cpus資源上限docker run -m 512m --cpus 1.5 app
--restart 四種策略:
行為
no(預設)不自動重啟
on-failure[:N]只有非零退出碼才重啟,可設最多重試 N 次
always一律重啟,daemon 重啟後也拉起來
unless-stoppedalways,但你手動 docker stop 後,daemon 重啟不會自動拉起
-p 的方向是 主機:容器,左邊是你的電腦、右邊是容器內部。-p 8080:80 是「主機 8080 轉進容器 80」,寫反了會連不到。只開給本機可加 host IP:-p 127.0.0.1:8080:80

查看與除錯

指令用途
docker ps列出執行中容器(-a 含已停止、-q 只印 ID)
docker logs看容器日誌(-f 即時、--tail N--since
docker exec在執行中的容器裡跑指令(-it 進互動 shell)
docker inspect看容器 / 映像完整 JSON(IP、掛載、環境變數)
docker stats即時看 CPU / 記憶體 / 網路 / Block I/O
docker top看容器內執行中的行程
docker cp在容器與主機之間複製檔案
docker ps -a -q --filter status=exited        # 所有已停止容器的 ID
docker logs -f --tail 100 web                  # 即時看最後 100 行
docker exec -it -u root web bash               # 以 root 進互動 shell
docker inspect --format='{{.NetworkSettings.IPAddress}}' web   # 取容器 IP
docker stats --no-stream                       # 取一次快照不持續串流
docker cp web:/app/logs/app.log ./app.log      # 容器檔案複製到主機
一個「跑起來、看狀態、進去看、收掉」的流程跑出來長這樣:

映像檔指令

指令用途
docker images列出本機所有映像(-a 含中間層)
docker pull從 registry 拉映像
docker build從 Dockerfile 建映像(-t 命名、-f 指定檔)
docker tag替映像加新 tag
docker rmi刪除映像(-f 強制)
docker history看映像每層的建置指令與大小
docker save / load匯出成 tar / 匯入(離線搬運)
docker pull nginx:1.27-alpine
docker build -f docker/Dockerfile.prod -t myapp:prod .
docker tag myapp:1.0 user/myapp:1.0
docker save myapp:1.0 | gzip > myapp.tar.gz     # 壓縮匯出
docker load < myapp.tar.gz                       # 匯入
docker build 的完整用法在 從零搭建 Dockerfile

清理指令

映像、容器、volume 會越積越多。這組指令有破壞性,分清楚各自清什麼:
docker system df                      # 先看磁碟用量與可回收量
docker system df -v                   # 每個物件的細項

docker container prune                # 清所有已停止容器
docker image prune                    # 只清懸空(dangling)映像
docker image prune -a                 # 連所有沒被容器引用的映像(含 tag)
docker volume prune                   # 只清匿名 volume
docker network prune                  # 清未使用的自訂網路

docker system prune                   # 停止容器 + 未用網路 + dangling 映像 + build cache
docker system prune -a                # 映像擴大到「所有沒被容器引用的」
docker system prune -a --volumes      # 再加匿名 volume,破壞性最強
清理不可逆,下手前先 docker system df
  • docker image prune -a / system prune -a 會刪所有沒被容器使用的映像,包括你之後還想用的版本,得重新 pull。
  • --volumes 只清匿名 volume;要清具名 volume(資料庫資料常在這)得用 docker volume prune -a資料無法復原
  • 系統內建的 bridge / host / none 網路永遠不會被 prune。

多 daemon 與診斷

docker context ls                                    # 列出可連線的 Docker daemon
docker context create remote --docker "host=ssh://user@10.0.0.5"
docker --context remote ps                           # 對遠端 daemon 跑單一指令
docker version                                       # client 與 daemon 版本、API 版本
docker info                                          # 整個安裝的系統資訊

已棄用項目(截至 2026-06)

舊用法現狀取代
docker-compose(v1,Python)已 EOL、不再維護docker compose(v2,內建 CLI plugin)
docker run --link已棄用user-defined network + DNS 名稱解析
DOCKER_BUILDKIT=0可停 BuildKit 但不建議直接用 BuildKit(Docker 23+ 預設)

接下來

官方參考:docs.docker.com/reference/cli/docker