返回文章列表
dockerlinux

Docker Compose 使用指南

Docker-Compose使用指南

2026年4月7日 1 次瀏覽 haodai
Docker Compose 使用指南

Docker Compose 使用指南

Docker Compose 的安裝、配置和常用命令。


安裝 Docker Compose

從官方 Repository 安裝

bash
1
2
3
4
5
6
7
8
9
10
# 下載最新版本的 docker-compose(以 1.29.2 為例)
curl -L <https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname> -s`-`uname -m` > /usr/local/bin/docker-compose

# 賦予執行權限
sudo chmod +x /usr/local/bin/docker-compose

# 驗證安裝
docker-compose --version

注意事項

  • 請根據實際需求選擇合適的版本號

  • 確保 /usr/local/bin 目錄在系統 PATH 中

  • 如需更新版本,重複上述步驟即可


Docker Compose 配置文件範例

以下是一個包含 Web 服務和 MySQL 數據庫的 docker-compose.yml 配置範例:

yaml
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
version: "3.9"  # Docker Compose 解析規則版本

services:  # 定義專案組成,由 web 和 mysql 兩個服務組成
  web:
    image: web
    volumes:
      - /home/ubuntu/docker/dist:/usr/share/nginx/html
    ports:
      - "80:80"
      - "443:443"
    restart: always

  mysql:
    depends_on:  # 服務間的依賴性
      - web
    image: haodai/mysql
    volumes:
      - /home/ubuntu/docker/db_data:/var/lib/mysql
    restart: always
    environment:  # 環境變數定義
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: web
      MYSQL_USER: haodai
      MYSQL_PASSWORD: 123456

volumes:  # 定義數據卷
  db_data: {}
  wordpress_data: {}

配置說明

Services(服務)

  • web:Web 服務容器

    • 使用自定義 web 映像檔

    • 將主機目錄掛載到容器內的 Nginx HTML 目錄

    • 映射 80 和 443 端口(HTTP 和 HTTPS)

    • 設定為自動重啟

  • mysql:MySQL 數據庫服務

    • 依賴於 web 服務(depends_on

    • 使用自定義 MySQL 映像檔

    • 將數據目錄掛載到主機,實現數據持久化

    • 設定數據庫環境變數(用戶名、密碼、數據庫名稱)

Volumes(數據卷)

  • db_data:MySQL 數據存儲卷

  • wordpress_data:WordPress 數據存儲卷(預留)

安全建議

⚠️ 重要:生產環境中請避免在配置文件中直接寫入敏感信息(如密碼),建議使用:

  1. 環境變數文件.env):

bash
1
2
3
4
5
# .env
MYSQL_ROOT_PASSWORD=your_secure_password
MYSQL_PASSWORD=your_secure_password

  1. Docker Secrets(適用於 Docker Swarm)


Docker Compose 常用命令

docker-compose build

建構由 docker-compose 設定檔所定義的容器映像檔,但建構完成後不會主動執行容器。

bash
1
2
3
docker-compose build

常用選項

  • -pull:總是從遠端拉取最新版本的基礎映像檔

  • -force-rm:建構前移除當前基於此設定檔的所有容器

  • -no-cache:不使用快取,強制重新建構

範例

bash
1
2
3
4
5
6
7
# 強制重新建構,不使用快取
docker-compose build --no-cache

# 拉取最新版本並建構
docker-compose build --pull


docker-compose up

建構後啟動 docker-compose 專案下的所有容器服務。

bash
1
2
3
docker-compose up

常用選項

  • d:將顯示模式改為後台方式(detached mode)

  • -force-recreate:強迫重新建立基於此設定檔的所有容器

  • -build:強迫重新建構容器所需要的映像檔

  • -no-deps:不啟動依賴的服務

範例

bash
1
2
3
4
5
6
7
8
9
10
11
12
13
# 後台模式啟動所有服務
docker-compose up -d

# 強制重新建構並啟動
docker-compose up --build

# 只啟動特定服務(例如只啟動 web)
docker-compose up web

# 後台模式啟動並強制重建
docker-compose up -d --force-recreate

注意docker-compose up 預設會將容器命令即時顯示在 CLI 中(前台顯示),使用 -d 選項可改為後台執行。


docker-compose start

啟動 docker-compose 專案下的容器服務,不會執行建構動作(假設容器已存在)。

bash
1
2
3
docker-compose start

範例

bash
1
2
3
4
5
6
7
# 啟動所有服務
docker-compose start

# 啟動特定服務
docker-compose start web mysql


docker-compose stop

停止此 docker-compose 專案所有容器的運行(但不會刪除容器)。

bash
1
2
3
docker-compose stop

範例

bash
1
2
3
4
5
6
7
# 停止所有服務
docker-compose stop

# 停止特定服務
docker-compose stop web


docker-compose restart

重啟 docker-compose 專案下的容器服務。

bash
1
2
3
docker-compose restart

範例

bash
1
2
3
4
5
6
7
# 重啟所有服務
docker-compose restart

# 重啟特定服務
docker-compose restart web


docker-compose rm

刪除由此 docker-compose 專案所建立的所有容器。

bash
1
2
3
docker-compose rm

常用選項

  • f:強制刪除,不詢問確認

  • v:同時刪除相關的 volumes

範例

bash
1
2
3
4
5
6
7
8
9
10
# 刪除所有容器(會詢問確認)
docker-compose rm

# 強制刪除所有容器
docker-compose rm -f

# 刪除容器及相關 volumes
docker-compose rm -v


docker-compose logs

取得 docker-compose 所形成服務的 log 記錄。

bash
1
2
3
docker-compose logs

常用選項

  • f 或 -follow:持續輸出日誌,而非僅顯示一次

  • t 或 -timestamps:顯示每筆輸出的時間資訊

  • -tail=N:只顯示最後 N 行日誌

範例

bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看所有服務的日誌
docker-compose logs

# 持續追蹤日誌輸出
docker-compose logs -f

# 顯示帶時間戳的日誌
docker-compose logs -t

# 查看特定服務的日誌
docker-compose logs web

# 查看最後 100 行並持續追蹤
docker-compose logs --tail=100 -f


docker-compose down

與 docker-compose up 的作用相反,執行時會一併清除由 docker-compose up 所建立起的容器、網路設定和 volumes。

bash
1
2
3
docker-compose down

常用選項

  • v 或 -volumes:同時刪除 volumes

  • -remove-orphans:刪除未在配置文件中定義的容器

範例

bash
1
2
3
4
5
6
7
8
9
10
# 停止並刪除容器、網路
docker-compose down

# 同時刪除 volumes(注意:這會刪除數據!)
docker-compose down -v

# 刪除所有相關資源,包括孤兒容器
docker-compose down --remove-orphans

⚠️ 警告:使用 -v 選項會刪除所有 volumes,這可能導致數據丟失,請謹慎使用!


docker-compose ps

列出專案中所有容器的狀態。

bash
1
2
3
docker-compose ps


docker-compose exec

在運行中的容器內執行命令。

bash
1
2
3
docker-compose exec <service> <command>

範例

bash
1
2
3
4
5
6
7
# 在 web 容器中執行 bash
docker-compose exec web bash

# 在 mysql 容器中執行 MySQL 命令
docker-compose exec mysql mysql -u root -p


docker-compose pull

拉取服務所需的映像檔。

bash
1
2
3
docker-compose pull

範例

bash
1
2
3
4
5
6
7
# 拉取所有服務的映像檔
docker-compose pull

# 拉取特定服務的映像檔
docker-compose pull web


常用工作流程

1. 初次部署

bash
1
2
3
4
5
6
7
8
9
10
# 建構映像檔
docker-compose build

# 啟動服務(後台模式)
docker-compose up -d

# 查看日誌確認服務正常
docker-compose logs -f

2. 更新服務

bash
1
2
3
4
5
6
7
8
9
10
11
12
13
# 停止服務
docker-compose stop

# 拉取最新映像檔
docker-compose pull

# 重新建構(如需要)
docker-compose build

# 啟動服務
docker-compose up -d

3. 查看服務狀態

bash
1
2
3
4
5
6
7
8
9
10
# 查看容器狀態
docker-compose ps

# 查看資源使用情況
docker-compose top

# 查看日誌
docker-compose logs -f

4. 完全清理

bash
1
2
3
4
5
6
7
# 停止並刪除所有容器、網路和 volumes
docker-compose down -v

# 清理未使用的映像檔(可選)
docker system prune -a


故障排除

查看容器日誌

bash
1
2
3
4
5
6
7
8
9
10
# 查看所有服務的日誌
docker-compose logs

# 查看特定服務的日誌
docker-compose logs web

# 持續追蹤日誌
docker-compose logs -f web

進入容器調試

bash
1
2
3
4
5
6
7
# 進入 web 容器
docker-compose exec web sh

# 進入 mysql 容器
docker-compose exec mysql bash

驗證配置文件

bash
1
2
3
4
5
6
7
# 檢查配置文件語法
docker-compose config

# 顯示解析後的完整配置
docker-compose config | less

重啟特定服務

bash
1
2
3
4
5
6
# 重啟 web 服務
docker-compose restart web

# 強制重新建立並啟動
docker-compose up -d --force-recreate web