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 文件

image

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 构建镜像 + 清理残留容器 服务重构后启动,避免资源占用

关键提醒

  1. --abort-on-* 的选项(如 --abort-on-container-exit)仅适用于前台运行(无 -d),用于快速测试服务退出逻辑;
  2. --wait 需配合 Compose 文件中 healthcheck 配置,否则仅等待容器“启动中”而非“健康可用”;
  3. 匿名卷(无名称的 volume)数据会随 --force-recreate/-V 丢失,重要数据需用命名持久卷(-v)。
posted @ 2025-11-16 11:59  【唐】三三  阅读(11)  评论(0)    收藏  举报