当需要运行Java应用时,不管在机器上还是容器里,一般的做法是运行 java 命令。
java -jar /opt/app.jar
即可
如果是多多jar 文件的只需用到java -cp lib/* com.example.Main
定类路径(classpath)和入口 Java 类即可。
但 在构建容器镜像时,一般使用 Dockerfile 的 ENTRYPOINT 来指定运行的 java 命令。ENTRYPOINT [ "java", "-jar", "/opt/app.jar" ]
直接使用 java 命令的做法,在容器运行时并不灵活。如果想使用 -D 参数来添加新的系统属性,就必须要修改 Dockerfile 中的ENTRYPOINT 定义。这就意味要创建新的镜像,使用起来非常的不方便。
脚本地址 run-java.sh
JAVA_APP_DIR
设置应用文件的根目录,默认为 run-java.sh 所在的目录。
JAVA_APP_NAME
设置应用进程的名称。
JAVA_MAJOR_VERSION
设置 JVM 的版本号。默认从 java -version 命令的输出中解析。
JAVA_CLASSPATH
设置完整的 classpath。
JAVA_LIB_DIR
设置作为库的 JAR 文件的目录。默认为 JAVA_APP_DIR 的值。
JAVA_APP_JAR
设置可执行的 JAR 文件的路径。
JAVA_MAIN_CLASS
设置入口类的名称。
JAVA_OPTIONS
设置额外的参数。
JAVA_INIT_MEM_RATIO
设置起始的 heap 尺寸占全部内存的比例。转换成参数 -Xms。值 20 表示 20%。
JAVA_MAX_MEM_RATIO
设置最大的 heap 尺寸占全部内存的比例。转换成参数 -Xmx。值 50 表示 50%。
JAVA_MAX_CORE
设置最大的 CPU 核数。
JAVA_DEBUG
启用远程调试。
JAVA_DEBUG_SUSPEND
以暂停模式启用远程调试。
JAVA_DEBUG_PORT
设置远程调试的端口。默认为 5005。
HTTP_PROXY
设置 HTTP 代理。转换成 Java 的系统属性 http.proxyHost 和 http.proxyPort。
HTTPS_PROXY
设置 HTTPS 代理。转换成 Java 的系统属性 https.proxyHost 和 https.proxyPort。
NO_PROXY
设置不使用代理的主机名。转换成 Java 的系统属性 http.nonProxyHosts。
JAVA_DIAGNOSTICS
启用输出额外的诊断信息。
就拿 国内 比较火的 开源BI dataease 举例
Dockerfile
FROM registry.cn-qingdao.aliyuncs.com/dataease/fabric8-java-alpine-openjdk8-jre:edge-chromium-11
ARG IMAGE_TAG
RUN mkdir -p /opt/apps /opt/dataease/data/feature/full /opt/dataease/drivers
ADD mapFiles/* /opt/dataease/data/feature/full/
ADD drivers/* /opt/dataease/drivers/
ADD backend/target/backend-$IMAGE_TAG.jar /opt/apps
ENV JAVA_APP_JAR=/opt/apps/backend-$IMAGE_TAG.jar
ENV AB_OFF=true
ENV JAVA_OPTIONS=-Dfile.encoding=utf-8
HEALTHCHECK --interval=15s --timeout=5s --retries=20 --start-period=30s CMD curl -f 127.0.0.1:8081
CMD ["/deployments/run-java.sh"]
定义环境变量
JAVA_APP_DIR=/deployments
JAVA_MAJOR_VERSION=11
JAVA_OPTIONS=-Dfile.encoding=utf-8
JAVA_APP_JAR=/opt/apps/backend-1.18.9.jar
容器内启动命令为
java -Dfile.encoding=utf-8
-Xmx2048m
-XX:MaxPermSize=1024m
-Xss5m
-XX:+UseParallelGC
-XX:GCTimeRatio=4
-XX:AdaptiveSizePolicyWeight=90
-XX:MinHeapFreeRatio=20
-XX:MaxHeapFreeRatio=40
-XX:+ExitOnOutOfMemoryError
-cp . -jar /opt/apps/backend-1.18.9.jar