開發者必學 Docker:映像檔、容器與 Compose

DevOps2026-10-02TryQuickToolBox

你可能聽過 Docker 能簡化開發流程,但初次接觸 映像檔 (images)、容器 (containers) 和 Docker Compose 這些術語時,可能會覺得一頭霧水。本指南將化繁為簡,帶你了解如何在專案中有效運用 Docker。

Docker 是什麼?為何你該關注?

Docker 是一個平台,能將應用程式及其相依性打包成標準化單元,稱為容器 (container)。容器輕量、可攜,且彼此隔離。它們解決了經典的「在我的機器上可以運作」問題,確保應用程式在任何環境中都能以相同方式運行。

與虛擬機不同,容器共享主機作業系統核心,因此啟動更快、效率更高。這就是 Docker 成為現代開發與部署流程要角的原因。

映像檔 vs. 容器:建構基礎

映像檔 (image) 是唯讀範本,包含應用程式程式碼、執行環境、函式庫與設定。容器 (container) 則是映像檔的執行實例。可以把映像檔想成類別 (class),容器則是物件 (object)。

你使用 Dockerfile 建立映像檔。以下是 Node.js 應用程式的簡單範例:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Dockerfile 中的每一行都會建立一個層 (layer)。層會被快取,因此只有後續步驟變更時,重建速度會更快。

常用 Docker 指令

Docker Compose:管理多容器應用程式

真實世界的應用程式通常需要多個服務:網頁伺服器、資料庫、快取。Docker Compose 讓你用單一 YAML 檔案定義並執行多容器應用程式。

以下是搭配 PostgreSQL 與 Redis 的 Node.js 應用程式的 docker-compose.yml:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/mydb
      - REDIS_URL=redis://cache:6379
    depends_on:
      - db
      - cache
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - pgdata:/var/lib/postgresql/data
  cache:
    image: redis:7
volumes:
  pgdata:

執行 docker compose up,所有服務會一起啟動。depends_on 確保資料庫與快取在網頁服務之前啟動。

重要 Compose 指令

開發最佳實踐

何時使用 Docker(以及何時不該用)

當你需要跨團隊一致的環境、輕鬆管理相依性,或微服務架構時,Docker 表現出色。對於簡單的靜態網站或腳本,可能顯得殺雞用牛刀。請根據專案複雜度與部署需求來評估。

常見問題

映像檔與容器有何不同?

映像檔是靜態範本;容器是該映像檔的執行實例。你可以從同一個映像檔執行多個容器。

單一容器也需要 Docker Compose 嗎?

不需要,單一容器可使用 docker run。當你有多個需要互相通訊的服務時,Compose 才實用。

如何在 Docker 中保存資料?

使用 volume 或 bind mount。Volume 由 Docker 管理,適合資料庫;bind mount 將主機目錄對應到容器內,適合開發使用。

準備好最佳化你的 Docker 應用程式了嗎?如果你正在處理容器內的 Nginx 日誌,試試我們的 Nginx 日誌分析器,快速解析與分析日誌。