Использование Docker для MySQL сервера

Опубликовано: 08.12.2020
Автор: Виталий Бочкарев
Поддержать автора статьи по этой ссылке

В работе ИТ-инженера бывают случаи, когда надо что-то протестировать, например что-то в базе данных, а доступного сервера с базой данных нет. В то же самое время на свой компьютер не хочется ставить сервер баз данных, чтобы не засорять операционную систему машины. Выходом из ситуации является виртуализация. И не просто виртуализация, а использование контейнеров вместо полноценных виртуальных машин.

То есть, чтобы не ставить на свой компьютер ни сервер баз данных, ни вторую операционную систему в виртуальной машине Hyper-V, VMware, VirtualBox и подобных, а после чего настраивать саму гостевую ОС и нужный продукт в ней, необходимо один раз установить и настроить систему контейнеризации и использовать готовые образы с нужным программным обеспечением, которые занимают мало места и очень быстро запускаются.

 

В этой заметке я расскажу, как установить систему контейнеризации Docker Desktop в операционной системе Windows 10 Professional и использовать эту систему для развертывания контейнера с базой данных MySQL.

Примечание. В операционной системе Windows 10 Home установка и функционал немного отличаются, но принципы аналогичны описанному ниже. Установщик докера сам попросит доустановить нужные пакеты, которые отсутствуют в версии Home.

 

Итак, для установки платформы контейнеризации Docker desktop потребуется, чтобы компьютер-хост поддерживал виртуализацию. Проверить это можно в Диспетчере задач на вкладке Производительность процессора. В ней опция Виртуализация должна быть отображена Включенной (иногда хотя аппаратная часть поддерживает эту опцию, но в BIOS она выключена - необходимо зайти в BIOS и поискать что-то связанное с виртуализацией). Так же в компонентах операционной системы должны быть установлены пакеты Контейнеризации и Виртуализации Hyper-V (не все версии операционных систем поддерживают эти функции, инструкция, как установить Docker Desktop на Windows 10 Home находится тут), а сама операционная система должна быть 64-битной. 

Using MySQL in Docker - 01

 

Если все условия для установки выполнены, то можно скачать пакет инсталляции по ссылке https://www.docker.com/products/docker-desktop и установить программу с параметрами по умолчанию.

Using MySQL in Docker - 02

 

Далее нужно найти программу в меню Пуск и запустить ее.

Using MySQL in Docker - 03

 

После успешного запуска в системном трее появится значок кита с нагруженными на него контейнерами. Щелкнув по нему правок кнопкой мыши, нужно вызвать контекстное меню, где выбрать Settings.

Using MySQL in Docker - 04

 

В основных настройках Докера я рекомендую отключить Автоматический запуск, Проверку обновлений и Отправку статистики, которые включены по умолчанию.

Using MySQL in Docker - 05

 

В разделе настройки ресурсов можно выставить параметры, сколько ресурсов от компьютера-хоста могут расходовать контейнеры (виртуальные машины).

Using MySQL in Docker - 06

 

Если для выхода в Интернет используется прокси-сервер, то его необходимо указать на вкладке Прокси, не забыв указать исключения из отправки пакетов на прокси-сервер.

Using MySQL in Docker - 07

 

В настройках сети можно изменить подсеть, используемую контейнерами (виртуальными машинами).

Using MySQL in Docker - 08

 

Закрыв настройки Докера, можно увидеть, что ни одного контейнера не запущено, а так же пример команды, как запустить первый контейнер.

Using MySQL in Docker - 09

 

Так как нас интересует контейнер с сервером MySQL, то необходимо найти этот контейнер в репозирии по ссылке https://hub.docker.com/search?q=mysql&type=image.

Using MySQL in Docker - 10

 

Если перейти на страницу образа, то там можно прочитать, общую информацию о продукте, как установить его, какие переменные поддерживаются и тому подобное. В документации на сайте MySQL можно так же найти информацию с командами докера, как установить и настроить контейнер с MySQL. Если требуется контейнер с Microsoft SQL сервером, то его можно найти по ссылке https://hub.docker.com/_/microsoft-mssql-server.

 

