使用Docker堆栈进行Docker映像版本控制

时间:2020-03-13 14:58:37

标签: docker docker-registry docker-stack

我已经设置了登台和生产服务器。流程如下。我开发新映像并将其推送到登台注册表。那里的代码已经过测试,如果一切正常,我想将映像推送到生产服务器。我也想使用版本控制。我考虑过增加image标签。(不仅仅是最新的)我将应用程序与docker stack和一个compose文件一起部署。

现在我想问一个最佳实践。

示例: 当前图像:xyz:0.1 新图片:xyz:0.2

在撰写文件中,我引用了图像xyz:auto_lastest_version_here

我希望能够看到版本字符串,而不仅仅是最新的Tag。 是否已有减少docker pull更新的机制或方法->拉出可用的最新版本 堆栈部署...更新特定的容器。

编辑:我想我可以写一个脚本,从图像中提取最新的Tag,并通过在我的撰写文件中使用env var引用此脚本。我只是认为docker提供的方法可能更简单或标准。

1 个答案:

答案 0 :(得分:0)

图像存储库名称和标签只是附加到作为实际图像数据的Blob的字符串。 Docker和docker Registry并没有真正了解Blob的最新版本-“:latest”标记甚至没有内部含义-只是在构建时默认使用的字符串,并且没有什么可以阻止您将较旧的图像标记为:latest

幸运的是,您可以为图像添加多个标签,这提供了合理的解决方案。对于我来说,除了使用实际版本号进行标记外,我还使用一个字符串来标识我想要的生产服务器上的版本,例如“:live”或“:production”。因此,假设您有图像myimage:1.0.0myimage:1.0.1myimage:1.1.0,则可以运行:

docker tag "myimage:1.1.0" "myimage:production"

...向其添加生产标签。然后,您在生产服务器上部署的堆栈文件将始终引用myimage:production

真正的好处是,如果用户在切换到1.1.0时开始抱怨问题,则只需将myimage:1.0.1标记为myimage:production并重新部署,它将切换回旧版本版本。

不确定这是否是“最佳”实践,但这是我使用的一种实践。