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

stw*_*sel 3 java nginx docker alpine-linux

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

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

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

或者是否可以选择组合 2 张图像(这是个好主意)。

见解表示赞赏。

val*_*ano 6

要创建组合图像,您可以遵循以下任一建议路径:

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

第二种方法是首选,因为您从已知良好的图像开始,而不必从头开始。另外,您可能只需要很少的更改。为此,两个图像应该共享一个共同的基本图像,alpine例如。

检查 Nginx 和 Java OpenJDK Dockerfiles,您会发现Nginx Dockerfile相当复杂,有许多先决条件包和设置步骤,因此它更适合基本映像。我的建议是,从 Nginx 基础镜像开始,在上面添加 Java。

OpenJDK Java 7、8(稳定版)以及 9 和 10(实验版)已经在 Alpine 存储库中可用。如果对特定 Java 实现没有硬性要求,并且您对 OpenJDK 8 感到满意,那么您的组合Dockerfile可能非常简单:

FROM nginx:alpine

RUN apk add openjdk8
Run Code Online (Sandbox Code Playgroud)

如果您需要特定的 Java 版本,而该版本在 Alpine 存储库中不可用,通常只需下载压缩的 Alpine Java 发行版并解压并进行JAVA_HOME相应设置即可。例如,请参阅 OpenJDK 13 Alpine Dockerfile