docker compose 中有没有办法创建交叉服务常量?
Is there way in docker compose to create the cross service constant?
我有这样的组合文件:
service1:
//some stuff
environment:
- "PROP=some_common_value"
service2:
//some stuff
environment:
- "PROP=some_common_value"
service2:
//some stuff
environment:
- "PROP=some_common_value"
我想用 相同的 值设置属性。
我现在可以复制过去的值。看起来糟透了。
docker compose 中有没有办法创建交叉服务常量?
有几个选项。如果您使用 docker-compose
而不是 docker stack deploy
进行部署,那么您可以使用 .env
文件来设置变量。或者使用 docker-compose 或 swarm 模式,您可以在 shell 中设置环境变量(通常是用于部署应用程序的 shell 脚本)。在 yaml 内部,您可以使用如下环境变量:
service1:
environment:
- PROP
service2:
environment:
- PROP
service2:
environment:
- PROP
或显式使用如下变量:
service1:
environment:
- PROP=${PROP}
service2:
environment:
- PROP=${PROP}
service3:
environment:
- PROP=${PROP}
如果您有一个 .env
文件并想执行 docker stack deploy
,您可以使用以下任一方式编写处理该文件的脚本:
# option 1, leaves vars set in shell
set -a && . .env && set +a && docker stack deploy -c compose.yml stack_name
# option 2, only sets vars for single command
env $(cat .env | xargs) docker stack deploy -c compose.yml stack_name
在上面的每一个中,.env
只是您可以在 shell 中设置的变量:
PROP=some_common_value
下一个选项是使用锚点和别名的 Yaml 语法。这从 Yaml 文件的一个部分复制到另一个部分(为了支持在 service3 中合并,我切换到 key/value 而不是数组语法):
service1:
environment: &common_env
PROP: "some_common_value"
service2:
environment: *common_env
service3:
environment:
<<: *common_env
PROP3: "unique value"
为了让每个服务都有唯一的值,Docker 在最近版本的 compose 语法中添加了 extension fields。这使您可以定义一个独立于任何服务定义的锚点,并将其合并到每个服务中,每个服务都有自己的唯一值,例如:
version: '3.4'
x-common-env: &common_env
PROP: "some_common_value"
services:
service1:
environment:
<<: *common_env
PROP1: "unique value 1"
service2:
environment:
<<: *common_env
PROP2: "unique value 2"
service3:
environment:
<<: *common_env
PROP3: "unique value 3"
我有这样的组合文件:
service1:
//some stuff
environment:
- "PROP=some_common_value"
service2:
//some stuff
environment:
- "PROP=some_common_value"
service2:
//some stuff
environment:
- "PROP=some_common_value"
我想用 相同的 值设置属性。
我现在可以复制过去的值。看起来糟透了。
docker compose 中有没有办法创建交叉服务常量?
有几个选项。如果您使用 docker-compose
而不是 docker stack deploy
进行部署,那么您可以使用 .env
文件来设置变量。或者使用 docker-compose 或 swarm 模式,您可以在 shell 中设置环境变量(通常是用于部署应用程序的 shell 脚本)。在 yaml 内部,您可以使用如下环境变量:
service1:
environment:
- PROP
service2:
environment:
- PROP
service2:
environment:
- PROP
或显式使用如下变量:
service1:
environment:
- PROP=${PROP}
service2:
environment:
- PROP=${PROP}
service3:
environment:
- PROP=${PROP}
如果您有一个 .env
文件并想执行 docker stack deploy
,您可以使用以下任一方式编写处理该文件的脚本:
# option 1, leaves vars set in shell
set -a && . .env && set +a && docker stack deploy -c compose.yml stack_name
# option 2, only sets vars for single command
env $(cat .env | xargs) docker stack deploy -c compose.yml stack_name
在上面的每一个中,.env
只是您可以在 shell 中设置的变量:
PROP=some_common_value
下一个选项是使用锚点和别名的 Yaml 语法。这从 Yaml 文件的一个部分复制到另一个部分(为了支持在 service3 中合并,我切换到 key/value 而不是数组语法):
service1:
environment: &common_env
PROP: "some_common_value"
service2:
environment: *common_env
service3:
environment:
<<: *common_env
PROP3: "unique value"
为了让每个服务都有唯一的值,Docker 在最近版本的 compose 语法中添加了 extension fields。这使您可以定义一个独立于任何服务定义的锚点,并将其合并到每个服务中,每个服务都有自己的唯一值,例如:
version: '3.4'
x-common-env: &common_env
PROP: "some_common_value"
services:
service1:
environment:
<<: *common_env
PROP1: "unique value 1"
service2:
environment:
<<: *common_env
PROP2: "unique value 2"
service3:
environment:
<<: *common_env
PROP3: "unique value 3"