docker - 5 docker compose
什么是 Docker Compose
Docker Compose是Docker官方的开源项目,是一个用于定义和运行多容器Docker应用程序的工具。
服务(Service):在Docker Compose中,一个服务实际上可以包括若干运行相同镜像的容器实例,代表一个应用的容器。例如,一个Web应用、数据库等都可以被视为一个服务。
项目(Project):由一组关联的应用容器组成的一个完整业务单元。在docker-compose.yml文件中定义,整个docker-compose.yml文件定义一个项目。Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。
核心功能
定义和运行多容器应用:通过docker-compose.yml文件,用户可以定义多个容器的配置信息,包括容器之间的依赖关系、网络配置、数据卷管理等。然后,只需一个命令(如docker-compose up),就可以创建并启动所有定义的容器。
容器编排:Docker Compose支持容器的编排,可以根据容器的依赖关系自动启动和停止容器,确保应用在运行时具有正确的环境。
网络配置:Docker Compose支持自定义网络配置,使得容器之间的通信更加灵活和可靠。服务之间可以通过网络通信,Compose会自动创建网络。
数据卷管理:Docker Compose支持数据卷的挂载和管理,可以轻松地共享和持久化容器数据。
docker-compose.yml 文件
docker-compose.yml 文件是 Docker Compose 的核心配置文件,用于定义和运行多容器 Docker 应用程序。
这个文件遵循 YAML格式,包含了一系列关于服务、网络、卷等配置的信息。
以下是一个基本的 docker-compose.yml 文件示例,以及一些关键字段的解释:
version: '3.8' # 指定 Compose 文件的格式版本
services: # 定义服务(容器)的列表
web:
image: nginx:latest # 指定容器使用的镜像
ports:
- "80:80" # 将主机的80端口映射到容器的80端口
volumes:
- ./html:/usr/share/nginx/html # 将主机的./html目录挂载到容器的/usr/share/nginx/html目录
networks:
- mynetwork # 指定容器使用的网络
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example # 设置环境变量
volumes:
- db_data:/var/lib/mysql # 使用命名卷存储数据库数据
networks:
- mynetwork
networks: # 定义自定义网络
mynetwork:
driver: bridge # 使用桥接网络模式
volumes: # 定义命名卷
db_data:
在这个示例中:
version 字段指定了 Compose 文件的版本。不同版本的 Compose 文件支持不同的配置选项。(最新版本使用的是name,version已经被舍弃)
services 字段下定义了一个或多个服务(容器)。在这个例子中,定义了两个服务:web 和 db。
image 字段指定了容器使用的 Docker 镜像。
ports 字段定义了端口映射。
volumes 字段用于数据持久化或数据共享,可以挂载主机目录到容器目录,或使用命名卷。
environment 字段用于设置环境变量。
networks 字段指定了容器使用的网络。
networks 字段定义了一个或多个自定义网络。在这个例子中,定义了一个名为 mynetwork 的桥接网络。
volumes 字段定义了一个或多个命名卷。在这个例子中,定义了一个名为 db_data 的卷,用于存储 MySQL 数据库的数据。
注意,YAML 文件对缩进非常敏感,因此请确保每个字段都正确缩进。
此外,根据实际需求,您可以添加更多配置选项或自定义服务、网络和卷。
详细参考官方文档:https://docs.docker.com/reference/compose-file/version-and-name/
docker compose 常用命令
docker-compose up:创建并启动容器。
docker-compose down:停止并删除容器、网络和卷(如果使用–volumes选项)。
docker-compose start:启动服务。
docker-compose stop:停止服务。
docker-compose restart:重启服务。
docker-compose logs:查看容器日志。
docker-compose ps:列出所有容器。
docker-compose config:检查docker-compose.yml文件的配置。
创建 compose 文件

