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
`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 reloadignore
`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注意在许多情况下,`include` 模式以通配符(`*`)字符开头。这在 YAML 语法中具有特殊含义,用于定义别名节点,因此您必须用引号将模式表达式括起来。
path
`path` 属性定义要监视更改的源代码路径(相对于项目目录)。路径内任何未匹配任何 `ignore` 规则的文件更新都会触发配置的操作。
target
`target` 属性仅在 `action` 配置为 `sync` 时适用。`path` 中有更改的文件将与容器的文件系统同步,以便容器始终运行最新内容。