在 Alpine 上将 Java 添加到 NGINX Docker 或将 NGINX 添加到 Java Docker?

Add Java to an NGINX Docker or add NGINX to a Java Docker on Alpine?

我需要构建一个 Docker 容器(感觉就像一个 N00b),它运行一个 Java 应用程序,前端是一个 nginx Web 服务器。由于不讨论的原因,我需要将它们放在一个容器中。

我想为此使用 Alpine。我发现两个图像都包含安装了 nginx 的 Alpine 和安装了 JDK 的 Alpine。我需要结合两者。

我最好的做法是什么?从 nginx 容器开始并添加 jdk 或从包含容器的 jdk 开始并添加 nginx?

或者是否有组合 2 张图像的选项(这是个好主意)。

不胜感激。

要创建组合图像,您可以按照建议的路径之一进行操作:

  • 使用两个图像的设置步骤创建合并的 Dockerfile,并构建您自己的自定义图像。
  • 创建 Dockerfile 从图像 1(更“复杂”的图像)提取的图像,并添加图像 2 所需的命令。

第二种方法是首选,因为您从 known-good 图像开始,而不必从头开始。另外,您可能只需要很少的改动。为此,两个图像应共享一个公共基础图像,例如 alpine

检查 Nginx 和 Java OpenJDK Dockerfiles,你会发现 Nginx Dockerfile 相当复杂,有许多必备包和设置步骤,所以它会更好适合基本图像。我的建议是,从 Nginx 基础映像开始,并在顶部添加 Java。

如果您对 Alpile 存储库中可用的 JDK 版本感到满意,则您的组合 Dockerfile 可能很简单:

FROM nginx:alpine

RUN apk add openjdk17

如果你需要一个特定的 Java 版本,它在 Alpine 存储库中不可用,通常需要下载压缩的 Alpine Java 发行版并解压它并设置 JAVA_HOME 因此。例如,参见 OpenJDK 13 Alpine Dockerfile.