docker-compose 全局参数
用法:
docker compose [全局选项] 子命令
| 选项 | 详细说明 |
|---|---|
| --all-resources | 包含所有资源,即使是服务未使用的资源 |
| --ansi string | 控制 ANSI 控制字符的打印时机(可选值:"never" 从不打印,"always" 始终打印,"auto" 自动判断),默认值为 "auto" |
| --compatibility | 以向后兼容模式运行 Compose(兼容旧版本 Compose 文件语法 / 功能) |
| --dry-run | 以试运行模式执行命令(仅展示操作,不实际执行) |
| --env-file stringArray | 指定替代的环境变量文件(可多次使用,如 --env-file .env.dev --env-file .env.common) |
| -f, --file stringArray | 指定 Compose 配置文件(可多次使用,如 -f docker-compose.yml -f docker-compose.dev.yml) |
| --parallel int | 控制最大并行任务数(-1 表示无限制),默认值为 -1 |
| --profile stringArray | 指定要启用的配置文件(需在 Compose 文件中提前定义 profiles) |
| --progress string | 设置进度输出类型(可选值:auto 自动适配、tty 终端交互式、plain 纯文本、quiet 静默),默认值为 "auto" |
| --project-directory string | 指定工作目录(默认值:第一个指定的 Compose 文件所在路径) |
| -p, --project-name string | 指定项目名称(用于区分多个 Compose 项目,默认自动从目录名生成) |
结合之前的常用选项速查表,补充 2 个高频全局选项用法:
docker-compose -f docker-compose.dev.yml up -d
用指定的开发环境配置文件启动服务(适用于多环境配置场景)
docker-compose -p my-project up --build
自定义项目名称为 my-project,避免与其他项目冲突(适用于同一主机运行多个相同服务)
docker-compose up 常用选项速查表
| 选项 | 核心功能 | 适用场景 | 注意事项 |
|---|---|---|---|
-d / --detach |
后台运行容器,不占用终端 | 生产环境、长期运行服务 | 与 --abort-on-*、--menu 不兼容 |
--build |
启动前强制构建/更新镜像 | 代码/依赖变更后启动服务 | 需配合 Dockerfile 生效 |
--force-recreate |
强制重新创建容器(忽略配置/镜像未变更) | 容器状态异常、需重置容器环境 | 会删除原有容器数据(非持久卷) |
--scale 服务名=数量 |
临时扩展服务实例数(如 --scale app=3) |
临时提高服务并发能力 | 覆盖 Compose 文件中 scale 配置 |
--remove-orphans |
删除 Compose 文件中未定义的“孤儿容器”(旧服务残留容器) | 清理无效残留容器 | 避免占用端口/资源 |
--pull always |
启动前强制拉取最新镜像 | 多人协作、镜像频繁更新场景 | 需网络通畅,会增加启动耗时 |
--quiet-pull |
拉取镜像时不显示进度条,简洁输出 | 脚本自动化、无需查看拉取细节 | 仅影响输出样式,不改变拉取逻辑 |
--timestamps |
日志中显示时间戳 | 排查问题、追溯日志时序 | 配合 docker logs 查看更清晰 |
-t / --timeout 秒数 |
容器关闭超时时间(如 -t 30 表示30秒超时) |
避免容器强制关闭导致数据丢失 | 仅对“停止容器”过程生效 |
--wait |
等待服务达到“运行中/健康”状态再退出等待(隐含 -d) |
自动化脚本中确保服务就绪后再执行后续操作 | 需服务配置健康检查(healthcheck) |
-w / --watch |
监听源代码变更,自动重建/刷新容器 | 开发环境、实时调试代码 | 仅支持本地文件监听,不适用于生产环境 |
--no-deps |
只启动指定服务,不启动依赖服务 | 单独调试某一个服务(如仅启动数据库) | 需确保依赖服务已提前运行 |
-V / --renew-anon-volumes |
重新创建匿名卷,不恢复历史数据 | 需重置匿名卷数据(如缓存、临时文件) | 持久卷(named volumes)不受影响 |
高频组合用法
| 组合命令 | 功能描述 | 适用场景 |
|---|---|---|
docker-compose up -d --build |
后台启动服务 + 构建最新镜像 | 开发/生产环境更新服务后启动 |
docker-compose up --force-recreate -d |
强制重建容器 + 后台运行 | 容器环境异常需彻底重置 |
docker-compose up --scale app=3 -d |
扩展3个app实例 + 后台运行 | 临时应对高并发场景 |
docker-compose up --build --remove-orphans |
构建镜像 + 清理残留容器 | 服务重构后启动,避免资源占用 |
关键提醒
- 带
--abort-on-*的选项(如--abort-on-container-exit)仅适用于前台运行(无-d),用于快速测试服务退出逻辑; --wait需配合 Compose 文件中healthcheck配置,否则仅等待容器“启动中”而非“健康可用”;- 匿名卷(无名称的
volume)数据会随--force-recreate/-V丢失,重要数据需用命名持久卷(-v)。

浙公网安备 33010602011771号