Спецификация контейнеризации 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} "$@"