如何将 Java 10 放入 Docker 容器中?

在上一篇文章中,我一直在讨论如何使用Java 10来构建和运行Spring Boot应用程序。现在是时候讨论如何将它放入Docker容器中了。更好地支持容器化是Java 10发行版的主要特性之一。所以,让我们开始吧!

这是一个非常简单的过程,因此,请看以下代码片段:

FROM debian:9-slim AS builder

RUN set -ex && \
    apt-get update && apt-get install -y wget unzip && \
    wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz -nv -O jdk.tar.gz -nv && \
    mkdir -p /opt/jdk && \
    tar zxvf jdk.tar.gz -C /opt/jdk --strip-components=1 && \
    rm jdk.tar.gz && \
    rm /opt/jdk/lib/src.zip

RUN /opt/jdk/bin/jlink \
    --module-path /opt/jdk/jmods \
    --verbose \
    --add-modules java.base,java.logging,java.xml,jdk.unsupported,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument \
    --output /opt/jdk-minimal \
    --compress 2 \
    --no-header-files

# Second stage, add only our custom jdk9 distro and our app
FROM debian:9-slim
COPY --from=builder /opt/jdk-minimal /opt/jdk-minimal

ENV JAVA_HOME=/opt/jdk-minimal
ENV PATH="$PATH:$JAVA_HOME/bin"
ENV APP_TIMEZONE=UTC

EXPOSE 8080
ENTRYPOINT ["/launch.sh"]
COPY launch.sh /
RUN chmod +x /launch.sh

COPY build/libs/you-app.jar /app.jar
正如您所看到的,在这里我使用了多阶段Docker构建文件。 快速说明:支持多阶段构建Docker 17.05或更高,但结果图像向后兼容(至少从我的经验来看)。 在第一个阶段中,它从Oracle下载JDK,但是将自己的副本存储在离构建服务器更近的地方是有意义的,因为它不是那么小——比200mb小一点点。因此,它被下载、解压缩并准备好使用。但没那么快。
 
您可能还记得,Java 9给了我们模块系统JDK本身也是模块化的。 这意味着我们不必携带全部JDK投入生产,但我们可以根据我们的应用程序的需求专门构建自己的条带化版本。 为此提供了jlink工具。 只是看看它在构建过程中是如何使用的。 列出的模块应该足以运行典型的spring boot应用。 在生产案例中,我还必须将java.scripting、jdk.scripting.nashorn放在列表中。

在第二阶段,它复制上一个的结果,定义一些环境变量和公开端口,复制launch.sh和应用程序的工件。 根本不是火箭科学。

这是我刚才提到的launch.sh脚本:

#!/bin/bash

check_var(){
  if [ -z "$1" ]; then
    >&2 echo "error: missing environmental variable $2. exit"
    exit 1
  fi
}

check_var "${JAVA_XMS}" "JAVA_XMS"
check_var "${JAVA_XMX}" "JAVA_XMX"
check_var "${APP_TIMEZONE}" "APP_TIMEZONE"

XMS=${JAVA_XMS:-none}
XMX=${JAVA_XMX:-none}
TIMEZONE=${APP_TIMEZONE:-none}

JAVA_OPTS="-Xmx${XMX} -Xms${XMS} -Duser.timezone=${TIMEZONE} -Dspring.profiles.active=${SPRING_PROFILES_ACTIVE} ${OPTIONS}"

java ${JAVA_OPTS} -jar /app.jar

那只是确保提供所有重要内容的小帮手等等。但是,可以肯定的是,它是可选的。

这应该足以让你的应用程序投入生产。请写下你的意见,如果你有一些想法如何使它更好!

原文链接: https://dev.to//gimlet2/dockerizing-java-10-spring-boot-app-3b4c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值