我正在使用docker容器化我们的基于spring启动微服务的应用程序。
当我试图写docker镜像时,我注意到基本操作系统。
使用docker hub的官方映像将docker容器部署到生产环境的行业标准是什么?
如:oracle/开放jdk
官方图片会关注漏洞和修复吗?…我们是否也需要注意基础操作系统中的漏洞?
注意:我们定期在主机操作系统上执行操作系统补丁
<OS"Docker镜像所基于的只是用户域的东西,所以不是传统意义上的操作系统。你无法比较不保持一个完全更新的风险与不保持一个真正的操作系统完全更新的风险。>
在任何情况下:减轻您的担忧的一种方法是使用由谷歌推荐的无失真图像。原因是您的应用程序是基于java的,它并不真正需要来自任何Linux发行版的所有用户域的东西。
使用分布式镜像的另一个优点是Docker镜像的大小变得小得多。
google已经写了一些关于他们如何保持他们的分布式Docker镜像更新的话。谷歌将他们的图像建立在Debian上。您可能想知道为什么这里提到了一个基本的操作系统,在这个例子中是Debian,同时声称镜像是"无损的"。Java应用程序不需要Shell,也不需要来自操作系统的任何可执行文件。它不需要grep
,find
等等。然而,它确实需要某些OS库在那里。这些库需要来自某个地方,在这种情况下,谷歌选择了Debian。对于您作为映像的消费者来说,它是Debian是完全无关的。
请记住,如果您的Java应用程序实际上主动接触操作系统(通过从Java内部调用外部操作系统命令),那么您就不能使用非分布式策略。但是,很少有Java应用程序这样做,而且大多数Java开发人员会认为这是一种反模式,因为它违反了WORA原则。
总而言之—对于您所描述的场景—我会使用Google的Distroless图像,而不是使用官方的openjdk图像。