Статьи

Docker с Spring Boot и MySQL: введение (часть 1)

Docker Architecture

Docker — это технология, в которой разработчики или команды DevOps могут создавать, развертывать и управлять приложениями с помощью контейнеров. Docker — это программное обеспечение с открытым исходным кодом, поэтому каждый может запустить его в своей операционной системе, которая должна поддерживать виртуализацию и Docker для Mac / Windows / Linux.

Docker также отправляет готовые изображения с одного компьютера на другой. Docker-контейнеры — это наборы процессов, которые изолированы от остальных процессов в операционной системе хоста. Docker разделяет ядро ​​операционной системы хоста. С другой стороны, VM — это технология, которая зависит от гостевой ОС, которая полностью отделена от хост-ОС. Виртуальные машины взаимодействуют с операционной системой через гипервизор. ВМ требует много аппаратных ресурсов и процессов. Это не технология, основанная на контейнерах.

Docker перемещает абстракции ресурсов с аппаратного уровня на уровень операционной системы. Вот почему переносимость приложений и разделение инфраструктуры проще.

Контейнерная технология требует меньше ресурсов хост-системы. Большую часть времени технология, основанная на контейнерах, использует ядро ​​хост-машины. Основная цель этой статьи — реализовать Docker с приложением Spring Boot и MySQL.


Вам также может понравиться:
Essential MySQL

Основные понятия

Docker Engine работает как клиент-серверная архитектура. Docker-демон работает как сервер, который является основной частью Docker и работает в операционной системе хоста. Этот сервис предоставляет некоторые остальные API, которые могут использоваться клиентом. Клиент интерфейса командной строки (CLI) использует службы, предоставляемые демоном Docker с помощью команды Docker .

Docker Daemon

Важные условия

Изображение : Изображение — это файл пакета исполняемого приложения внутри Docker. Он содержит все необходимое для запуска приложения, включая библиотеки, файлы конфигурации, среду выполнения и т. Д. Это снимок контейнера. 

Контейнер : экземпляр изображения называется контейнером. Когда изображение выполняется и размещается в памяти, экземпляр этого изображения называется контейнером. Он выполняется в полностью изолированной среде.

В терминах ООП Image — это класс, а контейнер — это экземпляр этого класса — объект времени выполнения.

Реестр:  Реестр — это система хранения и доставки контента, в которой хранятся образы Docker. Docker Hub — это популярный реестр Docker. Мы можем хранить разные версии изображений с разными номерами тегов в Docker Hub.  

Dockerfile:  это текстовый файл, который содержит все команды для сборки изображения. 

Dockerfile
 > (Build)> 
Изображение
 > (Run)> 
Контейнер

Монтаж

В этой статье мы будем использовать  Docker Hub  в качестве реестра Docker. Затем мы будем следовать инструкциям по настройке  настольного приложения Docker.  Я использую Mac OS в качестве хоста. После установки мы видим, что приложение Docker запущено. Затем я должен войти в систему, используя свои учетные данные Docker Hub.

После установки и входа в Docker Desktop

Теперь мы можем открыть терминал, чтобы проверить некоторые команды Docker.

 docker --version Команда должна вернуть версию Docker. В моем случае эта команда возвращает 

Docker версия 19.03.2, сборка 6a30dfc

 docker info Команда должна вернуть подробную информацию об установленном Docker-компьютере хост-машины. Изначально у вас ноль изображений и контейнеров.

 docker pull hello-world Эта команда должна извлечь образ hello-world из реестра Docker. Теперь снова, если мы запустим команду Docker info, мы увидим, что количество изображений равно 1. Но количество контейнеров по-прежнему равно нулю.

 docker run hello-world Эта команда должна создать экземпляр образа hello-world. Он вернет длинное сообщение: 

Привет из Докера!

Это сообщение показывает, что ваша установка работает правильно.

Если мы запустим команду Docker info, мы увидим, что число изображений равно 1, а количество контейнеров также равно единице. Итак, установка Docker завершена.

Настройка MySQL

Теперь мы создадим и запустим образ базы данных MySQL. С нашего терминала мы запустим следующую команду. Здесь  -d в этой команде указано, что команда Docker будет работать в автономном режиме.

