Базовый образ Docker с Tomcat + Spring-Boot и механизмом совместного использования конфигурации - PullRequest
0 голосов
/ 09 марта 2019

Я новичок в докере, ищущий идеи.

Для случая использования, когда мне нужно использовать tomcat в качестве сервера приложений, а поверх него добавить собственный код весенней загрузки и сделать его контейнером.Должен ли я делать это с использованием многоэтапного механизма сборки докера?

Можно ли иметь базовый образ Tomcat, а затем образ весенней загрузки поверх него.ИЛИ просто поместите загрузочный код пружины в образ tomcat и используйте его в контейнере?

Также у меня есть сценарий использования, в котором код пружинной загрузки должен будет подключаться к внешней БД (внешний образ), и я хочу узнать лучший способ подключенияСтратегия пула, так как я хочу, чтобы соединения управлялись централизованно.

Две идеи: во-первых, использовать тома докера, так как я не хочу, чтобы команда каждый раз использовала параметры конфигурации / переменные среды?Второе - иметь пул соединений на каждый док-контейнер, поэтому общее количество соединений делится на работающий контейнер (это рискованно, поскольку автоматическое масштабирование будет выполняться с использованием Kubernetes)

1 Ответ

1 голос
/ 09 марта 2019

У вас есть несколько вопросов здесь - я начну с самого центрального.

Развертывание приложений Spring Boot в док-контейнере

Если вы развертываете приложения Spring Boot в док-контейнерах, тогда действительно нет необходимости использовать tomcat изображение.Вам просто нужна среда выполнения Java в вашем образе, поскольку с Spring Boot вы можете встроить веб-сервер в ваш толстый .jar.

Вы должны использовать spring-boot-starter-web в своем проекте, это будет встроить веб-сервер:

Пример Maven с spring-boot-starter-web - 2.1.3.RELEASE

Добавьте эту зависимость в ваш pom.xml (Пусть spring управляетмежду прочим, это только последняя ссылка, которую я здесь привожу):

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

С этим ваш Dockerfile станет намного проще:

Dockerfile

FROM openjdk:8-jdk-alpine
COPY build/libs/myfatjar.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

Проверьте это руководство по адресу spring.io , оно подробно рассматривается в процессе и описывает ваши варианты.

Многоступенчатая сборка докера дляПриложение Spring Boot?

Я бы сказал, что делать это практически нечего.Я нарисую здесь несколько общих сценариев:

  • Создайте толстый кувшин на своем компьютере разработчика, а затем создайте образ там же.Вставьте образ в реестр и разверните его оттуда.
  • Используйте образ докера для локального построения приложения, затем локально создайте образ приложения, отправьте в реестр и разверните.
  • Если выиспользуя Jenkins, GitLab или какой-либо другой механизм для создания вашего образа, они будут отвечать за создание приложения и конечного образа докера в одном конвейере.Нет необходимости в многоступенчатой ​​сборке.

Если у вас нет чего-то конкретного, что требует от вас создания образа приложения на основе другого изображения, я не могу его идентифицировать.

Подключение к нескольким базам данных изприложение Spring Boot

Это в принципе не проблема.Хотя считается сомнительной практикой просто ссылаться на внешний контент в ответе - я сделаю это здесь.Проверьте эту статью Baeldung о нескольких базах данных .

Я не уверен, что вы подразумеваете под тем, что вы хотите, чтобы соединения управлялись централизованно?Требуется ли управлять подключениями к базам данных вне контекста приложения Spring Boot?Это устаревшая школа мысли, по моему мнению, по крайней мере, когда речь идет о Spring Boot.

Но если вы имеете дело с несколькими приложениями Spring Boot, которые подключаются к одной и той же базе данных - тогда вам следует рассмотреть настройку распределенного кэша.,Например, Hazelcast , Infinispan или Memcached .

Связывание томов докера в контейнере приложения Spring Boot, для настройки

Ну, я думаю, я понимаю, о чем вы здесь говорите.Обычно предпочтительный способ внедрения конфигурации в докер-контейнер и в приложение Spring Boot - это использование переменных среды.Или конфиг Spring Cloud.Переменные среды здесь особенно хороши, потому что с ними можно параметризовать контейнер, и их можно использовать непосредственно в файлах свойств, загружаемых приложением Spring Boot.И найдите их прямо в ваших @Value аннотированных полях.

Тем не менее, для настройки микросервиса с появлением новых экземпляров службы время от времени, и нужно найти их конфигурацию - я бы посоветовал вам изучить Конфигурация Spring Cloud .

С помощью Spring Cloud cofig вы, по сути, вводите новую настройку в вашу установку, которая отвечает за размещение конфигурации ваших служб.Эта служба сама по себе является док-контейнером и приложением Spring Boot.И другие ваши приложения Spring Boot будут легко использовать его.

Итак, в общем, я бы посоветовал не начинать возиться с внедрением конфигурации, монтируя ее в контейнеры в томе докера.

Надеюсь, я ответил на все ваши вопросы?В противном случае дайте мне знать в комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...