Docker 容器技術

概念

Docker 容器是一種輕量級、可攜帶且自包含的虛擬化技術,用於打包、分發和運行應用程式及其相關的環境依賴。這種技術基於作業系統層級的虛擬化,讓開發者能夠以一致的方式在不同的電腦上運行應用程式,而不需要擔心環境的差異和依賴問題。

傳統虛擬機器的方式中,每個虛擬機包含完整的作業系統與應用程式,資源消耗大、啟動時間長。相比之下,Docker 容器共用主機作業系統核心,僅包含應用程式及其執行所需的庫與依賴,讓容器更輕量、高效,啟動速度也更快。

Docker 容器的幾個關鍵概念如下:

  1. 映像(Image)
    映像是容器的唯讀範本,包含一個應用程式及其所需的作業系統環境與相依套件。映像可重複使用並可被多個容器共用。

  2. 容器(Container)
    容器是映像的執行實例,提供獨立的執行環境。容器共用主機核心,但其檔案系統、行程、網路等是彼此隔離的。

  3. Docker 引擎(Docker Engine)
    Docker 的核心組件,用於建立、啟動、停止和刪除容器,亦能建立與管理映像。

  4. 容器編排(Container Orchestration)
    用於管理大量容器的生命週期、自動部署、擴展與網路配置等。常用工具包含 Docker Compose、Kubernetes 等。

Docker 在開發、測試與部署應用程式上具備一致性與可攜性優勢,可有效解決「在我的電腦上可以運作」的問題,並簡化部署與擴展流程。


指令整理

docker version

顯示安裝於系統上的 Docker 版本資訊

  • Client: Docker 客戶端版本(含 Git commit、Go 語言版本、Build 時間等)
  • Server: Docker 引擎版本及其構建細節
  • API version: 用於客戶端與伺服器通訊的 API 版本
  • Min API version: 客戶端與伺服器最低支援的 API 版本
  • Git commit: Docker 引擎的 Git 提交雜湊值
  • Build: 完整版本與建置時間
  • OS/Arch: 作業系統與架構資訊(例如 linux/amd64)

docker info

提供目前 Docker 系統的詳細資訊

  • Containers: 容器數量(執行中、停止、總數)
  • Images: 本地可用映像的數量
  • Storage Driver: 使用中的儲存驅動(如 overlay2)
  • Volumes: 本地儲存卷數量
  • Networks: 可用的 Docker 網路數量
  • CPUs: 系統 CPU 核心數
  • Total Memory: 系統總記憶體容量
  • Name: Docker 主機名稱
  • ID: Docker 守護行程的唯一 ID
  • Server Version: Docker 伺服器版本
  • Operating System: 作業系統詳細資訊(名稱與版本)
  • OSType: 作業系統類型(如 linux)
  • Architecture: 架構類型(如 x86_64)
  • Docker Root Dir: Docker 儲存根目錄位置
  • Debug Mode: 是否啟用除錯模式

docker

顯示 Docker 的 CLI 使用說明與子指令清單

執行 docker 不加參數時,會列出所有可用的子指令與基本用法說明,例如:

  • docker run:執行一個容器
  • docker ps:列出執行中的容器
  • docker build:從 Dockerfile 建立映像
  • docker pull:從遠端倉庫下載映像
  • docker images:列出本地映像
  • docker exec:在容器中執行命令
  • docker logs:檢視容器輸出日誌

重要指令範例與說明

1. docker run

用來建立並啟動一個新的容器。

範例:

docker run --name my-nginx -d -p 8080:80 nginx

說明:

  • --name my-nginx:給容器命名為 my-nginx,方便管理。
  • -d:以背景模式(detached)執行容器。
  • -p 8080:80:將主機的 8080 連接埠映射到容器的 80 連接埠。
  • nginx:使用官方的 nginx 映像。

此指令會在背景啟動一個 nginx 容器,並可從主機的 http://localhost:8080 訪問 nginx。

常用選項:

  • -it:互動式執行容器(適用於需要使用終端機的容器)
  • --rm:容器停止後自動刪除
  • -v /host/path:/container/path:掛載主機目錄到容器中(資料持久化)
  • --env VAR=value:設定環境變數

2. docker build

用於從 Dockerfile 建立映像。

範例:

假設有以下 Dockerfile

# 使用官方 PHP 7.4 映像為基底
FROM php:7.4-cli

# 複製本地程式碼到容器內
COPY . /usr/src/myapp

# 設定工作目錄
WORKDIR /usr/src/myapp

# 執行應用程式
CMD ["php", "index.php"]

執行建立映像的指令:

docker build -t my-php-app .

說明:

  • -t my-php-app:給建立完成的映像取名為 my-php-app
  • .:Dockerfile 所在目錄。

成功後,可以用 docker images 查看剛建立的映像。


3. 其他常見指令與注意事項

docker ps

  • 列出目前正在執行的容器。
docker ps

加入 -a 可以列出所有容器(包含停止的):

docker ps -a

docker stop / docker start

停止與啟動已存在容器:

docker stop my-nginx
docker start my-nginx

docker exec

在已啟動的容器中執行命令:

docker exec -it my-nginx /bin/bash

說明:以互動模式進入容器 my-nginx 的 bash shell。


注意事項

  • 容器內的資料預設是臨時的,容器刪除後會遺失資料。若需資料持久化,請使用卷(volume)或掛載目錄。
  • Docker 映像版本建議指定明確版本號(如 nginx:1.21),避免使用 latest 造成環境不一致。
  • 建立映像時,應盡量減少層數與大小,提高建置效率與容器啟動速度。
  • 使用 .dockerignore 檔案排除不必要的檔案,減少映像大小。