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