Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过一个简单的 YAML 文件(通常命名为 docker-compose.yml
)来配置应用程序的服务、网络、卷等,从而简化多容器环境的部署和管理。
核心功能
- 多容器编排
允许在单个文件中定义多个容器(如 Web 服务、数据库、缓存等),并通过一条命令启动所有服务。 - 声明式配置
使用 YAML 文件描述应用程序的架构(服务依赖、端口映射、环境变量、数据卷等),避免手动输入冗长的docker run
命令。 - 一键启停
• 启动所有服务:docker-compose up
• 停止并清理:docker-compose down
- 环境隔离
支持为不同环境(开发、测试、生产)定义独立的配置文件(如docker-compose.prod.yml
)。
核心概念
- 服务(Service):一个容器化的应用(如
nginx
、mysql
)。 - 项目(Project):由一组关联服务组成的完整应用,默认以当前目录名作为项目名(可通过
-p
指定)。 - YAML 配置:定义服务、网络、卷等。例如:
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:8.0
container_name: mysql80
environment:
MYSQL_ROOT_PASSWORD: "123456" # 设置 root 密码
MYSQL_DATABASE: "my_wp" # 可选:初始化数据库
MYSQL_USER: "user" # 可选:创建普通用户
MYSQL_PASSWORD: "user123" # 可选:普通用户密码
ports:
- "3306:3306" # 映射宿主机 3306 → 容器 3306
volumes:
- mysql_data:/var/lib/mysql # 持久化数据
- ./schema.sql:/docker-entrypoint-initdb.d/01-schema.sql # 初始化脚本
restart: unless-stopped # 自动重启
volumes:
mysql_data: # 定义数据卷
常用命令
命令 | 作用 |
---|---|
docker-compose up | 启动所有服务(-d 后台运行) |
docker-compose down | 停止并删除容器、网络 |
docker-compose ps | 查看运行中的服务 |
docker-compose logs | 查看日志 |
docker-compose build | 重新构建镜像 |
docker-compose exec | 进入容器(如 exec web bash ) |
适用场景
- 本地开发:快速搭建包含依赖服务(如数据库、消息队列)的环境。
- CI/CD 测试:在流水线中一键启动测试环境。
- 微服务演示:简化多服务应用的部署。
与 Docker 的区别
工具 | 适用场景 | 复杂度 |
---|---|---|
docker | 单容器操作 | 低 |
docker-compose | 多容器编排 | 中 |
Kubernetes | 大规模集群管理 | 高 |
示例:启动一个 WordPress 项目
version: '3.8'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
wordpress:
image: wordpress
ports:
- "8000:80"
depends_on:
- db
运行:docker-compose up -d
,WordPress 将在 http://localhost:8000
可用。
总结:Docker Compose 是开发者和中小型项目快速编排多容器应用的首选工具,但对于生产环境的大规模部署,可能需要更强大的工具(如 Kubernetes)。
