docker-compose
是 Docker 官方提供的一个用于定义和运行多容器 Docker 应用的工具。它通过一个简单的 YAML 配置文件(通常命名为 docker-compose.yml
),可以一键启动、停止和管理多个相关联的容器,极大简化了多容器应用的开发和部署流程。
核心功能
-
多容器编排
用一个配置文件定义多个容器(服务)及其依赖关系,例如 Web 应用、数据库、缓存等。 -
自动化流程
自动创建容器、网络、卷,并设置容器间的通信。 -
环境一致性
确保开发、测试、生产环境的一致性,避免“在我机器上能跑”的问题。
核心概念
1. docker-compose.yml
文件
-
用 YAML 格式定义多容器的配置,包括服务、网络、卷等。
-
示例:
version: '3.8' # 指定 Compose 版本
services:
web: # 服务名称
build: . # 使用当前目录的 Dockerfile 构建镜像
ports:
- "5000:5000" # 端口映射
depends_on: # 依赖关系
- redis
redis: # 另一个服务
image: redis:alpine
volumes:
- redis-data:/data # 挂载卷
volumes:
redis-data: # 定义卷
2. 服务(Service)
-
每个服务对应一个容器,可以指定:
-
镜像(
image
或build
) -
端口映射(
ports
) -
环境变量(
environment
) -
数据卷(
volumes
) -
依赖关系(
depends_on
)
-
3. 常用命令
# 启动所有服务(后台运行)
docker-compose up -d# 停止并删除所有容器、网络
docker-compose down# 查看运行状态
docker-compose ps# 构建或重新构建服务镜像
docker-compose build# 查看服务日志
docker-compose logs
适用场景
-
开发环境
快速启动本地开发所需的所有依赖(如数据库、消息队列)。 -
微服务架构
管理多个相互依赖的微服务容器。 -
CI/CD 流水线
在自动化测试中快速搭建临时环境。 -
单机部署
简化小型项目的部署流程。
Docker Compose vs. Dockerfile
Dockerfile | Docker Compose |
---|---|
定义单个容器的构建步骤 | 定义多容器的编排和运行方式 |
通过 docker build 生成镜像 |
通过 docker-compose up 启动服务 |
适用于单一服务 | 适用于多服务协作的应用 |
进阶用法
-
多环境配置
使用多个 Compose 文件(如docker-compose.prod.yml
)覆盖不同环境的配置。 -
变量替换
在 YAML 文件中使用环境变量(${VARIABLE}
),实现配置动态化。 -
扩展服务
通过docker-compose scale
扩展服务实例数量(需结合 Swarm 模式)。