Динамическое управление Dockerfile для разных клиентов в реализации конвейера CI/CD




(2)

Я пытаюсь реализовать конвейер CI / CD для моего проекта, используя Docker, Kubernetes и Jenkins. Мое приложение мультитенантное, в котором переменные приложения базы данных различны для разных арендаторов.

Стратегия применения

Когда я создаю образ докера, я использую Dockerfile. И я храню свой Dockerfile в своем хранилище кода SVN. Для каждого арендатора хранилище кода одинаково. Когда я создаю образ, мне нужно создавать разные образы для разных арендаторов.

Реализация Dockerfile

В моем файле Docker я добавляю точку входа, как показано ниже,

ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]

Если мне нужно создать образ Docker для другого арендатора, нужно добавить
-Dspring.profiles.active=tenant2config

Таким образом, точка входа в Dockerfile является динамической.

Моя путаница

  1. Для управления точкой входа команда внутри Dockerfile возможна динамически?
  2. Или мне нужно добавить еще один Dockerfile для другого арендатора? И нужно запустить команду сборки docker отдельно для отдельного арендатора?

Как мне найти хороший стандартный способ реализации этой проблемы?


Refer - Лучшие практики Dockerfile

ENTRYPOINT помогает настроить контейнер для запуска в качестве исполняемого файла, который может принимать аргументы во время выполнения

Любое динамическое свойство, которое вы хотите переопределить, может быть выполнено во время выполнения с тем же образом.

Вы можете передать необходимый аргумент во время выполнения.


Вы можете использовать докер ARGS, он будет доступен только во время сборки и может использоваться на входе.

docker build --build-arg CONFIG_FILE=<file_name> -t tag_name .

CONFIG_FILE будет содержать расположение файла конфигурации, и вы можете передать его динамически. Замените вашу точку входа на $CONFIG_FILE

ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=$CONFIG_FILE" , "TestProject.war"]




dockerfile