Контейнеры и микросервисы вместе стали де-факто в современной архитектуре. Эта статья поможет новичкам создавать образы, запускать контейнеры и выполнять докеризацию своих приложений.
Предпосылки:
★ Докер
★ 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
команды можно повторить и выполнить.
Таким образом, мы успешно докеризовали весеннее загрузочное приложение и запустили его как докер-контейнер.