我如何处理我的docker集装箱中的安全更新?

我们希望避免在dockerfiile中包含“yum update”,因为它可能会根据Docker镜像的构build时间生成不同的容器,但显然如果需要更新基础系统,这可能会造成一些安全问题。 最好的select是真的有一个组织基础系统的形象和更新? 问题就在于,每次应用安全更新时,都需要在整个组织中重build和部署所有应用程序。

对我来说这似乎有点不同,只是简单地忽略容器中的安全更新,而只是担心主机上的安全更新。 这里的思考过程是,攻击者进入一个容器,需要在主机上有一个漏洞,docker-engine中的另外一个漏洞进入容器,然后有一个额外的漏洞来利用容器,这似乎是一个令人难以置信的系列事件。 通过引入用户命名空间和seccompconfiguration文件,这似乎进一步降低了风险。

无论如何,我如何处理容器内的安全更新,对CI / CDpipe道的影响最小,或者最好不必每隔一段时间重新部署整个基础架构?

通过引入中间更新层,可以减less构build的不可重复性。

创build一个图像,如:

FROM centos:latest RUN yum update -y 

build立图像,标记并推送它。 现在你的构build不会改变,除非你决定改变它们。

您可以将您的其他Docker文件指向myimage:latest一旦您决定这样做,或者指向一个特定版本, myimage:latest会自动更新。

我设置CI系统的方式是,使用更新成功(手动)构build基础映像会触发依赖于其的所有映像的构build。

安全问题得到报告? 检查更新的软件包是否可用,或者在Dockerfile中进行临时修复。 触发构build。 有一段时间,你将有固定版本的所有应用程序准备好部署。

大多数主要发行版都会经常发布一个新的基本映像,其中包含必要的最新关键更新和安全修复程序。 这意味着您可以简单地拉取最新的基础图像来获取这些修复并重build您的图像。

但是也因为你的容器使用yum,你可以利用yum来控制你更新的包。 Yum允许你设置一个发布版本,所以你可以把你的更新固定到特定的操作系统版本。

例如,如果您使用的是RHEL 7.2,则可能有一个Dockerfile,其格式如下所示:

 FROM rhel:7.2 RUN echo "7.2" > /etc/yum/vars/releasever RUN yum update -y && yum clean all 

这确保您将保持在RHEL 7.2上,即使您进行了全面的yum更新,也只能收到关键的软件包更新。

有关可用yumvariables或其他configuration选项的更多信息,请查看“yum.conf”手册页。

另外,如果你需要更细致的控制更新,你可以看看'yum-plugin-versionlock'包,但是这可能会超出你的需求。