Java 应用程序容器化规范
注意:适用于 ACP v3.14.3、v3.16.2、v3.18 及以上版本。
只有在 Java 应用程序使用了 JAVA_TOOL_OPTIONS 环境变量时,必须遵循以下容器化规范,以确保应用程序对 JAVA_TOOL_OPTIONS 环境变量的自定义配置生效。具体而言,在容器平台上部署时,应用程序的 Deployment 应显式声明 JAVA_TOOL_OPTIONS 环境变量。示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-java-app
spec:
template:
spec:
containers:
- env: # 配置示例
- name: JAVA_TOOL_OPTIONS
value: "-Xmx1024m -Xms512m"
name: your-java-app
原因:当 Java 应用程序(Deployment)作为服务添加到平台时(OpenTelemetry 治理),Java Agent 通过将 -javaagent
参数附加到 pod 的 JAVA_TOOL_OPTIONS 环境变量中自动注入,例如 -javaagent:/otel-auto-instrumentation-java/javaagent.jar
。如果以其他方式配置了 JAVA_TOOL_OPTIONS,则可能会覆盖此设置。
Java 应用程序容器化规范(旧版)
注意:适用于上述新规范以外的 ACP 版本。
为了确保平台的治理能力可以有效应用于您的 Java 应用程序,请在开发和构建过程中遵循以下 Java 应用程序容器化规范:
基础镜像选择
建议使用 JDK 8u212 或更高版本作为基础镜像。
Dockerfile 模板
请参考本文档中提供的 Dockerfile 模板和说明,并相应地修改您 Java 应用程序项目中使用的 Dockerfile 文件。
Dockerfile 模板如下:
FROM eclipse-temurin:8-alpine
VOLUME /tmp
# 设置容器的时区,添加管理员账户,并创建其主目录。
# 注意:设置时区的指令可能因基础镜像的操作系统而异。
# 注意:此步骤需要访问互联网以下载依赖项。如果您在隔离的内部网络中,请考虑使用公共基础镜像以完成此步骤。
RUN apk update \
&& apk add --no-cache tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& adduser -D admin
# WORKDIR 指令使在后续指令中使用相对路径更为便捷,以简化脚本。
WORKDIR /home/admin/
# 出于安全考虑,请使用非 root 账户,以避免运行诸如 apt-get 的命令。
USER admin
# COPY --chown 选项消除了再次运行 chown 的需要。
# 注意:确保 start.sh 具有可执行权限。
COPY --chown=admin:admin start.sh \
target/app.jar \
/home/admin/
# 通过执行脚本启动容器。
ENTRYPOINT ["./start.sh"]
Dockerfile 模板中引用的 start.sh 脚本内容如下。请将脚本文件保存在与 Dockerfile 相同的目录中。
#!/bin/sh
# -e 如果某个命令以非零状态退出,则立即退出。
# -x 显示命令及参数,在执行时显示。
set -ex
# 使用 JAVA_OPTS 环境变量的值作为 JAVA 服务的启动参数,在运行时自动用当前环境中的 JAVA_OPTS 环境变量的值替换。
# 使用 exec,使 Java 程序能够接收 SIGTERM 信号。
exec /usr/bin/java ${JAVA_OPTS} \
-Djava.security.egd=file:/dev/./urandom \
-jar /home/admin/app.jar ${RUN_ARGS} "$@"