← 返回所有文章

Docker

UtilsDocker作者:VincentCorgi約 1 分鐘閱讀

功能

Docker 日常指令速查:image 列表/拉取/刪除container 執行/停止/log/進入 shellvolume、network、compose 等常用片段。

情境

  • 本機或伺服器上要 跑容器、除錯容器、清 image、或臨時查 log/進容器內 時快速複製指令。

Image 列表與取得

Code
# 列出本機已下載的 image(REPOSITORY、TAG、IMAGE ID、大小)
docker images

# 從 Docker Hub(或已設定的 registry)拉指定 tag;省略 tag 時常為 latest
docker pull <image>:<tag>

# 在目前目錄的 Dockerfile 建 image,-t 指定名稱與 tag
docker build -t <image_name>:<tag> .

# 使用非預設檔名的 Dockerfile(例如多環境)
docker build -t <image_name>:<tag> -f Dockerfile.prod .
Code
# 範例:docker images(節錄)
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        alpine    123abc...      2 weeks ago    40MB
myapp        1.0       456def...      1 hour ago     220MB

# 範例:docker pull(節錄)
alpine: Pulling from library/alpine
Digest: sha256:...
Status: Downloaded newer image for alpine:latest

容器 run / start / stop / restart

Code
# -d 背景跑;-p 對應埠;--name 方便之後用名稱操作
docker run -d --name <container_name> -p <host_port>:<container_port> <image>

# 互動式進容器(-it),離開後容器刪除(--rm),適合一次性除錯
docker run --rm -it <image> sh

# 啟動「已建立但停止」的容器(名稱或短 ID 皆可)
docker start <container_name_or_id>

# 送 SIGTERM 優雅停止(逾時再 SIGKILL)
docker stop <container_name_or_id>

# 先 stop 再 start,服務短暫中斷
docker restart <container_name_or_id>
Code
# 範例:run -d 成功會印出完整 container ID
a1b2c3d4e5f6...

# 範例:docker stop
a1b2c3d4e5f6

容器查詢與監控

Code
# 只列「正在跑」的容器
docker ps

# 含已退出(Exited)的容器
docker ps -a

# 自訂欄位輸出(名稱、ID、狀態、映像、埠等;適合腳本)
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"

# 單次快照:CPU/記憶體/IO(需安裝 Docker 且容器存在)
docker stats <container_name_or_id> --no-stream
Code
# 範例:docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED        STATUS         PORTS                    NAMES
a1b2c3d4e5f6   nginx     ...       10 minutes ago Up 10 minutes  0.0.0.0:8080->80/tcp   web

# 範例:docker stats --no-stream(節錄)
CONTAINER ID   NAME   CPU %     MEM USAGE / LIMIT     MEM %
a1b2c3d4e5f6   web    0.12%     10MiB / 2GiB          0.50%

進入容器與執行指令

Code
# 在「已在跑」的容器內開互動 shell(映像若無 sh 可改 bash)
docker exec -it <container_name_or_id> sh

# 不進 shell,只跑一條指令(適合查檔案、環境變數)
docker exec <container_name_or_id> <command>
Code
# 範例:exec 單一指令
docker exec web nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

日誌

Code
# -f 持續追蹤(Ctrl+C 離開);--tail 只看最後 N 行
docker logs -f --tail 100 <container_name_or_id>
Code
# 範例(節錄)
2025/01/01 10:00:00 [notice] 1#1: start worker processes
GET / HTTP/1.1 200

Volume 掛載與進入

Code
# 命名 volume my_volume 掛到容器內 /data,進去檢查或寫入檔案
docker run --rm -it -v my_volume:/data <image> sh

Image 打包與載入

Code
# 把本機 image 存成 tar(可離線搬到別台)
docker save -o image.tar image_name

# 從 tar 還原成 image(之後即可 docker run)
docker load -i image.tar
Code
# 範例:save / load 過程通常有進度或完成提示
Loaded image: myapp:1.0

Volume 備份

Code
# 暫時起一個容器:掛來源 volume 與本機目錄,用 cp 把資料拷到 /backup(即目前目錄)
docker run --rm -v "my_volume:/volume" -v "$(pwd):/backup" <image> cp -r /volume /backup

# 同上概念:volume 掛在 /data,備份到當前目錄(<image> 需含 cp,常用 alpine 等)
docker run --rm -v "my_volume:/data" -v "$(pwd):/backup" <image> cp -r /data /backup

清除 Volume / Container / Image

Code
# 刪除「已停止」且未被使用的容器(-f 不互動確認)
docker container prune -f

# 刪除未被任何容器掛載的 volume
docker volume prune -f

# 刪除 dangling image(無 tag、無容器使用)
docker image prune -f

# 未使用的 network、image 等一併清(不含 volume)
docker system prune -f

# 較徹底:含未使用 image 與 volume(執行前請確認沒有要留的資料)
docker system prune -af --volumes
Code
# 範例:prune 摘要
Total reclaimed space: 1.2GB
Deleted Containers:
a1b2c3d4e5f6