Docker является популярной платформой для создания контейнеров — набора стандартизированных модулей программного обеспечения, которые собирают код, среду выполнения, зависимости, настройки и инициализацию в одном пакете, который можно надежно запускать из одной вычислительной среды в другую. Развертывание приложений в виде контейнеров Docker позволяет плавно перемещать приложения в нескольких средах (например, dev, QA, staging, production).
Из этого туториала Вы узнаете, как использовать Docker для развертывания приложения Spring Boot.
Что вам нужно:
- Java 8+: установить с помощью SDKMAN или напрямую из AdoptOpenJDK
- Docker: я рекомендую Docker Desktop
- Бесплатная учетная запись разработчика Okta : подробнее позже
Вы также можете быть заинтересованы в: Spring Boot: Run and Build в Docker
Создать приложение Spring Boot
Вы будете использовать Spring Initializr для создания своего проекта Spring Boot с помощью HTTPie , простого HTTP-клиента командной строки.
Вы можете использовать веб-сайт Spring Initializr напрямую, если не хотите использовать командную строку.
Из командной строки просто введите:
Джава
xxxxxxxxxx
1
http https://start.spring.io/starter.zip \
2
dependencies==web,okta \
3
groupId==com.okta.spring-docker.demo \
4
packageName==com.okta.spring-docker.demo \
5
--download
А затем распакуйте загруженный файл.
Джава
xxxxxxxxxx
1
unzip demo.zip -d spring-boot-docker
2
cd spring-boot-docker
Затем вы добавите веб-контроллер, создав файл src/main/java/com/okta/springdocker/demo/WebController.java
:
Джава
xxxxxxxxxx
1
package com.okta.springdocker.demo;
2
import org.springframework.web.bind.annotation.RequestMapping;
4
import org.springframework.web.bind.annotation.ResponseBody;
5
import org.springframework.web.bind.annotation.RestController;
6
8
public class WebController {
9
"/") (
11
public String home() {
12
return "Welcome!";
13
}
14
}
Вам также необходимо настроить параметры безопасности для этого проекта. На данный момент вы хотите разрешить все запросы, поэтому обновите ваш DemoApplication.java
файл следующим образом:
Джава
xxxxxxxxxx
1
package com.okta.springdocker.demo;
2
import org.springframework.boot.SpringApplication;
4
import org.springframework.boot.autoconfigure.SpringBootApplication;
5
import org.springframework.context.annotation.Configuration;
6
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
7
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
8
10
public class DemoApplication {
11
public static void main(String[] args) {
13
SpringApplication.run(DemoApplication.class, args);
14
}
15
17
static class OktaOAuth2WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
18
20
protected void configure(HttpSecurity http) throws Exception {
21
http.authorizeRequests().anyRequest().permitAll();
22
}
23
}
24
}
Вы можете скомпилировать и запустить ваше приложение с:
Джава
xxxxxxxxxx
1
./mvnw package
2
java -jar target/demo-0.0.1-SNAPSHOT.jar
Тогда, если вы нажмете http://localhost:8080
, вы должны увидеть «Добро пожаловать!» сообщение.
Запустите приложение Spring Boot в качестве Docker-контейнера.
Чтобы запустить ваше приложение в качестве контейнера Docker, первым делом необходимо установить Docker .
После установки самое время собрать свой контейнер. Для этого Docker использует файл, который описывает, как собрать контейнер, который называется Dockerfile
. Dockerfile
Состоит из шага за шагом инструкции для выполнения в контейнере.
Примечание. Обратитесь к справочнику Dockerfile для объяснения всех команд, которые вы можете использовать.
Для вашего приложения Spring Boot вы будете использовать простой Dockerfile
файл:
Примечание . Вы можете просматривать множество контейнеров сообщества, чтобы использовать их в качестве базы на DockerHub .
Теперь вы можете собрать контейнер в командной строке. Выполните следующие действия , замещая okta:spring_boot_docker
с тегом по своему вкусу, он будет служить в качестве имени для ссылки на контейнере вы строите:
Джава
xxxxxxxxxx
1
docker build . -t okta:spring_boot_docker
Если все прошло хорошо, вы можете запустить приложение Dockerized (используя тот же тег, что и раньше):
Джава
xxxxxxxxxx
1
docker run --publish=8080:8080 okta:spring_boot_docker
Чтобы остановить контейнер, нажмите CTRL-C . Убедитесь, что контейнер не запущен, выполните:
Джава
xxxxxxxxxx
1
docker ps
Это перечислит все контейнеры, работающие на вашем компьютере. Если ваше приложение Spring Boot все еще работает, вы можете завершить контейнер с помощью (используйте идентификатор контейнера, напечатанный с помощью docker ps
):
Джава
xxxxxxxxxx
1
docker kill <CONTAINER_ID>
Поскольку ваш JAR-файл копируется в контейнер при его создании, вам нужно будет перестраивать свой контейнер каждый раз, когда вы захотите использовать более новую версию приложения. Таким образом, цикл будет:
- Измени свой код
- Создайте приложение
./mvnw package
- Построить контейнер
docker build . -t okta:spring_boot_docker
- Запустить контейнер
docker run --publish=8080:8080 okta:spring_boot_docker
- Остановить контейнер
- петля
Теперь вы знаете основы использования контейнеров Docker для запуска вашего приложения! В будущем вы можете опубликовать свой встроенный контейнер в реестрах Docker (например, DockerHub), чтобы другие могли получить контейнер, и он будет готов к запуску.
Далее мы защитим приложение с помощью Okta и поймем, как мы можем передавать конфиденциальные данные в контейнер.
Защитите приложение Spring Boot and Docker
Вам понадобится бесплатный аккаунт разработчика в Okta . Okta - провайдер SaaS (программное обеспечение как услуга) для управления идентификацией. Мы упрощаем добавление в ваше приложение таких функций, как единый вход, социальный вход и OAuth 2.0. Зарегистрируйте аккаунт на нашем сайте, если вы этого еще не сделали.
Выполните следующие шаги, чтобы создать приложение OpenID Connect (OIDC).
- Войдите в свою учетную запись разработчика на developer.okta.com.
- Перейдите в Приложения и нажмите Добавить приложение
- Выберите Web и нажмите Next
- Дайте приложению имя (.eg,
Java Spring Boot Docker
) - Добавьте в качестве URI перенаправления входа следующее: http: // localhost: 8080 / login / oauth2 / code / okta
- Нажмите Готово
Okta требует, чтобы некоторые свойства работали правильно, мы отправим их через Docker как переменные окружения.
Изменить DemoApplication
класс, заменив .authorizeRequests().anyRequest().permitAll()
на .authorizeRequests().anyRequest().authenticated()
. Это скажет Spring, что все конечные точки вашего приложения будут требовать аутентифицированного пользователя.
Джава
xxxxxxxxxx
1
2
protected void configure(HttpSecurity http) throws Exception {
3
http.authorizeRequests().anyRequest().authenticated();
4
}
Давайте попробуем!
Сначала скомпилируйте и соберите свой контейнер. Чтобы процесс сборки работал правильно, вам нужно будет предоставить информацию о Okta как часть командной строки, заменив <org_url>
, <client_id>
и <client_secret>
. Вы найдете эти значения в своей учетной записи Okta. org_url
Отображается в правом верхнем углу панели. Символы client_id
и client_secret
отображаются в настройках вашего приложения.
Джава
xxxxxxxxxx
1
./mvnw package
Затем создайте контейнер:
Джава
xxxxxxxxxx
1
docker build . -t okta:spring_boot_docker
Чтобы запустить контейнер сейчас, вы передадите свою информацию Okta контейнеру как переменные среды. Это делается с помощью параметра -e
командной строки. Вот так:
Джава
xxxxxxxxxx
1
docker run --publish=8080:8080 \
2
-e OKTA_OAUTH2_ISSUER=<org_url>/oauth2/default \
3
-e OKTA_OAUTH2_CLIENT_ID=<client_id> \
4
-e OKTA_OAUTH2_CLIENT_SECRET=<client_secret> \
5
okta:spring_boot_docker
Теперь, если вы нажмете, http://localhost:8080
вы увидите форму входа, и после предоставления вашего имени пользователя и пароля вы сможете снова увидеть страницу приветствия. Зависимость и пара свойств необходимы для защиты вашего приложения с помощью OIDC / OAuth 2.0!
Узнайте больше о Spring, Docker и безопасности!
Из этого руководства вы узнали, как создать Docker-контейнер для приложения Spring Boot, написав Dockerfile вручную. Есть также плагин Maven, который может подготовить контейнер для вас. Он называется Jib, и мы рассмотрим его более подробно на Get Jibby With Java, Docker и Spring Boot .
Исходный код этого поста доступен на GitHub .
Если у вас есть какие-либо вопросы по поводу этого поста, пожалуйста, добавьте комментарий.
Дальнейшее чтение
Развертывание микросервиса Spring Boot в Docker: краткое руководство