【问题标题】:Best practice for maintainig container base OS [closed]维护容器基础操作系统的最佳实践 [关闭]
【发布时间】:2021-05-31 07:51:44
【问题描述】:

我正在努力使用 docker 将我们基于 Spring Boot 微服务的应用程序容器化。

在尝试编写 docker 映像时,我注意到了基本操作系统。

使用来自 docker hub 的官方镜像将 docker 容器部署到生产环境的行业标准是什么。

例如:oracle/open jdk

官方镜像会注意漏洞和修复吗?...我们是否也必须注意基础操作系统中的漏洞?

注意:我们会定期在主机操作系统中执行操作系统补丁

【问题讨论】:

    标签: java docker kubernetes containers


    【解决方案1】:

    Docker Image 所基于的“操作系统”只是用户领域的东西,所以并不是传统意义上的真正的操作系统。您无法将不保持完全更新的风险与不保持真正的操作系统完全更新的风险进行比较。

    无论如何:减轻您的担忧的一种方法是使用 Google 推荐的distroless image。原因是您的应用程序是基于 Java 的,它并不真正需要来自任何 Linux 发行版的所有用户级内容。

    使用 distroless 映像的另一个优点是 Docker 映像的大小变得更小。

    Goggle 写了一个few words,介绍了他们如何更新他们的无发行版 Docker 镜像。 Google 将他们的图像基于 Debian。您可能想知道为什么提到了一个基本操作系统,在这种情况下是 Debian,同时声称该映像是“无发行版”的。嗯,Java 应用程序不需要 Shell,也不需要来自操作系统的任何可执行文件。它不需要grepfind 等等。但是,它确实需要某些操作系统。这些库需要来自某个地方,在这种情况下,谷歌选择了 Debian。对于您作为图像的消费者来说,它是 Debian 完全无关紧要。

    请记住,如果您的 Java 应用程序实际上主动接触操作系统(通过 calling 来自 Java 内部的外部操作系统命令),那么您不能使用 distroless 策略。但是很少有 Java 应用程序会这样做,大多数 Java 开发人员会认为它是一种反模式,因为它违反了WORA 原则。

    总而言之 - 对于您描述的场景 - 我会使用 Google 的 Distroless 图像,而不是使用官方的 openjdk 图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2012-11-07
      • 1970-01-01
      相关资源
      最近更新 更多