Docker Compose 簡介
Docker Compose 是一個用於定義和執行多容器 Docker 應用程式的工具。透過 Compose,您可以使用 YAML 檔案來配置應用程式的服務,然後使用單一指令即可建立並啟動所有服務。
為什麼需要 Docker Compose?
在實際應用中,一個完整的應用程式通常需要多個服務協同運作,例如:
如果手動逐一啟動這些容器,不僅繁瑣且容易出錯。Docker Compose 解決了這個問題,讓您可以:
- 一鍵部署:使用單一指令啟動整個應用程式堆疊
- 版本控制:將基礎設施配置以程式碼的形式管理
- 環境一致性:確保開發、測試和生產環境的一致性
- 服務隔離:每個服務在獨立的容器中運行
安裝 Docker Compose
Linux 系統安裝
1
2
3
4
5
6
7
8
| # 下載 Docker Compose 最新版本
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 賦予執行權限
sudo chmod +x /usr/local/bin/docker-compose
# 驗證安裝
docker-compose --version
|
macOS 和 Windows
如果您已安裝 Docker Desktop,Docker Compose 已經包含在內,無需額外安裝。
使用 Docker Compose V2 (推薦)
Docker Compose V2 已整合到 Docker CLI 中,可以直接使用 docker compose 指令(注意沒有連字號):
1
2
3
| # V2 語法
docker compose version
docker compose up -d
|
YAML 檔案結構
Docker Compose 使用 docker-compose.yml 檔案來定義服務。以下是基本結構:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| version: "3.9"
services:
service_name:
image: image_name:tag
container_name: custom_name
ports:
- "host_port:container_port"
volumes:
- host_path:container_path
environment:
- ENV_VAR=value
depends_on:
- other_service
networks:
- network_name
restart: always
networks:
network_name:
driver: bridge
volumes:
volume_name:
|
重要配置項說明
| 配置項 | 說明 |
|---|
version | Compose 檔案格式版本 |
services | 定義應用程式中的各個服務 |
image | 指定使用的 Docker 映像檔 |
build | 指定 Dockerfile 路徑進行建構 |
ports | 連接埠映射 |
volumes | 資料卷掛載 |
environment | 環境變數設定 |
depends_on | 服務依賴關係 |
networks | 網路配置 |
restart | 重啟策略 |
常用指令
基本操作指令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # 啟動所有服務(背景執行)
docker-compose up -d
# 停止所有服務
docker-compose down
# 停止並移除資料卷
docker-compose down -v
# 查看服務狀態
docker-compose ps
# 查看服務日誌
docker-compose logs -f [service_name]
# 重新建構映像檔
docker-compose build
# 重新建構並啟動
docker-compose up -d --build
|
服務管理指令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 啟動特定服務
docker-compose start [service_name]
# 停止特定服務
docker-compose stop [service_name]
# 重啟特定服務
docker-compose restart [service_name]
# 進入容器執行指令
docker-compose exec [service_name] bash
# 執行一次性指令
docker-compose run [service_name] [command]
|
擴展服務
1
2
| # 擴展服務實例數量
docker-compose up -d --scale web=3
|
實際範例:WordPress + MySQL
以下是一個完整的 WordPress 網站部署範例,包含 WordPress 和 MySQL 兩個服務。
目錄結構
1
2
3
4
| wordpress-project/
├── docker-compose.yml
├── .env
└── wp-content/
|
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| version: "3.9"
services:
# MySQL 資料庫服務
db:
image: mysql:8.0
container_name: wordpress_db
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
- wordpress_network
# WordPress 服務
wordpress:
image: wordpress:latest
container_name: wordpress_app
depends_on:
- db
ports:
- "8080:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
volumes:
- wordpress_data:/var/www/html
- ./wp-content:/var/www/html/wp-content
networks:
- wordpress_network
# phpMyAdmin(可選)
phpmyadmin:
image: phpmyadmin:latest
container_name: wordpress_pma
depends_on:
- db
ports:
- "8081:80"
restart: always
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
networks:
- wordpress_network
networks:
wordpress_network:
driver: bridge
volumes:
db_data:
wordpress_data:
|
.env 環境變數檔案
1
2
3
4
| MYSQL_ROOT_PASSWORD=your_root_password_here
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress_user
MYSQL_PASSWORD=your_password_here
|
啟動與管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 啟動 WordPress 網站
docker-compose up -d
# 查看執行狀態
docker-compose ps
# 查看日誌
docker-compose logs -f wordpress
# 停止網站
docker-compose down
# 完全清除(包含資料)
docker-compose down -v
|
啟動後,您可以透過以下網址存取:
- WordPress:http://localhost:8080
- phpMyAdmin:http://localhost:8081
進階技巧
使用多個 Compose 檔案
您可以使用多個 Compose 檔案來區分不同環境:
1
2
3
4
5
| # 基礎配置 + 開發環境
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
# 基礎配置 + 生產環境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
健康檢查配置
1
2
3
4
5
6
7
8
9
| services:
web:
image: nginx
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
|
資源限制
1
2
3
4
5
6
7
8
9
10
11
| services:
web:
image: nginx
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
|
總結
Docker Compose 是管理多容器應用程式的強大工具。透過本文的介紹,您應該已經了解:
- Docker Compose 的基本概念和優勢
- 如何安裝和設定 Docker Compose
- YAML 檔案的結構和常用配置
- 基本和進階的操作指令
- 如何使用 Docker Compose 部署實際應用
建議您親自動手實作,從簡單的範例開始,逐步掌握 Docker Compose 的各種功能。這將大大提升您在容器化應用部署方面的效率。
參考資源