Compose 开发规范

注意:

Develop 是 Compose 规范的一个可选部分。它在 Docker Compose 2.22.0 及更高版本中可用。

本页面定义了Compose的行为,以高效地协助您,并定义了由Compose设置的开发约束和工作流程。只有一部分Compose文件服务可能需要一个develop子部分。

示例

services:
  frontend:
    image: example/webapp
    build: ./webapp
    develop:
      watch: 
        # sync static content
        - path: ./webapp/html
          action: sync
          target: /var/www
          ignore:
            - node_modules/

  backend:
    image: example/backend
    build: ./backend
    develop:
      watch: 
        # rebuild image and recreate service
        - path: ./backend/src
          action: rebuild

属性

develop 子部分定义了由 Compose 应用的配置选项,以帮助您在开发服务时优化工作流程。

watch

watch 属性定义了一系列规则,这些规则控制基于本地文件更改的自动服务更新。watch 是一个序列,序列中的每个单独项定义了由 Compose 应用于监控源代码更改的规则。有关更多信息,请参阅 使用 Compose Watch

action

action 定义了检测到更改时要采取的操作。如果 action 设置为:

  • rebuild,Compose 根据 build 部分重新构建服务镜像,并使用更新后的镜像重新创建服务。
  • restart,Compose 会重新启动服务容器。适用于 Docker Compose 版本 2.32.0 及更高版本。
  • sync,Compose 保持现有的服务容器运行,但根据 target 属性将源文件与容器内容同步。
  • sync+restart,Compose 根据 target 属性将源文件与容器内容同步,然后重新启动容器。适用于 Docker Compose 2.23.0 及更高版本。
  • sync+exec,Compose 根据 target 属性将源文件与容器内容同步,然后在容器内执行命令。适用于 Docker Compose 2.32.0 及更高版本。

exec

Introduced in Docker Compose version 2.23.2

exec 仅在 action 设置为 sync+exec 时相关。与 服务钩子 类似,exec 用于定义容器启动后要在其中运行的命令。

  • command: 指定容器启动后要运行的命令。此属性是必需的,您可以选择使用shell形式或exec形式。
  • user: 运行命令的用户。如果未设置,则命令将以与主服务命令相同的用户身份运行。
  • privileged: 允许命令以特权访问运行。
  • working_dir: 运行命令的工作目录。如果未设置,则在与主服务命令相同的工作目录中运行。
  • environment: 设置运行命令的环境变量。虽然命令继承了为服务的主命令定义的环境变量,但此部分允许您添加新变量或覆盖现有变量。
services:
  frontend:
    image: ...
    develop:
      watch: 
        # sync content then run command to reload service without interruption
        - path: ./etc/config
          action: sync+exec
          target: /etc/config/
          exec:
            command: app reload

ignore

ignore 属性可用于定义要忽略的路径模式列表。任何匹配模式的文件,或属于匹配模式的文件夹的更新文件,都不会触发服务的重新创建。语法与 .dockerignore 文件相同:

  • * 匹配文件名中的0个或多个字符。
  • ? 匹配文件名中的单个字符。
  • */* 匹配任意名称的两个嵌套文件夹
  • ** 匹配任意数量的嵌套文件夹

如果构建上下文包含一个.dockerignore文件,该文件中的模式将作为隐式内容加载到ignores文件中,并且在Compose模型中设置的值将被追加。

path

path 属性定义了要监视更改的源代码路径(相对于项目目录)。对路径内任何文件的更新,如果不匹配任何 ignore 规则,将触发配置的操作。

目标

target 属性仅在 action 配置为 sync 时适用。path 内有更改的文件会与容器文件系统同步,以便后者始终运行最新的内容。