1. Обзор
В современную технологическую эпоху организациям приходится быстро выпускать приложения, чтобы привлекать и удерживать клиентов. Это позволяет командам создавать и настраивать среду развертывания быстрее и с меньшими затратами. Однако для построения облегченной инфраструктуры на помощь приходят технологии контейнеризации.
В этой статье будет разъяснен метод развертывания и подключения к серверу MySQL в среде на основе контейнеров .
Теперь давайте углубимся в суть этого.
2. Развертывание контейнера MySQL
Во-первых, давайте рассмотрим шаги, связанные с развертыванием контейнера MySQL. По сути, MySQL следует архитектурной модели клиент-сервер. Здесь сервер представляет собой образ контейнера с базами данных, тогда как клиент используется для доступа к базе данных на хост-компьютере.
Мы разделили рабочий процесс развертывания на три части.
2.1. Развертывание сервера MySQL
Теперь давайте перенесем экземпляр сервера MySQL в Docker. Мы можем просто создать контейнер на основе образа MySQL, полученного из Docker Hub. Есть два момента, которые мы должны учитывать при выборе версии образа для получения из Docker Hub :
- Официальная штамповка изображений — это более безопасные и проверенные изображения от команды разработчиков MySQL.
- Последний тег — если у нас нет каких-либо оговорок по версии MySQL, мы можем использовать последнюю версию, доступную в репозитории.
Давайте вытащим официальный образ MySQL из Docker Hub с помощью команды docker pull
:
$ docker pull mysql:latest
latest: Pulling from library/mysql
f003217c5aae: Pull complete
…
… output truncated …
…
70f46ebb971a: Pull complete
db6ea71d471d: Waiting
c2920c795b25: Downloading [=================================================> ] 105.6MB/107.8MB
26c3bdf75ff5: Download complete
Обычно изображения представляют собой отдельные слои, тесно связанные в упорядоченной форме, как описано в файле манифеста . Наша команда docker pull
получит слои образов из хранилища BLOB-объектов и автоматически создаст образ с помощью файла манифеста :
…
… output truncated …
…
4607fa685ac6: Pull complete
Digest: sha256:1c75ba7716c6f73fc106dacedfdcf13f934ea8c161c8b3b3e4618bcd5fbcf195
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
Связанное изображение получает хэш-код для дальнейшего использования, как показано выше.
Без лишних слов давайте запустим контейнер. Команда docker run
обычно создает слой контейнера с возможностью записи поверх слоев образа . Нам нужно указать имя контейнера с помощью аргумента -name
и использовать образ MySQL с последним тегом. Далее мы установим пароль сервера MySQL через переменную окружения MYSQL_ROOT_PASSWORD. В нашем случае пароль установлен «foreach».
Наконец, параметр -d
помогает нам запустить контейнер как демон. Вывод выдает еще один хеш-код для будущего управления контейнерами:
$ docker run --name bael-mysql-demo -e MYSQL_ROOT_PASSWORD=foreach -d mysql:latest
fedf880ce2b690f9205c7a37f32d75f669fdb1da2505e485e44cadd0b912bd35
Мы можем увидеть все запущенные контейнеры на хосте с помощью команды ps
:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fedf880ce2b6 mysql:latest "docker-entrypoint.s…" 17 seconds ago Up 16 seconds 3306/tcp, 33060/tcp bael-mysql-demo
2.2. Установка клиента MySQL
Обязательно установите клиент, чтобы получить легкий доступ к серверу MySQL. В зависимости от наших потребностей мы можем либо установить клиент на хост-компьютере, либо на любом другом компьютере или контейнере, который имеет IP-доступность с серверным контейнером:
$ sudo apt install mysql-client -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
mysql-client is already the newest version (5.7.37-0ubuntu0.18.04.1).
…
… output truncated …
…
Теперь давайте включим извлечение пути установки и версии клиента MySQL:
$ which mysql
/usr/bin/mysql
$ mysql --version
mysql Ver 14.14 Distrib 5.7.37, for Linux (x86_64) using EditLine wrapper
2.3. Установить связь
Далее авторизуемся на сервере с помощью установленного клиента. Традиционно мы используем команду MySQL с именем пользователя и паролем для входа на сервер. Однако в случае контейнерных решений это не сработает :
$ mysql -u root -p
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Мы закончим с ошибками сокета, как показано выше. Здесь важно понимать, что сервер MySQL — это контейнер, а не просто установленный на хост-компьютере. Как подчеркивалось в предыдущем разделе, контейнеры — это облегченные серверы со своими собственными вычислительными ресурсами, сетью и хранилищем.
Команда inspect
помогает выделить IP-адрес экземпляру сервера MySQL:
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' bael-mysql-demo
172.17.0.2
Давайте укажем указанный выше IP-адрес в опции хоста клиента с номером порта по умолчанию и типом протокола TCP:
$ mysql -h 172.17.0.2 -P 3306 --protocol=tcp -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
…
… output truncated …
…
mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye
Поздравляем, мы успешно вошли на сервер MySQL!
3. Заключение
Таким образом, мы подробно рассмотрели шаги по развертыванию контейнера сервера MySQL, установке клиента MySQL на хост-компьютере и, наконец, установлению соединения между ними с использованием информации о контейнере.