docker run -d -p 6033:3306 --name=docker-mysql --env="MYSQL_ROOT_PASSWORD=root" --env="MYSQL_PASSWORD=root" --env="MYSQL_DATABASE=book_manager" mysql

Надеюсь, образ MySQL извлекается и работает как контейнер. Чтобы проверить это, мы можем запустить

 docker image ls и  docker container ls команды. В моем случае ответы этих команд:

mysql latest b8fd9553f1f0 3 days ago 445MB 
hello-world latest fce289e99eb9 8 months ago 1.84kB
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
5db66654ba6a mysql "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 33060/tcp, 0.0.0.0:6033->3306/tcp docker-mysql

Теперь мы можем проверить, войдя в MySQL.

 docker exec -it docker-mysql bash;

Он доставит нас внутрь контейнера docker-mysql. Затем мы войдем в MySQL,  mysql -uroot -p  используя пароль root. Затем мы запустим  show databases; команду, чтобы увидеть, завершена ли установка базы данных или нет. 

В моем случае это возвращает следующий результат:

+--------------------+ | Database | +--------------------+ | book_manager | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)

Таким образом, мы можем сказать, что база данных book_manager была создана внутри контейнера Docker. Мы можем использовать эту базу данных извне с нашего хост-компьютера, используя порт 6033. Теперь нам нужно импортировать скрипт базы данных в базу данных Docker MySQL. Сценарий SQL доступен здесь . Выполните следующую команду, чтобы импортировать этот скрипт в docker-mysql. 

docker exec -i docker-mysql mysql -uroot -proot book_manager <book_manager.sql 

Надеюсь, скрипт book_manager успешно выполнен. Вы можете подтвердить, выполнив следующую команду.

$ docker exec -it docker-mysql bash; 
root@5db66654ba6a:/# mysql -uroot -p 
Enter password: 
mysql> show databases; 
+--------------------+ | Database | +--------------------+ | book_manager | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> use book_manager Database changed 
mysql> show tables; 
+------------------------+ | Tables_in_book_manager | +------------------------+ | author | | book | | book_author | | book_publisher | | book_tag | | bookshelf | | publisher | | tag | +------------------------+ 8 rows in set (0.01 sec) mysql> 

Приложение клонировать и строить проект

Я уже отправил свой код в мой репозиторий GitHub. Любой может отсюда клонировать кодовую базу . Я думаю, что ваш хост-компьютер имеет настройку Gradle. Итак , теперь мы запускаем  Gradle сборки команды  для создания проекта. Таким образом, исполняемый файл JAR создается в  каталоге build / jar вашего клонированного проекта.

Теперь откройте Dockerfile. Мы видим, что файл содержит следующие команды:

FROM java:8
VOLUME /tmp 
EXPOSE 10222 
ADD /build/libs/book-manager-1.0-SNAPSHOT.jar book-manager-1.0-SNAPSHOT.jar 
ENTRYPOINT ["java","-jar","book-manager-1.0-SNAPSHOT.jar"]

Этот файл содержит последовательные команды для выполнения в Docker. Он создаст образ java 8. Он также скопирует файл jar с хост-машины в образ докера, а затем запустит команду, заданную в аргументах точки входа. Теперь мы создадим образ докера, используя этот Dockerfile

docker build -f Dockerfile -t book_manager_app .

Эта команда создаст образ Docker с именем  book_manager_app для компьютера Docker. Здесь  -f  команда указывает имя файла Docker. Теперь мы запустим это изображение как контейнер.

docker run -t --link docker-mysql:mysql -p 10222:10222 book_manager_app 

Команда  --link позволит  контейнеру book_manager_app использовать порт контейнера MySQL и будет  -t  обозначать его--tty , который будет выделять псевдо-терминал.

После выполнения этой команды мы  нажмем http: // localhost: 10222 / book из браузера нашего хост-компьютера, и он вернет список книг. 

Это все для начальных знаний Docker с простой реализацией Spring Boot и базой данных MySQL.

Удачного кодирования!

Дальнейшее чтение

Лучшие 5 курсов для изучения MySQL в 2019 году

Докер изображения и контейнеры