Спецификация контейнеризации Java-приложений

Примечание: применимо к ACP v3.14.3, v3.16.2, v3.18 и выше.

Только при использовании Java-приложением переменной окружения JAVA_TOOL_OPTIONS необходимо соблюдать следующие спецификации контейнеризации, чтобы обеспечить применение собственной конфигурации переменной окружения JAVA_TOOL_OPTIONS приложения. В частности, при развертывании на Container Platform 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 и инструкциями, приведёнными в этом документе, и измените Dockerfile, используемый в вашем Java-проекте, соответственно.

Шаблон 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"]

Содержимое скрипта 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} "$@"