當(dāng)需要運行Java應(yīng)用時,不管在機(jī)器上還是容器里,一般的做法是運行 java 命令。
java -jar /opt/app.jar
即可
如果是多多jar 文件的只需用到java -cp lib/* com.example.Main
定類路徑(classpath)和入口 Java 類即可。
但 在構(gòu)建容器鏡像時,一般使用 Dockerfile 的 ENTRYPOINT 來指定運行的 java 命令。ENTRYPOINT [ "java", "-jar", "/opt/app.jar" ]
直接使用 java 命令的做法,在容器運行時并不靈活。如果想使用 -D 參數(shù)來添加新的系統(tǒng)屬性,就必須要修改 Dockerfile 中的ENTRYPOINT 定義。這就意味要創(chuàng)建新的鏡像,使用起來非常的不方便。
使用 run-java.sh 在容器中 啟動Java
腳本地址 run-java.sh
基本用法 (readme.md)
第一類與Java應(yīng)用相關(guān)。
JAVA_APP_DIR
設(shè)置應(yīng)用文件的根目錄,默認(rèn)為 run-java.sh 所在的目錄。
JAVA_APP_NAME
設(shè)置應(yīng)用進(jìn)程的名稱。
JAVA_MAJOR_VERSION
設(shè)置 JVM 的版本號。默認(rèn)從 java -version 命令的輸出中解析。
第二類與 Java 應(yīng)用的 classpath 相關(guān)。
JAVA_CLASSPATH
設(shè)置完整的 classpath。
JAVA_LIB_DIR
設(shè)置作為庫的 JAR 文件的目錄。默認(rèn)為 JAVA_APP_DIR 的值。
JAVA_APP_JAR
設(shè)置可執(zhí)行的 JAR 文件的路徑。
JAVA_MAIN_CLASS
設(shè)置入口類的名稱。
第三類與Java運行的參數(shù)相關(guān)。
JAVA_OPTIONS
設(shè)置額外的參數(shù)。
第四類與運行的內(nèi)存和 CPU 相關(guān)。
JAVA_INIT_MEM_RATIO
設(shè)置起始的 heap 尺寸占全部內(nèi)存的比例。轉(zhuǎn)換成參數(shù) -Xms。值 20 表示 20%。
JAVA_MAX_MEM_RATIO
設(shè)置最大的 heap 尺寸占全部內(nèi)存的比例。轉(zhuǎn)換成參數(shù) -Xmx。值 50 表示 50%。
JAVA_MAX_CORE
設(shè)置最大的 CPU 核數(shù)。
第五類與調(diào)試相關(guān)。
JAVA_DEBUG
啟用遠(yuǎn)程調(diào)試。
JAVA_DEBUG_SUSPEND
以暫停模式啟用遠(yuǎn)程調(diào)試。
JAVA_DEBUG_PORT
設(shè)置遠(yuǎn)程調(diào)試的端口。默認(rèn)為 5005。
第六類與 HTTP 代理相關(guān)。
HTTP_PROXY
設(shè)置 HTTP 代理。轉(zhuǎn)換成 Java 的系統(tǒng)屬性 http.proxyHost 和 http.proxyPort。
HTTPS_PROXY
設(shè)置 HTTPS 代理。轉(zhuǎn)換成 Java 的系統(tǒng)屬性 https.proxyHost 和 https.proxyPort。
NO_PROXY
設(shè)置不使用代理的主機(jī)名。轉(zhuǎn)換成 Java 的系統(tǒng)屬性 http.nonProxyHosts。
最后一類與應(yīng)用診斷相關(guān)。
JAVA_DIAGNOSTICS
啟用輸出額外的診斷信息。
舉例
就拿 國內(nèi) 比較火的 開源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"]
定義環(huán)境變量文章來源:http://www.zghlxwxcb.cn/news/detail-616822.html
JAVA_APP_DIR=/deployments
JAVA_MAJOR_VERSION=11
JAVA_OPTIONS=-Dfile.encoding=utf-8
JAVA_APP_JAR=/opt/apps/backend-1.18.9.jar
容器內(nèi)啟動命令為文章來源地址http://www.zghlxwxcb.cn/news/detail-616822.html
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
到了這里,關(guān)于如何在 容器中 優(yōu)雅的 運行 java 應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!