• Русский
  • Спецификация контейнеризации 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: # Configuration examples
                - name: JAVA_TOOL_OPTIONS
                  value: "-Xmx1024m -Xms512m"
              name: your-java-app

    Причина: когда Java-приложение (Deployment) добавляется на платформу в качестве сервиса (OpenTelemetry governance), Java Agent автоматически внедряется путем добавления параметра -javaagent в переменную среды JAVA_TOOL_OPTIONS pod, например -javaagent:/otel-auto-instrumentation-java/javaagent.jar. Это может быть переопределено, если JAVA_TOOL_OPTIONS настроена каким-либо другим способом.

    Спецификация контейнеризации Java-приложений (старая) {#java-old}

    Примечание: Применимо к версиям ACP, отличным от новых спецификаций, указанных выше.

    Чтобы обеспечить эффективное применение возможностей управления платформы к вашим Java-приложениям, в процессе разработки и сборки следуйте приведенной ниже спецификации контейнеризации Java-приложений:

    Выбор базового образа

    Рекомендуется использовать в качестве базового образа версии JDK 8u212 или более поздние.

    Шаблон Dockerfile

    Пожалуйста, ознакомьтесь с шаблоном Dockerfile и инструкциями, приведенными в этом документе, и соответствующим образом измените файл Dockerfile, используемый в проекте вашего Java-приложения.

    Шаблон Dockerfile приведен ниже:

    FROM eclipse-temurin:8-alpine
    
    VOLUME /tmp
    
    # Set the container's timezone and add the admin account, also create its home directory.
    # Note: The instruction to set the timezone may vary depending on the OS of the base image.
    # Note: This step requires accessing the internet to download dependencies. If you are in an isolated internal network, consider using a public base image to complete this step.
    RUN apk update \
        && apk add --no-cache tzdata \
        && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && echo "Asia/Shanghai" > /etc/timezone \
        && adduser -D admin
    
    # The WORKDIR instruction makes it easier to use relative paths in subsequent instructions to simplify the script.
    WORKDIR /home/admin/
    
    # For security reasons, use a non-root account to avoid running commands like apt-get.
    USER admin
    
    # The COPY --chown option eliminates the need to run chown again.
    # Note: Ensure that start.sh has executable permissions.
    COPY --chown=admin:admin start.sh \
         target/app.jar \
         /home/admin/
    
    # Start the container by executing the script.
    ENTRYPOINT ["./start.sh"]

    Содержимое скрипта start.sh, на который ссылается шаблон Dockerfile, приведено ниже. Пожалуйста, сохраните файл скрипта в том же каталоге, что и Dockerfile.

    #!/bin/sh
    
    # -e Exit immediately if a command exits with a non-zero status.
    # -x Display commands and their arguments as they are executed.
    set -ex
    
    # Use the value of the JAVA_OPTS environment variable as the startup parameter for the JAVA service, automatically replacing it with the value of the JAVA_OPTS environment variable in the current environment at runtime.
    # Use exec so that the Java program can receive the SIGTERM signal.
    exec /usr/bin/java ${JAVA_OPTS} \
         -Djava.security.egd=file:/dev/./urandom \
         -jar /home/admin/app.jar ${RUN_ARGS} "$@"