Запуск 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.