🎯 重點摘要: 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 安裝
- 前往 Docker Desktop for Windows 下載安裝檔
- 雙擊執行安裝程式,勾選「Install required Windows components for WSL2」
- 安裝完成後,打開 Docker Desktop 等待初始化完成
⚠️ 注意: Windows 10 需要開啟 WSL2 支援。可以透過命令提示管理員執行 wsl --install 來啟用。
macOS 安裝
- 前往 Docker Desktop for Mac 下載 .dmg 檔案
- 支援 Intel 和 Apple Silicon(M1/M2/M3)
- 拖曝到 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 參考