Docker
- UtilsDocker作者:VincentCorgi約 1 分鐘閱讀
功能
Docker 日常指令速查:image 列表/拉取/刪除、container 執行/停止/log/進入 shell、volume、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