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

DevOps2026-10-09TryQuickToolBox

你大概聽過 Docker 和容器,但可能不太確定它們如何融入你的日常開發流程。或者你已經試過 Docker,卻對映像(image)、容器(container)和 Compose 這些概念感到困惑。本指南將透過實用範例帶你掌握必備知識,讓你能在專案中有效運用 Docker。

什麼是 Docker 映像與容器?

把 Docker 映像想成應用程式的藍圖。它包含執行程式碼所需的一切:作業系統、執行環境、函式庫,以及你的應用程式檔案。映像不可變,並且是從 Dockerfile 建置而成。

容器則是映像的執行實例。當你啟動容器時,Docker 會從映像建立一個隔離環境。你可以從同一個映像執行多個容器,每個容器都有自己的狀態。

主要差異

映像 容器
唯讀模板 可執行的實例
從 Dockerfile 建置 從映像建立
儲存於登錄檔 在主機上執行
不可變 短暫(可停止、啟動、刪除)

建置你的第一個 Docker 映像

讓我們建立一個簡單的 Node.js 應用程式並將其容器化。首先在專案根目錄建立一個 Dockerfile:

# 使用官方 Node.js 執行環境作為父映像
FROM node:18-alpine

# 設定工作目錄
WORKDIR /app

# 複製 package.json 與 package-lock.json
COPY package*.json ./

# 安裝依賴套件
RUN npm ci --only=production

# 複製其餘應用程式程式碼
COPY . .

# 對外開放應用程式執行的連接埠
EXPOSE 3000

# 定義執行應用程式的指令
CMD ["node", "server.js"]

使用以下指令建置映像:

docker build -t my-node-app .

從映像執行容器:

docker run -p 3000:3000 -d my-node-app

你的應用程式現在可以透過 http://localhost:3000 存取。

管理容器

以下是一些管理容器的重要指令:

用 Docker Compose 簡化多容器應用程式

真實的應用程式通常需要多個服務:網頁伺服器、資料庫、快取等。用個別的 docker run 指令來管理這些服務相當繁瑣。Docker Compose 讓你使用 YAML 檔案定義並執行多容器應用程式。

建立一個 docker-compose.yml:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

使用以下指令啟動所有服務:

docker compose up -d

使用以下指令停止並移除它們:

docker compose down

開發最佳實踐

常見問題

映像與容器有何不同?

映像是一個唯讀模板,定義應用程式及其依賴項目。容器則是映像的執行實例,頂部帶有可寫入層。

我可以在正式環境使用 Docker Compose 嗎?

Docker Compose 主要為開發與測試而設計。正式環境請考慮使用 Kubernetes 或 Docker Swarm 等容器编排工具。

如何在 Docker 中保存資料?

使用磁碟區(volume)或綁定掛載(bind mount)。磁碟區由 Docker 管理,是保存容器產生資料的首選方式。

準備好將你的應用程式容器化了嗎?如果你需要將文件或指南轉換為 PDF 給團隊使用,試試我們的 Word 轉 PDF 轉換器,分享精美的文件。