Контейнеры и микросервисы вместе стали де-факто в современной архитектуре. Эта статья поможет новичкам создавать образы, запускать контейнеры и выполнять докеризацию своих приложений.
Предпосылки:
★ Докер
★ JDK 1.8 или выше
★ Грэдл
★ Майскл
Здесь — это ссылка на образец студенческого приложения Spring Boot, которое используется в этой статье.
Создайте схему базы данных и необходимую таблицу, выполнив следующий SQL-запрос
-- Schema creation CREATE DATABASE `practice`; -- Table creation CREATE TABLE student ( id int(11) NOT NULL AUTO_INCREMENT, grade int(11) DEFAULT NULL, name varchar(255) DEFAULT NULL, place varchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Давайте запустим и протестируем приложение перед его докеризацией.
./gradlew clean build --refresh-dependenices -x test
Это очистит и добавит необходимые зависимости в путь к классам, упомянутый в файле build.gradle. Как только приведенная выше команда будет выполнена, мы увидим, что jar приложения создается из-за задачи gradle. Баночка будет находиться в /build/libs . Запустите банку через
java -jar <applicationName>.jar
Здесь команда будет следующей
java -jar student-0.1.jar
Вы можете видеть, что приложение весенней загрузки запущено на порту 8080.
2022-12-25 21:16:18.941 INFO 19264 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2022-12-25 21:16:18.957 INFO 19264 --- [ main] com.demo.student.Application : Started Application in 5.948 seconds (JVM running for 6.339)
Давайте нажмем и протестируем API CRUD с помощью приведенных ниже команд curl.
CREATE — создание учащегося с помощью POST-запроса.
curl -s --request POST 'http://localhost:8080/students' --header 'Content-Type: application/json' --data-raw '{
"name": "Abc",
"place": "Xyz",
"grade": 90}'
#Response:
Student created successfully with the id 1.
ПРОЧИТАТЬ — получить данные об учащихся.
curl --request GET 'http://localhost:8080/students' | json_pp
Приведенный выше запрос возвращает список всех студентов. json_pp используется для красивого вывода вывод JSON.
#Response:
[
{
"grade" : 90,
"id" : 1,
"name" : "Abc",
"place" : "Xyz"
}
]
Получить конкретного студента по идентификатору
curl -s --request GET 'http://localhost:8080/students/1' | json_pp
#Response:
{
"grade" : 90,
"id" : 1,
"name" : "Abc",
"place" : "Xyz"
}
ОБНОВЛЕНИЕ: обновление оценки конкретного учащегося.
curl -s --request PATCH 'http://localhost:8080/students/1' --header 'Content-Type: application/json' --data-raw
'{"grade": 80}' | json_pp
#Response:
{
"grade" : 80,
"id" : 1,
"name" : "Abc",
"place" : "Xyz"
}
УДАЛИТЬ — удалить определенного учащегося по идентификатору.
curl -I -s --request DELETE 'http://localhost:8080/students/1' #Response: HTTP/1.1 204 Content-Type: text/plain;charset=UTF-8
-I был добавлен для печати кода ответа на выходе.
Теперь давайте докеризуем приложение.
Перед этим обновим URL источника данных с
url: 'jdbc:mysql://localhost:3306/practice'
to
url: 'jdbc:mysql://host.docker.internal:3306/practice'
Изменение URL-адреса связано с подключением док-контейнера к базе данных practice на вашем локальном сервере MySQL. Подробнее здесь
Теперь давайте пересоберем приложение с помощью следующей команды gradle ./gradlew clean build --refresh-dependenices -x test. Как было сказано ранее, это создаст банку приложения в следующем каталоге build/libs.
СОЗДАЙТЕ образ докера с помощью приведенной ниже команды
docker build -t krithick10/student .
Приведенная выше команда создает изображение и помечает имя изображения как krithick10/student.
Определения сборки образа загружаются из Dockerfile. Команда FROM извлечет базовый образ JDK 11 из репозитория док-станции eclipse-temurin. Команда ARG используется для объявления переменной. Здесь объявляется переменная JAR_FILE со значением по умолчанию. Значение JAR_FILE указывает банку inbuild/libs в результате выполнения вышеуказанной команды оценивания. Команда COPY копирует банку из build/libs в место назначения app.jar. Команда ENTRYPOINT — это место, где выполнение начинается при запуске контейнера.
Выполните следующую команду docker images и вы увидите, как создается образ

ЗАПУСТИТЬ образ как контейнер с помощью следующей команды
docker run -p 8080:8080 krithick10/student
Мы могли видеть, что контейнер начал работать в порту 8080.
2022-12-28 16:50:58.106 INFO 1 --- [ main] com.demo.student.Application : Starting Application using Java 11.0.17 on ff81eb3ded1e with PID 1 ... 2022-12-27 16:51:03.243 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2022-12-27 16:51:03.261 INFO 1 --- [ main] com.demo.student.Application : Started Application in 6.063 seconds (JVM running for 6.679)
Выполните следующую команду docker container ls, чтобы проверить запущенные активные контейнеры.

Мы могли видеть, что контейнер запущен и работает в порту 8080. Приведенные выше curl команды можно повторить и выполнить.
Таким образом, мы успешно докеризовали весеннее загрузочное приложение и запустили его как докер-контейнер.