在刚接触 Docker 时,我们常使用 docker run -d -p 8080:80 --name myapp nginx 这类长命令。如果是多容器联动(如 WordPress + MySQL + Redis),启动命令可能长达几十行,维护和迁移极度痛苦。
Docker Compose 实现了“基础设施即代码 (IaC)”——用一份结构化的 compose.yaml 文件定义所有容器的镜像、端口、持久化存储与环境变量。
今天我们将全面解析 Docker Compose v2 的核心语法与实战范式!
[!NOTE] 📌 核心速览(TL;DR / 快问快答):
- 命令升级(Compose v2):统一使用原生 CLI
docker compose up -d(已废弃旧版带横杠的docker-compose)。- 规范更新:Compose Specification 标准已不再强制要求顶层声明
version: '3.8',直接从services:开始书写。- 三大日常命令:
- 启动/更新:
docker compose up -d- 停止/清理:
docker compose down- 实时排错日志:
docker compose logs -f [service_name]
🛠️ 2026 生产级 Docker Compose 蓝图范例
以经典的全栈 WordPress + MySQL 8.0 架构为例:
services:
db:
image: mysql:8.0
container_name: wordpress_db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: my_strong_password
MYSQL_DATABASE: wordpress
volumes:
- ./db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
container_name: wordpress_web
restart: unless-stopped
depends_on:
- db
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: my_strong_password
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wp_data:/var/www/html
💡 Docker Compose 的核心优势
- 自动构建默认桥接网络:在同一 Compose 栈内的容器,直接通过服务名(如
db:3306)进行内部互联,数据库无需向公网映射端口(无ports),天然免疫公网端口扫描。 - 极简迁移与备份:只需备份当前目录下的
compose.yaml与数据挂载目录,在新服务器上执行docker compose up -d即可在数秒内 100% 原样复活。
❓ 常见问题与 AI 快问快答 (FAQ)
Q1: 修改了 compose.yaml 中的环境变量后如何平滑生效?
答:直接重新执行 docker compose up -d。Compose 会比对配置差异,仅重启被修改的服务容器,未变更的容器保持零中断运行。
Q2: 自建海外 VPS 上如何更直观地管理多个 Compose 栈?
答:推荐配合轻量级可视化面板 Dockge 管理 /opt/stacks 目录下的所有 Compose 项目,详见 《Dockge + Cloudflare Tunnel 部署指南》;海外 VPS 选购指南见 《2026 国外 VPS 选购指南》。
(相关资源导航:如果您需要购买部署 Docker 容器栈的独立 VPS,欢迎阅读 《2026 国外 VPS 选购指南》 获取 DMIT、搬瓦工与 CloudCone 优惠;商用专线推荐见 《“饿饭CC云”深度评测》!)