解释一下 `<<: *name` 如何在 docker-compose 中引用 `&name`?

Abd*_*uum 6 django yaml docker docker-compose cookiecutter-django

尝试了解 docker-compose 文件是如何创建的,因为我想将其复制到 kubernetes 部署 yaml 文件中。

参考cookiecutter-django 的 docker-composeproduction.yaml文件

...
services:
  django: &django
...
Run Code Online (Sandbox Code Playgroud)

通过 docker-compose 设计,这里的服务名称已经定义为django,但后来我注意到这个额外的位&django。这让我想知道为什么它在这里。再往下看,我注意到以下几点:

...
celeryworker:
  <<: *django
...
Run Code Online (Sandbox Code Playgroud)

我不明白这是如何运作的。docker-compose 文档没有引用或提及使用<<,更不用说引用命名服务了,例如*django.

谁能解释一下上述工作原理以及如何将其复制到 kubernetes 部署或服务 yaml 文件(或两者?)(如果可能)?

编辑:@jonsharpe 分享的问题 是相似的,但我不清楚它是如何使用的。

BMi*_*tch 7

发生了三种不同的事情,它们都不是特定的 compose 语法,而是 yaml 语法。

首先是定义一个锚点,后跟&一个名称。这类似于定义稍后在 yaml 中使用的变量,其值与其出现的 yaml 对象的值相匹配。

接下来是别名,用与*锚点相同的名称指定。这使用 yaml 文件中第二个位置的锚点。

最后是使用该语法的映射合并<<,它将别名中的所有映射值与当前映射中的其余值合并,从而允许您使用特定于撰写文件该部分的值覆盖已保存锚点中的值。

要深入了解这一点,请尝试搜索“yaml 锚点和别名”。对我来说第一个点击的是这篇博客文章:https://medium.com/@kinghuang/docker-compose-anchors-aliases-extensions-a1e4105d70bd