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

正在build设Docker镜像的人们 – 随着时间的推移如何pipe理不同的版本?

  1. 他们都有自己的标签吗? 你是基于git散列标签吗?
  2. 过了一段时间你会删除旧图像吗? 不要占用大量的空间(1GB +)吗?

如何随着时间的推移pipe理不同的版本?

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

他们都有自己的标签吗? 你是基于git散列标签吗?

如果你需要一些独特的东西来引用每一个版本,只需使用图像sha256总和。 如果你想附加额外的构build元数据到一个图像,使用前面提到的LABEL ,并包括git散列和任何你想要的版本控制系统。 如果使用sha256总和听起来很难,标签仍然需要引用多个图像发布,所以你将需要一些系统。

Git标签,date时间,内部版本号都可以工作。 每个人都有自己的优点和缺点取决于你的环境和你正在试图把它们联系在一起的“释放”。 值得注意的是,一个Docker镜像可能来自一个使用git hash的Dockerfile,但是如果你FROM其他地方获取一个镜像,那么从这个git hash构build起来将不会产生一致的镜像。

过了一段时间你会删除旧图像吗?

保留完全取决于您的软件/系统/公司的要求或政策。 我已经看到审计要求很高的环境,这增加了构build/释放保留时间,直到“我想在这个构build上重新运行这些testing”级别。 其他环境审计很less,往往会降低保留要求。 有些地方甚至没有试图强制任何发布pipe理(这是不好的)。 这不能真正回答你的具体环境的人在这里,尽pipe这是一个好主意坚持到最低限度。

基本要求是为每个生产版本储存一个人工制品。 由于历史的原因,这通常是“永远”的。 积极回顾一个或两个以上的版本是非常罕见的(这也取决于你的应用程序),所以档案是一个好主意,容易做到与便宜的存储/托pipe的第二个registry是推动一切的副本(即不在你宝贵的ssd上)。

我从来没有见过要求随着时间的推移保持所有的开发版本。 保留通常在您的开发/发布周期之后。 很less有您需要从您当前的发行版+下一个发行版访问开发版。 只要记住LABEL +标签开发build立适当的清理是很简单的。 -dev -snapshot -alpha.0什么的。

不要占用大量的空间(1GB +)吗?

它通常比你想像的要less,但是对于你的应用程序来说,它们可以很大,你有一个OS镜像。 这就是为什么很多人从高山开始,因为与大多数发行者相比,只要你没有任何与音乐libc不相容的东西,它就是微不足道的 。