В работе ИТ-инженера бывают случаи, когда надо что-то протестировать, например что-то в базе данных, а доступного сервера с базой данных нет. В то же самое время на свой компьютер не хочется ставить сервер баз данных, чтобы не засорять операционную систему машины. Выходом из ситуации является виртуализация. И не просто виртуализация, а использование контейнеров вместо полноценных виртуальных машин.
То есть, чтобы не ставить на свой компьютер ни сервер баз данных, ни вторую операционную систему в виртуальной машине 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-битной.
Если все условия для установки выполнены, то можно скачать пакет инсталляции по ссылке https://www.docker.com/products/docker-desktop и установить программу с параметрами по умолчанию.
Далее нужно найти программу в меню Пуск и запустить ее.
После успешного запуска в системном трее появится значок кита с нагруженными на него контейнерами. Щелкнув по нему правок кнопкой мыши, нужно вызвать контекстное меню, где выбрать Settings.
В основных настройках Докера я рекомендую отключить Автоматический запуск, Проверку обновлений и Отправку статистики, которые включены по умолчанию.
В разделе настройки ресурсов можно выставить параметры, сколько ресурсов от компьютера-хоста могут расходовать контейнеры (виртуальные машины).
Если для выхода в Интернет используется прокси-сервер, то его необходимо указать на вкладке Прокси, не забыв указать исключения из отправки пакетов на прокси-сервер.
В настройках сети можно изменить подсеть, используемую контейнерами (виртуальными машинами).
Закрыв настройки Докера, можно увидеть, что ни одного контейнера не запущено, а так же пример команды, как запустить первый контейнер.
Так как нас интересует контейнер с сервером MySQL, то необходимо найти этот контейнер в репозирии по ссылке https://hub.docker.com/search?q=mysql&type=image.
Если перейти на страницу образа, то там можно прочитать, общую информацию о продукте, как установить его, какие переменные поддерживаются и тому подобное. В документации на сайте 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
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
3. Подключиться к серверу баз данных и посмотреть имеющиеся базы данных.
docker exec -it mysql57 mysql -uroot -p SHOW DATABASES; exit
4. Импортировать свою базу данных (например тестовую) и выполненить нескольких запросов.
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
5. Посмотреть запущенные контейнеры, остановить/запустить/удалить контейнеры по его ID или имени и удалить ненужные контейнеры.
docker container ls docker stop 61cdba01396f docker container ls -a docker start mysql57 docker container stop mysql57 docker container rm 61cdba01396f
Тестовая установка прошла успешно. Ненужный тестовый контейнер можно удалить.
Чтобы создать контейнер с возможностью подключаться с компьютера-хоста к базе данных в контейнере, необходимо пробросить порт из контейнера в хост, а так же создать пользователя в базе данных, которому разрешено подключаться с клиентов.
Создание контейнера с последней версией 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
Логи развертывание контейнера и работы базы данных можно посмотреть в графической оболочке Docker, выбрав раздел Logs нужного контейнера.
В разделе Inspect можно найти переменные, которые были переданы в контейнер при его создании.
Подключение к базе данных из программы MySQL Workbench можно выполнить, введя учетные данные пользователя (dba / dbaPass), которого создали выше, имя хоста localhost и порт 3306.
Консоль MySQL Workbench подключилась к базе данных в контейнере.
Как видно из примеров, всё работает и достаточно быстро настраивается.