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 会自动注入,通过在 pod 的 JAVA_TOOL_OPTIONS 环境变量中追加 -javaagent
参数,例如 -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
# 设置容器时区并添加 admin 管理账户,同时创建其家目录。
# 注意:设置时区的指令可能因基础镜像操作系统不同而有所差异。
# 注意:此步骤需要联网下载依赖包,若处于隔离内网环境,请考虑使用公共基础镜像完成此步骤。
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} "$@"