随着时间的推移管理Docker镜像

时间:2016-12-12 00:46:22

标签: docker

在推送时构建Docker镜像的人 - 如何随着时间的推移管理不同的版本?

  1. 他们都有自己的标签吗?你根据git hash进行标记吗?
  2. 一段时间后你会删除旧图片吗?他们不会占用很多空间(1GB +)吗?

1 个答案:

答案 0 :(得分:4)

  

如何管理不同版本?

首先要注意的是标签随着时间的推移是不可信任的。它们不能保证引用相同的东西或继续存在,因此请使用Dockerfile LABEL,它们将保持一致并始终与图像一起存储。 label-schema.org是一个很好的起点。

  

他们都有自己的标签吗?你根据git哈希进行标记吗?

如果您需要一些独特的东西来引用每个构建,只需使用图像sha256总和。如果要将额外的构建元数据附加到图像,请使用前面提到的LABEL并包含git哈希以及所需的任何版本控制系统。如果使用sha256总和听起来很难,仍然需要标签来引用多个图像版本,因此您需要一些系统。

Git标签,日期时间,内部版本号都可以正常工作。每个人都有自己的优点和缺点,这取决于你的环境以及你试图将它们结合在一起作为一个"发布"。值得注意的是Docker镜像可能来自带有git哈希的Dockerfile,但是如果你在其他地方获取图像FROM,那么从那个git哈希构建将不会产生一致的图像。

  

一段时间后你会删除旧图片吗?

保留完全取决于您的软件/系统/公司要求或政策。我已经看到审计要求很高的环境,这增加了构建/发布保留时间,直到"我想在这个版本上重新运行这些测试"水平。其他环境的审计最少,往往会降低保留要求。有些地方甚至不试图强加任何发布管理(这很糟糕)。对于你的特定环境,这里的人真的无法回答这个问题,尽管这是最好的,但坚持这样做是个好主意。

基本要求是存储每个生产版本的人工制品。这通常是永远"出于历史目的。积极回顾超过一两个版本是非常罕见的(这可能取决于你的应用程序),所以归档是一个好主意,很容易与廉价存储/托管上的第二个注册表推送一切副本(即不是你宝贵的ssd's。

我从来没有看到过要求保留所有开发版本的要求。保留通常遵循您的开发/发布周期。您很少需要访问当前版本+下一版本中的dev版本。只需记住LABEL +标签开发适当的构建,以便清理简单。 -dev -snapshot -alpha.0无论如何。

  

他们不会占用大量空间(1GB +)吗?

It's normally less than you think但是,他们可以在您的应用程序之上使用操作系统映像。这就是为什么许多人从alpine开始,因为它与大多数发行版相比很小,只要你没有与musl libc不相容的东西。