现实中的应用往往不是单个容器,而是多个服务协同工作:Web 前端、后端 API、数据库、缓存、消息队列......手动逐个启动容器并配置网络非常繁琐。Docker Compose 通过一个声明式的 YAML 文件,让你一键启动整个应用栈。本文将带你从零开始,编写第一个 docker-compose.yml,掌握常用命令,并运行一个完整的 LAMP 示例。
一、什么是 Docker Compose?
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。你只需在 YAML 文件中配置应用的服务、网络和卷,然后一条命令就能启动所有服务。
核心价值:
简化多容器管理:无需记忆复杂的 docker run 参数。
环境一致性:开发、测试、生产使用相同的 Compose 配置。
支持依赖启动顺序(depends_on)。
快速复制和共享:docker-compose.yml 可以提交到 Git。
二、安装 Docker Compose
Docker Compose 已集成在 Docker Desktop(Windows / Mac)中,无需单独安装。Linux 用户需单独安装:
bash
# 下载最新版(替换版本号)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose --version
注意:新版 Docker Compose 也可作为 Docker 插件使用:docker compose(无横线)。下文使用 docker-compose 命令,但推荐迁移到 docker compose。
三、第一个 Compose 文件:Web + Redis
创建一个新目录 compose-demo,新建 docker-compose.yml:
yaml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
restart: always
redis:
image: redis:alpine
restart: always
解释:
version:Compose 文件格式版本(3.x 用于 Swarm,建议 3.8)。
services:定义容器,每个服务对应一个容器。
web:使用 Nginx 镜像,映射宿主机 8080 端口,挂载本地 ./html 目录。
redis:使用 Redis 镜像。
启动:
bash
# 创建 ./html/index.html
echo "<h1>Hello Compose</h1>" > ./html/index.html
# 启动所有服务(后台运行)
docker-compose up -d
# 查看状态
docker-compose ps
# 访问 http://localhost:8080
停止并清理:
bash
docker-compose down
四、核心命令详解

五、一个更完整的示例:WordPress + MySQL
yaml
version: '3.8'
services:
db:
image: mysql:8.0
container_name: wordpress_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
container_name: wordpress_app
restart: always
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
depends_on:
- db
volumes:
- wordpress_data:/var/www/html
volumes:
db_data:
wordpress_data:
关键点:
environment:设置容器环境变量(MySQL 密码、数据库名等)。
volumes:使用命名卷持久化数据,保证容器删除后数据不丢。
depends_on:声明启动顺序(先 db 后 wordpress),但不会等待 db 完全就绪(需健康检查)。
启动后访问 http://localhost:8000 即可进入 WordPress 安装页面。
六、服务间通信
在 Compose 中,服务之间可以通过服务名作为主机名进行通信。上面的例子中,WordPress 通过 WORDPRESS_DB_HOST=db:3306 连接到 MySQL 容器。
这是因为 Compose 会自动创建一个默认网络(<目录名>_default),并将所有服务加入该网络,并支持 DNS 解析。
七、常用配置字段速查

八、小结
Docker Compose 是多容器应用的得力助手。通过一个 YAML 文件,你可以完整描述应用的所有服务、网络和存储。掌握 docker-compose up/down 等基本命令,你已经能够快速搭建开发环境。