Docker:为环境标记图像时的最佳做法是什么?

我有多个环境。 他们是debugging,开发和产品。 我想参考最新的dev(最新)或dev(版本1.1)或prod(最新)的图像。 我将如何去标记构build和推送?

我的第一个想法是为每个环境debugging,开发和产品创build单独的存储库。 但是我开始怀疑我是否只用一个存储库就可以做到这一点。 如果有可能做一个容器,那么在构build和推送时语法是什么?

这是最适合我和我的团队,我推荐它:

我build议每个项目都有一个单一的回购,适合所有环境 ,pipe理起来更容易。 特别是如果你有微服务,那么你的项目是由多个微服务组成。 每个项目pipe理一个回购是一个痛苦。

例如,我有一个用户API。 docker回购是users 。 这个回购被alphadevbeta

我们在CI / CD服务中创build一个名为$DOCKER_TAG的envvariables,并在构build时创build它,如下所示:

DOCKER_TAG: $(date +%Y%m%d).$BUILD_NUMBER =>这是bash。

其中$BUILD_NUMBER是在触发CI / CD运行时正在运行的版本中设置的。 例如,当我们合并一个PR,一个构build被触发,构build号码。 1,所以$BUILD_NUMBER: 1

生成的标签在使用时看起来像这样: 20171612.1所以我们的docker图像是: users:20171612.1

为什么这个格式?

  • 它允许我们在运行任务的不同环境中部署相同的标签。
  • 它有助于我们跟踪图像的创build时间,以及它的属性。
  • 通过构build编号,我们可以根据需要find提交信息并映射到一起,便于排查。
  • 它允许我们为每个项目使用相同的docker回购。
  • 很高兴知道我们何时从标签本身创build图像。

所以,当我们合并时,我们创build一个单一的构build。 然后,根据需要将构build部署到不同的环境中。 我们不会为每个环境创build独立的构build。 我们跟踪部署在哪里。

如果在有特定标签的环境中存在缺陷,我们会在这种情况下拉出这样的标签,build立并发现问题并重现问题。 如果我们发现问题,我们在标签20171612.1有内部编号,所以我们知道内部编号。 1有问题。 我们检查我们的CI / CD服务,告诉我们什么是最新的提交。 我们从git中检出这个提交散列并debugging并解决问题。 然后,我们将其作为修补程序进行部署。

如果你还没有CI / CD,而且你正在手工完成这个工作,只需手动设置这个格式的标签(几乎是按照原样input完整的string),而不是内部版本号,使用commit git hash (如果你正在使用git):

20170612.ed73d4f

因此,您知道什么是最新的提交,因此您可以解决特定映像的问题,并映射回代码以根据需要创build修补程序。

您还可以为映射到代码版本的标签定义任何其他后缀,以便您可以轻松地排除故障(例如,如果使用的话,映射到git标签)。

尝试一下,根据需要进行调整,并为您和您的团队做最好的工作。 有很多方法可以去标记。 我们尝试了很多,这是迄今为止我们最喜欢的。

希望这是帮助。

我认为“最新”是最后的生产形象。 这正是我所期待的docker枢纽,虽然没有发展的图像。

另一方面,你可以使用标签,例如0.0.1-dev。 当这个图像完成后,您可以再次执行标记并推送,然后存储库将检测到图层已经存储在存储库中。

现在,当你准备发行一个候选版本的时候,即使不是在环境保护之下,你也只能得到这个语义版本。 那就是我会做的。