🎯 重點摘要: Docker 是容器化的領導者,用來把應用程式與依賴打包起來到處跑,不再有「我的電腦跑得好」的問題:
  ① 理解 Docker 的核心概念(Image、Container、Volume、Network)
  ② 安裝 Docker(Windows / macOS / Linux 三種方式)
  ③ 掌握基本指令(run、ps、images、exec、rm、logs)
  ④ 學會 Docker Compose 一次管理多個容器
  ⑤ 進階技巧:Dockerfile 建構自己的映像、Multi-stage build、除錯技巧

30 分鐘從零開始,讓你的應用「一次打包、到處跑」!

前言 — 什麼是 Docker?

Docker 是一個開源的容器化平台。你可以把它想像成「把應用程式 + 所有依賴打包在一起,一個指令就能到處跑」的技術。

傳統上,我們會在本機安裝 Node.js、Python、資料庫等等,但部署的時候常常會碰到:

  • 「我的電腦跑得好,伺服器就錯」
  • 「開發環境的 Node 版本和生產不一樣」
  • 「部署一堆依賴很麻煩」

Docker 完美解決了這些問題 — 容器內含應用 + 所有依賴,確保環境一致性。

Docker 與傳統 VM 虛擬機的差別

特性 Docker 容器 傳統 VM
開機時間 秒級 分鐘級
體積 幾十 MB 幾 GB
共享核心 與主機共享 獨立 Guest OS
資源隔離 較少開銷 較大開銷
適合場景 微服務、CI/CD 完整 OS 模擬

如何安裝 Docker

Windows 安裝

  1. 前往 Docker Desktop for Windows 下載安裝檔
  2. 雙擊執行安裝程式,勾選「Install required Windows components for WSL2」
  3. 安裝完成後,打開 Docker Desktop 等待初始化完成
⚠️ 注意: Windows 10 需要開啟 WSL2 支援。可以透過命令提示管理員執行 wsl --install 來啟用。

macOS 安裝

  1. 前往 Docker Desktop for Mac 下載 .dmg 檔案
  2. 支援 Intel 和 Apple Silicon(M1/M2/M3)
  3. 拖曝到 Applications,開啟後即可使用

Linux (Ubuntu / Debian) 安裝

Linux 使用者可以用官方 script 一鍵安裝:

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

或者手動加入 apt repository 安裝:

# 新增 Docker 的官方 GPG key
sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 設定 repository
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME" | sed 's/-.*//')" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

驗證安裝

docker --version
# Docker version 27.2.0, build 3232116

docker compose version
# Docker Compose version v2.29.2

加入 docker group (避免每次 sudo)

sudo usermod -aG docker $USER
# 登出並重新登入生效

Docker 基本指令大全

以下是 Docker 的核心指令整理,涵蓋容器、映像、卷、網路等。

映像 (Images) 管理

指令 說明 範例
docker pull 下載映像 docker pull nginx
docker images 列出本地映像 docker images
docker rmi 刪除映像 docker rmi nginx
docker build 從 Dockerfile 建立映像 docker build -t myapp .
docker tag 重新標記映像 docker tag myapp:latest myapp:v1.0
docker push 推送映像到 Registry docker push myuser/myapp

容器 (Containers) 管理

指令 說明 範例
docker run 建立並啟動容器 docker run -d nginx
docker ps 列出運行中容器 docker ps
docker ps -a 列出所有容器 docker ps -a
docker exec 進入容器執行指令 docker exec -it web bash
docker stop 停止容器 docker stop web
docker start 啟動已停止容器 docker start web
docker rm 刪除容器 docker rm web
docker logs 查看容器日誌 docker logs -f web
docker inspect 查看容器詳細資訊 docker inspect web

docker run 常用參數

參數 說明 範例
-d 背景執行 (detached) docker run -d nginx
-p 映射埠 (host:container) docker run -p 8080:80 nginx
--name 命名容器 docker run --name web nginx
-v 掛載卷或檔案 docker run -v data:/app nginx
-e 設定環境變數 docker run -e KEY=val nginx
--rm 容器停止時自動刪除 docker run --rm nginx
-it 互動模式 docker run -it ubuntu bash
--network 指定網路 docker run --network my-net nginx
💡 快速操作:-it 進入容器後,可以直接執行指令進行除錯:
docker exec -it 容器名 sh

卷 (Volumes) 與網路 (Networks)

卷管理 — 把資料持久化

容器刪除了資料也會消失,Volume 讓資料持續保存:

# 建立卷
docker volume create my-data

