Перейти к содержанию

Запуск MyDB Сервер для MySQL в контейнере Docker

MyDB Сервер для MySQL имеет официальный образ Docker, размещенный в реестре контейнеров Gitflic. Если вам нужна последняя версия, используйте тег latest. Вы можете указать конкретную версию, используя фильтр тегов Docker для версий 8.4.

Убедитесь, что вы используете последнюю версию Docker. Версии, установленные из репозиториев apt и yum могут быть устаревшими и вызывать ошибки. Установите самую свежую версию Docker в вашей системе.

Запуск фонового контейнера

Вы можете запустить фоновый контейнер с опцией --detached или -d, которая запускает контейнер в режиме “detached”. В этом режиме контейнер завершает работу, когда завершается корневой процесс, используемый для запуска контейнера.

В следующем примере контейнер с именем mydb запускается с последней версией MyDB Сервер для MySQL 8.4. Это действие также создает пользователя root и использует root в качестве пароля. Обратите внимание, что root не является безопасным паролем.

$ docker run -d \
  --name mydb \
  -e MYSQL_ROOT_PASSWORD=root \
  registry.gitflic.ru/project/mydb-ru/mydb-server/mydb:8.4
Ожидаемый результат
Unable to find image 'registry.gitflic.ru/project/mydb-ru/mydb-server/mydb:8.4' locally
8.4: Pulling from project/mydb-ru/mydb-server/mydb

По умолчанию Docker извлекает образ из реестра контейнеров, если он недоступен локально.

Чтобы просмотреть журналы контейнера, используйте следующую команду:

$ docker logs mydb --follow
Ожидаемый результат
2024-10-17T16:19:30.048168Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.4.0-1.1) starting as process 1
2024-10-17T16:19:30.164911Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
...
2024-10-17T16:19:31.327168Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.4.0-1.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MyDB Server (GPL), Release '1.1', Revision '723681b1'.

Вы можете получить доступ к серверу, когда увидите в журнале информацию о готовности к подключениям (“ready for connections”).

Передача параметров MyDB

Вы можете передать параметры MyDB с помощью команды docker run. Например, следующая команда использует UTF-8 в качестве настройки по умолчанию для набора символов и параметров сортировки для всех баз данных:

$ docker run -d \
 --name mydb \
 -e MYSQL_ROOT_PASSWORD=root \
 mydbru/mydb:8.4 \
    --character-set-server=utf8 \
 --collation-server=utf8_general_ci

Доступ к контейнеру MyDB

Команда docker exec позволяет запустить интерпретатор командной строки внутри контейнера. С этой командой часто указывают опции -it, которые используют стандартный ввод как интерактивный терминал.

Пример доступа к фоновому контейнеру:

$ docker exec -it mydb /bin/bash

Если вам нужно устранить неполадки, журнал ошибок можно найти в /var/log/ или /var/log/mysql/. Имя файла может быть error.log или mysqld.log.

Поиск неисправностей

Посмотреть журнал ошибок можно с помощью следующей команды:

[mysql@mydb] $ more /var/log/mysql/error.log
Ожидаемый результат
...
2024-08-29T04:20:22.190474Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2024-08-29T04:20:22.190520Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
...

Доступ к базе данных

Вы можете получить доступ к базе данных либо с помощью docker exec, либо с помощью команды mysql в оболочке контейнера.

Пример использования docker exec для доступа к базе данных:

$ docker exec -it mydb mysql -uroot -proot
Ожидаемый результат
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
...

Остановка процесса MyDB приведёт к выходу из контейнера.

Вы также можете запустить клиент командной строки MySQL в оболочке контейнера для доступа к базе данных:

[mysql@mydb] $ mysql -uroot -proot
Ожидаемый результат
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
...

Доступ к серверу из приложения в другом контейнере

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

Чтобы связать контейнер, в котором работает ваше приложение (в данном случае из образа с именем app/image) с контейнером MyDB Сервер, запустите его с помощью следующей команды:

$ docker run -d \
  --name app \
  --link mydb \
  app/image:latest

Этот контейнер приложения сможет получить доступ к контейнеру MyDB Сервер через порт 3306.

Хранение данных

Существует два способа хранения данных, используемых приложениями, работающими в контейнерах Docker:

  • Можно разрешить Docker управлять хранилищем ваших данных путем записи файлов базы данных на диск хост-системы, используя свое внутреннее управление томами.

  • Можно Создать каталог данных в хост-системе на высокопроизводительном хранилище и смонтировать его в каталог, видимый из контейнера. Этот метод помещает файлы базы данных в заранее известное место на хост-системе и упрощает доступ к этим файлам для инструментов и приложений на хост-системе. Пользователь должен убедиться, что каталог существует, что учетные записи пользователей имеют необходимые разрешения и что все другие механизмы безопасности в хост-системе настроены правильно.

Например, если вы создаете каталог данных на подходящем томе в вашей хост-системе с именем /local/datadir, то вам нужно запустить контейнер с помощью следующей команды:

$ docker run -d \
  --name mydb \
  -e MYSQL_ROOT_PASSWORD=root \
  -v /local/datadir:/var/lib/mysql \
  mydbru/mydb:8.4

Параметр -v /local/datadir:/var/lib/mysql монтирует каталог /local/datadir на хосте в каталог /var/lib/mysql в контейнере, который является каталогом данных по умолчанию, используемый MyDB Сервер для MySQL.

Не добавляйте MYSQL_ROOT_PASSWORD к команде docker run, если каталог данных содержит подкаталоги, файлы или данные.

Примечание

Если у вас включен SELinux, назначьте соответствующий тип политики новому каталогу данных, чтобы контейнеру был разрешен доступ к нему:

$ chcon -Rt svirt_sandbox_file_t /local/datadir

Перенаправление порта

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

Эта возможность упрощает консолидацию экземпляров на одном хосте.

Чтобы отобразить стандартный порт MySQL 3306 на порт 6603 на хосте:

$ docker run -d \
 --name mydb \
 -e MYSQL_ROOT_PASSWORD=root \
 -p 6603:3306 \
 mydbru/mydb:8.4

Выход из контейнера

Если вы находитесь в интерактивной оболочке, используйте «CTRL-D» или команду exit, чтобы выйти из сеанса.

Если у вас запущен процесс, не являющийся оболочкой, прервите его, нажав «CTRL-C», прежде чем использовать «CTRL-D» или exit.

Остановка контейнера

Команда контейнера docker stop отправляет сигнал TERM, затем ждет 10 секунд и отправляет сигнал KILL. Следующий пример останавливает контейнер mydb:

$ docker stop mydb

По умолчанию период времени до остановки контейнера составляет 10 секунд. Очень большой экземпляр может не успеть сбросить данные из памяти на диск за это время. Для экземпляра такого типа добавьте параметр --time или -t для команды docker stop:

$ docker stop mydb -t 600

Удаление контейнера

Чтобы удалить остановленный контейнер, используйте команду docker rm:

$ docker rm mydb

Для дополнительной информации

Просмотрите Документацию Docker.


Последнее обновление: 2024-04-30