Ниже описан простой пример, как быстро установить контейнер с сервером MySQL и проверить его с помощью тестовой базы данных.

1. Скачать пакет с нужной версией MySQL сервера. Например, чтобы скачать версию 5.7, нужно в параметрах команды указать mysql-server:5.7. Если не указать версию, то будет поставлен параметр latest - последняя версия.

docker pull mysql/mysql-server:5.7
Using MySQL in Docker - 11

 

2. Запустить контейнер с MySQL сервером, указав в параметрах имя, пароль для root, язык и пакет с нужным образом.

docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=passw -e LANG=C.UTF-8 -d mysql/mysql-server:5.7

docker logs mysql57
Using MySQL in Docker - 12

 

3. Подключиться к серверу баз данных и посмотреть имеющиеся базы данных.

docker exec -it mysql57 mysql -uroot -p

SHOW DATABASES;

exit
Using MySQL in Docker - 13

 

4. Импортировать свою базу данных (например тестовую) и выполненить нескольких запросов.

Примечание. В PowerShell эта команда не выполняется, так как символ < зарезервирован для другой команды. Эту команду лучше выполнять в обычной командной стороке CMD.
docker exec -i mysql57 mysql -uroot -ppassw < C:\Temp\MySQL_SampleDB.sql

docker exec -it mysql57 mysql -uroot -ppassw SampleDB

SHOW TABLES;

SELECT * FROM product;

exit
Using MySQL in Docker - 14

 

5. Посмотреть запущенные контейнеры, остановить/запустить/удалить контейнеры по его ID или имени и удалить ненужные контейнеры.

docker container ls

docker stop 61cdba01396f

docker container ls -a

docker start mysql57

docker container stop mysql57

docker container rm 61cdba01396f
Using MySQL in Docker - 15

 

Тестовая установка прошла успешно. Ненужный тестовый контейнер можно удалить.

 

Чтобы создать контейнер с возможностью подключаться с компьютера-хоста к базе данных в контейнере, необходимо пробросить порт из контейнера в хост, а так же создать пользователя в базе данных, которому разрешено подключаться с клиентов.

Создание контейнера с последней версией MySQL сервера, с поддержкой русского языка, с заданием пароля администратора и пробросом порта 3306:

docker run --name mysql_instance -e MYSQL_ROOT_PASSWORD=passw -e LANG=C.UTF-8 -p 3306:3306 -d mysql/mysql-server:latest

Импортирование тестовой базы данных, конфигурация которой сохранена в файле MySQL_SampleDB.sql в папке C:\Temp.

docker exec -i mysql_instance mysql -uroot -ppassw < C:\Temp\MySQL_SampleDB.sql

Подключение к MySQL серверу в режиме командной строки непосредственно в контейнере

docker exec -it mysql_instance mysql -uroot -ppassw

Создание нового пользователя dba с паролем dbaPass, которому разрешены все действия в базе данных, а так же подключение с внешних клиентов.

CREATE USER 'dba'@'localhost' IDENTIFIED BY 'dbaPass';
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'localhost' WITH GRANT OPTION;
CREATE USER 'dba'@'%' IDENTIFIED BY 'dbaPass';
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit
Using MySQL in Docker - 16

 

Логи развертывание контейнера и работы базы данных можно посмотреть в графической оболочке Docker, выбрав раздел Logs нужного контейнера.

Using MySQL in Docker - 17

 

В разделе Inspect можно найти переменные, которые были переданы в контейнер при его создании.

Using MySQL in Docker - 18

 

Подключение к базе данных из программы MySQL Workbench можно выполнить, введя учетные данные пользователя (dba / dbaPass), которого создали выше, имя хоста localhost и порт 3306.

Using MySQL in Docker - 19

 

Консоль MySQL Workbench подключилась к базе данных в контейнере. 

Using MySQL in Docker - 20

 

Как видно из примеров, всё работает и достаточно быстро настраивается. 

Вложения