Спецификация контейнеризации Java-приложений
Примечание: Применимо к версиям ACP v3.14.3, v3.16.2, v3.18 и выше.
Только если Java-приложение использует переменную окружения JAVA_TOOL_OPTIONS, необходимо следовать следующим спецификациям контейнеризации, чтобы обеспечить применение конфигурации переменной окружения JAVA_TOOL_OPTIONS. В частности, при развертывании на контейнерной платформе, развертывание приложения должно явно объявить переменную окружения 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-приложение (Развертывание) добавляется на платформу в качестве сервиса (управление OpenTelemetry), агент Java автоматически внедряется путем добавления параметра -javaagent
в переменную окружения pod JAVA_TOOL_OPTIONS
, например, -javaagent:/otel-auto-instrumentation-java/javaagent.jar
. Это может быть переопределено, если переменная JAVA_TOOL_OPTIONS настроена каким-либо иным способом.
Спецификация контейнеризации Java-приложений (Старая)
Примечание: Применимо к версиям ACP, отличным от указанных новых спецификаций.
Чтобы обеспечить эффективное применение возможностей управления платформы к вашим Java-приложениям, пожалуйста, следуйте следующей спецификации контейнеризации Java-приложений в процессе разработки и сборки:
Выбор базового образа
Рекомендуется использовать версии JDK 8u212 или более поздние в качестве базового образа.
Шаблон Dockerfile
Пожалуйста, ознакомьтесь с шаблоном Dockerfile и инструкциями, приведенными в этом документе, и соответственно измените файл Dockerfile, используемый в вашем проекте Java-приложений.
Шаблон 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"]
Содержимое скрипта start.sh, на который ссылается шаблон Dockerfile, выглядит следующим образом. Пожалуйста, сохраните файл скрипта в той же директории, что и 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} "$@"