В этой статье мы рассмотрим, как настроить развёртывание с помощью docker-compose для приложения Spring Boot, использующего базу данных MySQL.
Подготовка к развертыванию
Прежде чем двигаться дальше, мы рекомендуем проверить, правильно ли установлен Docker.
Мы можем использовать следующую команду в cmd/терминале, которая показывает версии клиента и сервера.
docker version
Client: Docker Engine - Community
Version: 27.0.3
API version: 1.46
Go version: go1.21.11
Git commit: 7d4bcd8
Built: Sat Jun 29 00:02:50 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 27.0.3
API version: 1.46 (minimum version 1.24)
Go version: go1.21.11
Git commit: 662f78c
Built: Sat Jun 29 00:02:50 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.18
GitCommit: ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
runc:
Version: 1.7.18
GitCommit: v1.1.13-0-g58aa920
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Все в порядке! Docker установлен, а значит можно шаг за шагом докеризировать приложение Spring Boot. Весь процесс включает в себя следующие шаги:
- Создание приложения Spring Boot
- Создайте исполняемый JAR-файл
- Создайте файл Docker
- Создание образа Docker
- Запустите образ Docker
Создание приложения Spring Boot
И так для создания простейшего приложения нам нужно, более подробно пример описан на сайте spring.io:
Создадим проект
Для создания проекта воспользуемся сайтом start.spring.io. В диалоге «Dependense» найти и добавить зависимость «web». Нажать кнопку «Generate», скачать zip-файл и распаковать его в папку на компьютере.
Добавим код
Открыть проект в среде разработки и найти файл DemoApplication.java в папке src/main/java/com/example/demo. Изменить содержимое файла, добавив код (или заменив):
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello %s!", name);
}
}
Это весь код, необходимый для создания простого веб-сервиса «Привет, мир!» в Spring Boot. Добавленный метод hello()
предназначен для приёма строкового параметра name, а затем объединения этого параметра со словом "Hello"
в коде. Это означает, что если вы укажете в запросе имя "Amy"
в качестве параметра, то ответом будет «Hello, Amy
».
Собираем и запускаем приложение
Перенесем каталог на сервер, перейдем в каталог demo и выполним команду:
macOS / Linux:
COPY./gradlew bootRun
Windows:
COPY.\gradlew.bat bootRun
Встроенный в Spring Boot сервер Apache Tomcat работает как веб-сервер и принимает запросы на localhost порту 8080. Откройте браузер и в адресной строке вверху введите http://localhost:8080/hello. Вы должны получить дружественный ответ, подобный этому:
В качестве пути можно указать IP адрес сервера, если вы выполняете действия на удаленном сервере, а не локально.
Если вы используете Apache Maven, чтобы создать JAR-файл приложения Spring на основе Maven, мы можем использовать следующую команду:
mvn clean install
Команда создаст файл JAR в целевом каталоге проекта. По умолчанию созданный файл JAR имеет то же имя, что и приложение.
Теперь, когда JAR файл приложения готов, перейдем к следующему шагу и создадим Dockerfile в корневой папке приложения.
Создание Dockerfile
Это основной файл Docker, содержащий все инструкции для докеризации приложения Spring Boot.
Итак, создайте файл Docker в корневой папке приложения.
FROM openjdk:11
WORKDIR /app
LABEL maintainer ="dockerhosting"
VOLUME /main-app
ADD target/app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar","app.jar"]
- Команда FROM импортирует образ Java из библиотеки Docker в наш контейнер, чтобы наше приложение Spring Boot могло работать.
- LABEL команда задает ярлык для этого образа
- ADD команда используется для добавления JAR-файла нашего приложения spring boot в контейнер docker.
- ENTRYPOINT используется для указания команды запуска. Мы можем заметить, что массив строк в совокупности образует команду, которую мы обычно используем для запуска JAR-файла из командной строки/терминала. Эта команда запускает наше приложение Spring Boot в контейнере Docker.
Создание образа Docker
Теперь создайте образ Docker, чтобы объединить все эти файлы (JAR и Dockerfile) в единое целое. В терминологии Docker это называется образом, который выполняется независимо в контейнере Docker.
Чтобы создать образ, docker предоставляет следующую команду:
docker build – t springdocker:latest .
Это создаст образ в контейнере Docker. Флаг -t
используется для установки тега для образа, а двоеточие (:
) используется для установки имени тега, тогда как точка (.
) относится к текущему каталогу.
Вы можете проверить созданный образ с помощью приведенной ниже команды.
docker images
Запуск Spring Boot приложения в Docker
docker run -p 8080:8080 springdocker
Эта команда сопоставляет порт 8080 вашего локального компьютера с портом 8080 контейнера, позволяя вам получить доступ к вашему приложению через http://localhost:8080/hello.
Используемые материалы при написании инструкции: