У вас есть несколько вопросов здесь - я начну с самого центрального.
Развертывание приложений 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 будут легко использовать его.
Итак, в общем, я бы посоветовал не начинать возиться с внедрением конфигурации, монтируя ее в контейнеры в томе докера.
Надеюсь, я ответил на все ваши вопросы?В противном случае дайте мне знать в комментарии.