Docker组成

描述Docker 组合
用法docker compose

描述

您可以使用 compose 子命令docker compose [-f <arg>...] [options] [COMMAND] [ARGS...]来构建和管理 Docker 容器中的多个服务。

使用 -f 指定一个或多个 Compose 文件的名称和路径

使用该-f标志指定 Compose 配置文件的位置。

指定多个 Compose 文件

您可以提供多个-f配置文件。当您提供多个文件时,Compose 会将它们组合成一个配置。 Compose 按照您提供文件的顺序构建配置。后续文件将覆盖并添加到其前任文件中。

例如,考虑以下命令行:

$ docker compose -f docker-compose.yml -f docker-compose.admin.yml run backup_db

docker-compose.yml文件可能指定一项webapp服务。

services:
  webapp:
    image: examples/web
    ports:
      - "8000:8000"
    volumes:
      - "/data"

如果docker-compose.admin.yml也指定了相同的服务,则任何匹配的字段都会覆盖先前的文件。新值,添加到webapp服务配置中。

services:
  webapp:
    build: .
    environment:
      - DEBUG=1

当您使用多个 Compose 文件时,文件中的所有路径都相对于使用-f.您可以使用该--project-directory选项来覆盖此基本路径。

使用-fwith -(破折号)作为文件名从 stdin 读取配置。当使用 stdin 时,配置中的所有路径都相对于当前工作目录。

-f标志是可选的。如果您不在命令行上提供此标志,Compose 会遍历工作目录及其父目录来查找compose.yamldocker-compose.yaml文件。

指定单个 Compose 文件的路径

您可以使用该-f标志来指定不在当前目录中的 Compose 文件的路径,无论是从命令行还是通过COMPOSE_FILE在 shell 或环境文件中设置环境变量。

-f有关在命令行使用该选项的示例,假设您正在运行 Compose Rails 示例,并且compose.yaml目录中有一个名为sandbox/rails.您可以使用类似的命令,通过使用以下标志docker compose pull从任何地方获取数据库服务的 postgres 映像:-f

$ docker compose -f ~/sandbox/rails/compose.yaml pull db

使用-p指定项目名称

每个配置都有一个项目名称。 Compose 使用以下机制(按优先顺序)设置项目名称:

  • 命令-p行标志
  • 环境COMPOSE_PROJECT_NAME变量
  • name:配置文件中的顶级变量(或name: 使用指定的一系列配置文件中的最后一个变量-f
  • basename包含配置文件的项目目录(或包含使用指定的第一个配置文件-f
  • 如果未指定配置文件,则为当前目录的 项目名称basename只能包含小写字母、十进制数字、破折号和下划线,并且必须以小写字母或十进制数字开头。如果basename项目目录或当前目录违反了此约束,则必须使用其他机制之一。
$ docker compose -p my_project ps -a
NAME                 SERVICE    STATUS     PORTS
my_project_demo_1    demo       running

$ docker compose -p my_project logs
demo_1  | PING localhost (127.0.0.1): 56 data bytes
demo_1  | 64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.095 ms

使用配置文件启用可选服务

用于--profile指定一个或多个活动配置文件 调用docker compose --profile frontend up将启动具有该配置文件的服务frontend以及不带任何指定配置文件的服务。您还可以启用多个配置文件,例如使用docker compose --profile frontend --profile debug up配置文件frontenddebug启用。

COMPOSE_PROFILES配置文件也可以通过环境变量设置。

配置并行度

用于--parallel指定并发引擎调用的最大并行度。调用docker compose --parallel 1 pull一次会拉出 Compose 文件中定义的可拉图像。这也可以用于控制构建并发性。

并行度也可以通过环境变量来设置COMPOSE_PARALLEL_LIMIT

设置环境变量

您可以为各种 docker compose 选项设置环境变量,包括-f-p--profiles标志。

设置COMPOSE_FILE环境变量相当于传递-f标志, COMPOSE_PROJECT_NAME环境变量与标志作用相同-pCOMPOSE_PROFILES环境变量相当于--profiles标志并且与标志COMPOSE_PARALLEL_LIMIT作用相同--parallel

如果在命令行上显式设置标志,则关联的环境变量将被忽略。

设置COMPOSE_IGNORE_ORPHANS环境变量以true阻止 docker compose 检测项目的孤立容器。

使用试运行模式来测试您的命令

使用--dry-run标志来测试命令而不更改应用程序堆栈状态。试运行模式向您显示 Compose 在执行命令时应用的所有步骤,例如:

$ docker compose --dry-run up --build -d
[+] Pulling 1/1
 ✔ DRY-RUN MODE -  db Pulled                                                                                                                                                                                                               0.9s
[+] Running 10/8
 ✔ DRY-RUN MODE -    build service backend                                                                                                                                                                                                 0.0s
 ✔ DRY-RUN MODE -  ==> ==> writing image dryRun-754a08ddf8bcb1cf22f310f09206dd783d42f7dd                                                                                                                                                   0.0s
 ✔ DRY-RUN MODE -  ==> ==> naming to nginx-golang-mysql-backend                                                                                                                                                                            0.0s
 ✔ DRY-RUN MODE -  Network nginx-golang-mysql_default                                    Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-db-1                                     Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-backend-1                                Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-proxy-1                                  Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-db-1                                     Healthy                                                                                                                                           0.5s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-backend-1                                Started                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-proxy-1                                  Started                                     Started

从上面的例子可以看出,第一步是拉取db服务定义的镜像,然后构建backend服务。接下来,创建容器。服务db已启动,并backend等待proxy服务db运行正常后再启动。

试运行模式适用于几乎所有命令。您不能将试运行模式与不更改 Compose 堆栈状态的命令(例如psls)一起使用logs

选项

选项默认描述
--ansiauto控制何时打印 ANSI 控制字符(“从不”|“始终”|“自动”)
--compatibility以向后兼容模式运行 compose
--dry-run在试运行模式下执行命令
--env-file指定备用环境文件
-f, --file编写配置文件
--parallel-1控制最大并行度,-1表示无限制
--profile指定要启用的配置文件
--progressauto设置进度输出的类型(auto、tty、plain、quiet)
--project-directory指定备用工作目录
(默认值:第一个指定的 Compose 文件的路径)
-p, --project-name项目名

子命令

命令描述
docker compose alpha实验命令
docker compose build构建或重建服务
docker compose config以规范格式解析、解析和渲染撰写文件
docker compose cp在服务容器和本地文件系统之间复制文件/文件夹
docker compose create为服务创建容器
docker compose down停止并删除容器、网络
docker compose events从容器接收实时事件
docker compose exec在正在运行的容器中执行命令
docker compose images列出创建的容器使用的镜像
docker compose kill强制停止服务容器
docker compose logs查看容器的输出
docker compose ls列出正在运行的撰写项目
docker compose pause暂停服务
docker compose port打印端口绑定的公共端口
docker compose ps列出容器
docker compose pull拉取服务镜像
docker compose push推送服务图片
docker compose restart重启服务容器
docker compose rm删除已停止的服务容器
docker compose run在服务上运行一次性命令
docker compose start启动服务
docker compose stop停止服务
docker compose top显示正在运行的进程
docker compose unpause取消暂停服务
docker compose up创建并启动容器
docker compose version显示 Docker Compose 版本信息
docker compose wait阻塞直到第一个服务容器停止
docker compose watch监视服务的构建上下文并在文件更新时重建/刷新容器