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

需要: Docker Compose 2.32.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 模型中设置的值。

include

有时,选择要监视的文件比使用 ignore 声明不应监视的文件更容易。

include 属性可用于定义要考虑监视的路径模式或模式列表。只有与这些模式匹配的文件才会在应用监视规则时被考虑。语法与 ignore 相同。

services:
  backend:
    image: example/backend
    develop:
      watch: 
        # rebuild image and recreate service
        - path: ./src
          include: *.go  
          action: rebuild

path

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

target

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

页面选项