我有多个环境。它们是调试,开发和生产。我想引用最新的dev(最新)或dev(1.1版)或prod(最新)的图片。我将如何标记构建和推送?

我的第一个想法是为每种环境的调试,开发和生产创建单独的存储库。但是我开始怀疑我是否可以仅使用一个存储库就可以做到这一点。如果可能与一个容器相关,则在构建和推送时的语法是什么?

最佳答案

这是对我和我的团队最有效的方法,我建议:

我建议每个项目在所有环境中都为每个项目提供一个 repo 协议(protocol),这样更易​​于管理。特别是如果您具有微服务,那么您的项目将由多个微服务组成。每个项目每个环境管理一个仓库是很痛苦的。

例如,我有一个用户api。
docker 仓库是users。此 repo 由alphadevbeta使用。

我们在CI/CD服务中创建一个名为$DOCKER_TAG的环境变量,并在创建版本时对其进行设置,如下所示:
DOCKER_TAG: $(date +%Y%m%d).$BUILD_NUMBER =>这在bash中。

触发CI/CD运行时,正在运行的构建先前已设置$BUILD_NUMBER的位置。例如,当我们合并PR时,将触发一个版本,如版本号。 1,所以$BUILD_NUMBER: 1

使用后,结果标签如下所示:20171612.1所以我们的docker镜像是:users:20171612.1
为什么使用这种格式?

  • 它允许我们使用
    运行任务。
  • 它可以帮助我们跟踪何时创建图像以及什么
    建立它属于。
  • 通过内部版本号,我们可以找到提交信息,并根据需要将所有信息一起映射,非常适合进行故障排除。
  • 它允许我们为每个项目使用相同的docker repo。
  • 很高兴知道我们何时从标记本身创建图像。

  • 因此,当我们合并时,我们将创建一个构建。然后,根据需要将该构建部署到不同的环境。我们不会为每个环境创建一个独立的版本。我们会跟踪部署在何处的内容。

    如果在具有特定标签的环境中存在错误,我们将拉出此类标签,进行构建和故障排除,然后在这种情况下重现该问题。如果发现问题,则在标记20171612.1中有内部版本号,因此我们知道内部版本号。 1有问题。我们检查我们的CI/CD服务,并告诉我们最新的提交。我们从git中检查提交哈希,然后调试并解决问题。然后,例如,将其部署为修补程序。

    如果您还没有CI/CD,并且是手动执行此操作,只需手动以该格式设置标签(按原样输入完整的字符串),而不要使用内部版本号,请使用commit short git hash (如果您使用的是git):
    20170612.ed73d4f
    因此,您知道最新的提交是什么,因此您可以对特定镜像的问题进行故障排除,并映射回代码以根据需要创建修复程序。

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

    尝试一下,根据需要进行调整,然后对您和您的团队进行最有效的处理。标记有很多方法。我们尝试了很多,这是到目前为止我们最喜欢的。

    希望这会有所帮助。

    关于docker - Docker : What are the best practices when tagging images for an environment,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44509375/

    10-16 05:04
    查看更多