# 查看卷
docker volume ls

# 刪除卷
docker volume rm my-data

# 清理無用卷
docker volume prune

網路管理 — 讓容器互通

# 建立網橋網路
docker network create my-net

# 查看網路
docker network ls

# 清理無用網路
docker network prune

Docker Compose — 多容器神器

Compose 讓你可以用一個 docker-compose.yml 檔案管理多個容器。

建立 docker-compose.yml

# docker-compose.yml
version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: secretpass
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine

volumes:
  db-data:

Compose 常用指令

指令 說明
docker compose up -d 啟動所有服務 (背景)
docker compose down 停止並移除容器
docker compose down --volumes 停止並移除容器 + 卷
docker compose ps 查看服務狀態
docker compose logs -f 查看日誌 (即時)
docker compose restart 重啟服務
docker compose exec web sh 進入容器
docker compose build 從 Dockerfile 建立映像

Dockerfile 教學 — 建立自己的映像

Dockerfile 是描述如何建立映像的指令稿。以下是一個簡單的 Node.js 例子:

# 使用官方 Node.js 18 為基礎
FROM node:18-alpine

# 設定工作目錄
WORKDIR /app

# 複製 package.json 並安裝依賴
COPY package*.json ./
RUN npm ci --only=production

# 複製程式碼
COPY . .

# 設定環境變數
ENV NODE_ENV=production

# 開放連接埠
EXPOSE 3000

# 啟動指令
CMD ["npm", "start"]

常用指令說明

指令 說明
FROM 指定基礎映像 (Base Image)
WORKDIR 設定容器內工作目錄
COPY / ADD 複製檔案到容器
RUN 執行命令
CMD / ENTRYPOINT 容器啟動時執行的命令
ENV 設定環境變數
EXPOSE 宣告暴露的連接埠

Multi-Stage Build 最佳化映像

Multi-stage build 可以顯著減少映像體積:

# Multi-stage Dockerfile example
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:18-alpine AS runtime
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["npm", "start"]

除錯與清理技巧

學會這些指令,可以快速解決 90% 的 Docker 問題。

常用除錯指令

# 進入正在運行的容器
docker exec -it <容器名> sh

# 查看容器環境變數
docker inspect <容器名> | jq '.[0].Config.Env'

# 查看容器映射的埠
docker port <容器名>

# 查看容器 IP 位址
docker inspect <容器名> | jq '.[0].NetworkSettings.Networks'

# 動態查看容器資源使用
docker stats

# 查看本地磁碟使用情況
docker system df
🔍 Debug 法則: 先用 docker logs 看日誌,再用 docker exec -it 進容器裡查看環境變數與檔案。90% 的問題都能快速解決!

清理資源

# 清理停止的容器
docker container prune

# 清理未使用的卷
docker volume prune

# 清理未使用的網路
docker network prune

# 清理未使用的映像
docker image prune

# 一次清理所有無用資源
docker system prune -a --volumes

常見問題速查

問題 解法
容器無法存取宿主機資料 確認 -v 路徑是否正確
映射 port 發生 "address already in use" lsof -i :8080 查找佔用 port
容器一直重啟 (restart loop) docker logs 檢查錯誤訊息
映像太大 使用 .dockerignore、 alpine 版本、multi-stage build
無法 push 映像 確認是否登入 docker login 並有權限

.dockerignore 最佳化

在建立映像時,.dockerignore 可以排除不想放入映像的檔案,減少映像體積:

# .dockerignore
node_modules
npm-debug.log
.git
.gitignore
.env
*.md
.dockerignore
Dockerfile
README.md
tests/

結語

Docker 不只是「部署好用的工具」,更是現代開發不可或缺的基礎 — 無論是本地開發、團隊協作、CI/CD,Docker 都在其中扮演關鍵角色。

🎯 快速回顧步驟:
  1️⃣ 安裝 Docker Desktop / Engine(支援 Win/macOS/Linux)
  2️⃣ 掌握基本指令:docker run / ps / images / exec / rm / logs
  3️⃣ 學會 -v -p --name -it 等常用參數
  4️⃣ 使用 docker-compose.yml 管理多容器服務
  5️⃣ 寫 Dockerfile 打造自己的映像,multi-stage build 優化體積

30 分鐘從零開始,讓你的應用「一次打包、到處跑」,再也不需要擔心環境不一致的問題!
🔗 推薦資源:
  • Docker 官網
  • Docker Hub (映像市場)
  • Docker 官方文檔
  • Docker Compose 文檔
  • Dockerfile 參考