当需要运行Java应用时,不管在机器上还是容器里,一般的做法是运行 java
命令。
一些 Java 应用会被打包成单个可执行的 JAR 文件,如 Spring Boot 应用。对于这样的 JAR 文件,只需要使用 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
。顾名思义,run-java.sh
是一个 shell 脚本。它的作用是运行Java程序。该脚本可以从 GitHub (fabric8io-images/run-java-sh) 或 Maven 仓库(io.fabric8:run-java-sh:1.3.8)下载。
基本用法
该脚本的特点是可以使用环境变量来配置调用 java
命令时的参数。这些环境变量大致可以分成如下几类&