跟上Docker官方图像

2021-06-09 01:00:10

我们使用Docker官方图像作为我们的几个服务的基础图像。它'一个受欢迎的选择,有很好的理由。专门的团队在Docker中审查了他们,并由各自社区的专家积极维护,包括安全社区。

当我们第一次开始构建这些图像时,我们努力集成用于释放到社区的修复程序的过程。我可以将问题归结为两个高级桶:

我们缺少安全性和错误修复。缺少,我的意思是我们快速使用它们,或者我们申请它们。

我们的建造是神秘的。也许所有的构建破坏都是神秘的,但这堂课的破损真的很奇怪!

它是' t'潮流的斑点。维护者们做得很好。事实证明,我们需要更好的方法来管理我们的Dockerfiles。我们需要一个可以利用可靠流入的安全性和错误修复的码头策略。这是我们完全缺少的东西。

在真实的事情中地接地,我们' ll使用官方OpenJDK图像作为EX。课程适用于任何图像存储库(例如Debian,Node,Nginx或Redis)。

让' s从进修开始如何编制图像并比较这两个名称:

在撰写本文时,这两个指同样的事情。在阅读时,他们很可能不会。图像的维护者一直在移动标签。从某种意义上说,他们所做的一切。今天,OpenJDK:11-JRE-Slim-Buster可能指出OpenJDK @ SHA256:46285DCF00260440E00DCB68B5432CBED8F5FEA734470BE6FFB8AC7CC052024B,但然后发布安全修复,并在新的摘要中移动点。

知道何时使用每种类型的名称可能会令人困惑。我的同事们在这个主题上写了一个很好的帖子。关键的外卖是具有摘要的图像名称(例如,包含SHA256的人:....)非常适合构建,部署和任何其他应该是可重复的过程。另一方面,当你试图跟上变化时,带标签的图像名称很大。但我们如何结合这两件事?我们如何实现重复性而不会失去保持最新的好处?

官方图像的维护者通过更新(推送)标签来修复修复。我们发现它有助于为自己揭开这个过程,所以我' LL快速审查这实际上有效。

对于官方图像图书馆,所有动作都在开放中发生。任何人都可以在GitHub上的Docker官方图像库中遵循。每个官方图像在此目录中映射到库。例如,OpenJDK库在此处维护。

每次构建新图像清单的标签(示例:Debian OpenJDK 11 Build)

这告诉我们在哪里寻找Dockerfile,该标签用于推动新的构建,并通过该清单支持哪种平台架构。请注意,这些标签都一起移动。您可以将它们视为别名(如果您'曾经想过为什么有这么多的标签似乎在同一件事中,这里有原因!)

如果我们遵循Gitcommit和目录,我们' ll找到此特定OpenJDK图像的当前Dockerfile。观看这些存储库的自动化执行Docker构建,并按下生成的标签,是一组维护的Jenkins作业。在这里为OpenJDK的作业&#39。

所以它的本质和#39;这一切如何结合在一起。幸运的是,我们不需要在这个级别与这些系统互动。

我们只需要知道标签何时移动,因为它恰好在我们落后时。

在上面的图中,我们观看了11-JRE-Slim-Buster标签。从基础Debian图像或OpenJDK分发的某些东西已更新。在这种特殊情况下,它是一个OpenJDK补丁,其中释放了新版本11.0.11_9。维护者将更新推动到Github repo,自动化启动,标签被推动。它现在要点新的清单。

在博客的开始时,我谈到了两个问题 - 随机构建破坏和缺少重要修复。这些问题沸腾了我们如何命名事物以及我们如何跟踪外部更改。我们需要引入具有以下特征的政策:

在您的回购中观看所有Dockerfiles。只要从线引用标记时,提高拉出请求。用摘要替换标签(在钉扎上阅读更多)。这使得我们在代码中被检查的构建重复。

继续观看这些标签。当它们移动时,提高拉动请求以更新摘要。这确保了我们落后于&#39。

为Dockerfiles看,突然发现自己使用不再支持的标签。通知所有者(我们建议失败了GitHub CheckRun)

这些项目共同努力,形成一个策略,以保持关键修复(特别是与安全相关的修复)。第一个项目有用,但它可以独自工作。如果你'重新加入一些东西,你需要知道何时移动它。为此,可能比拉动请求更好吗?

除了从线路更新外,拉出请求包括来自维护者的变更日志以及当前和所提出的基础图像之间的比较。我们的Pull请求还具有漏洞数据,以提供开发人员的其他上下文来评估更改。它很重要的是要知道这一变化还会消除漏洞。所有这些都被呈现为拉请求评论。

从Docker官方图像Readme.md中拉出此报价。报价实际上进入了添加"与......"但仍然是一个重要的观点。您的基础图像本身可能具有基本图像。例如,当我选择一个像11-JRE-Slim-Buster这样的OpenJDK图像标记时,我不仅仅选择了OpenJDK的主要版本。我也选择了稳定的Debian版本(也可以使用尽可能少的包装中的SLIM版本的'

这种Debian的分布可能被称为"稳定",但修复仍然流入。它' sa bit令人困惑,我们通过更新OpenJDK映像来接收我们的Debian修复,但这只是它的方式。在未来,我们可能会发现自己更多地与分类图像工作。目前,这些嵌套修复程序只是进一步突出了保持最新的必要性。

官方形象的维护者正在做好工作。当我们首次开始构建这个码头政策时,我们的幕后活动有多少活动感到惊讶。然后,一旦我们打开了政策,我们每月看到几个更新。

它'知道我们在坚实,维护良好的图像上建造我们的良好的信心感。我们知道我们在重要的修复推出时逃离落后于落后。

如果您想尝试我们的新Docker策略,您可以通过安装我们的GitHub应用程序来获得早期访问并在您的Repos上启用它。请记住,这是早期访问,我们每天都会收集反馈,以使其更好,以及您的意见和意见事项。让我们知道你的想法 - 我们渴望收到你的来信。

获取您需要完成最佳工作并提供优秀的软件所需的知识和灵感。