docker 指令大全:容器管理的日常操作 文章首圖

docker 指令大全:容器管理的日常操作

Docker 指令大全:容器管理的日常操作

對於現代軟體開發與 DevOps 工程師而言,Docker 已不再是可選工具,而是基礎建設的核心。許多初學者往往停留在 docker run 的簡單呼叫,卻忽略了背後龐大的生態系與管理指令。本文將深入解析 Docker 容器管理的日常操作,從建立、運行到除錯,提供一套在 Ubuntu 22.04 或 Debian 12 環境下即可直接使用的實戰指南。

容器生命週期管理

容器管理的核心在於理解其狀態轉換。最基礎的操作莫過於啟動與停止容器。當我們執行 docker run 時,Docker 會自動拉取映像檔、建立容器實例並啟動進程。

若要啟動一個互動式的 Ubuntu 容器,並進入其 shell 進行測試,可以使用以下指令:

docker run -it --name test-ubuntu ubuntu:22.04 /bin/bash

這裡的 -it 參數至關重要:-i 保持標準輸入開啟,-t 分配一個偽終端。進入容器後,你可以隨意安裝軟體或修改設定。完成後,輸入 exit 離開,容器狀態會變為 Exited

若需讓容器在背景持續運行(例如 Web 伺服器),建議使用 -d 參數:

docker run -d --name nginx-web -p 8080:80 nginx:alpine

此指令將 Nginx 容器置於背景,並將主機的 8080 端口映射到容器的 80 端口。你可以透過 docker ps 隨時檢查正在運行的容器狀態:

$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                  NAMES
a1b2c3d4e5f6   nginx:alpine   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->80/tcp   nginx-web

進階參數與資源限制

在生產環境中,盲目分配資源是危險的。Docker 允許我們精確控制容器的 CPU 與記憶體使用量。例如,限制容器最多使用 0.5 個 CPU 核心和 256MB 記憶體:

docker run -d --name limited-app --cpus="0.5" --memory="256m" ubuntu:22.04 /bin/sh -c "while true; do echo hello; sleep 1; done"

若需將資料持久化,避免容器刪除後資料遺失,必須使用 Volume 或 Bind Mount。以 Bind Mount 為例,將主機的 /tmp/data 目錄掛載到容器的 /data

docker run -d --name data-app -v /tmp/data:/data ubuntu:22.04 /bin/sh -c "while true; do echo hello >> /data/log.txt; sleep 1; done"

此舉確保即使容器被移除,主機上的 /tmp/data/log.txt 依然存在。

除錯與日誌分析

當容器出現異常時,第一時間應檢查日誌。docker logs 是強大的除錯工具,特別是搭配 -f 參數可即時追蹤日誌輸出:

docker logs -f nginx-web

若發現容器卡死或資源耗盡,docker stats 能即時顯示 CPU、記憶體與網路 I/O 狀況:

$ docker stats
CONTAINER ID   NAME        CPU %   MEM USAGE / LIMIT   MEM %   NET I/O
a1b2c3d4e5f6   nginx-web   0.05%   12.5MiB / 2GiB    0.61%   1.2kB / 0B

若需進入運行中的容器進行即時除錯,可使用 docker exec

docker exec -it nginx-web /bin/sh

常見問題與解決方案

Q1: 容器啟動失敗,但沒有顯示錯誤訊息? 這通常是由於端口衝突或映像檔拉取失敗。首先檢查端口是否被佔用:sudo lsof -i :8080。其次,確認映像檔是否正確拉取:docker images。若映像檔缺失,請手動執行 docker pull <image_name>

Q2: 如何清理無用的容器與映像檔以釋放空間? Docker 會隨著時間累積大量懸空映像檔(dangling images)與停止的容器。使用以下指令可一次性清理:

docker system prune -a

請謹慎使用 -a 參數,因為它會刪除所有未使用的映像檔,而不僅是懸空映像檔。建議定期執行 docker system df 來監控磁碟使用狀況。

小結

掌握 Docker 指令不僅是記住命令,更是理解容器化思維。從基本的 runps 到進階的資源限制與 Volume 管理,這些指令構成了日常開發與部署的基石。建議讀者多在測試環境中練習,熟悉每個選項的實際效果,才能在生產環境中應對自如。Docker 的世界廣闊,但從這些日常操作出發,你已邁出了堅實的第一步。