Поиск по сайту:

Как запустить MySQL в контейнере Docker


Контейнеры Docker позволяют быстро запускать новые приложения, не загрязняя вашу систему зависимостями. База данных MySQL является общим требованием для веб-приложения. Вот как запустить новый экземпляр MySQL в Docker всего за несколько минут.

Начиная

Официальный образ MySQL на Docker Hub предоставляет все необходимое для начала работы. Изображения доступны для версий MySQL 5.6, 5.7 и 8.0. Укажите тот, который вы хотите использовать в качестве тега изображения:

docker pull mysql:8.0

Перед развертыванием вам необходимо настроить том Docker или выполнить привязку монтирования для сохранения базы данных. В противном случае ваши данные будут потеряны при перезапуске контейнера. Монтирование должно выполняться в /var/lib/mysql внутри контейнера.

Вам также необходимо установить пароль для пользователя root MySQL. Используйте переменную среды MYSQL_ROOT_PASSWORD. MySQL откажется инициализироваться, если эта переменная не установлена. Попробуйте выбрать безопасный пароль.

Вот как запустить MySQL, удовлетворяя этим требованиям:

docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -v $HOME/mysql-data:/var/lib/mysql -d mysql:8.0

Процедура первого запуска MySQL займет несколько секунд. Вы можете проверить, работает ли база данных, запустив docker logs my-mysql. Найдите строку, содержащую готово для подключения.

Докер Сочинять

Команда docker run может быстро стать длинной, особенно если у вас есть сложные требования к конфигурации. Написание файла docker-compose.yml более удобно в сопровождении. Вот пример:

version: "3"

services:
  mysql:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD
    volumes:
      - mysql:/var/lib/mysql

volumes:
  mysql:

Вы можете запустить MySQL, используя MYSQL_ROOT_PASSWORD=secure docker-compose up -d.

Подключение к MySQL

Вы можете получить интерактивную оболочку MySQL, подключившись к контейнеру и выполнив команду mysql. Это обеспечивает полный интерфейс командной строки MySQL, так что вы можете использовать все знакомые команды и флаги.

docker exec -it my-mysql mysql -p

Эта команда открывает оболочку от имени пользователя root и запрашивает пароль.

Чтобы импортировать файл SQL из вашей файловой системы, вы можете передать его в команду:

docker exec -it my-mysql mysql -psecret database_name < path-to-file.sql

Вы должны настроить привязку порта, если хотите получить доступ к MySQL с вашего хоста. Привяжите порт хоста к порту контейнера 3306. Добавьте следующее в файл docker-compose.yml в определении службы mysql:

ports:
 - 33060:3306

Это свяжет порт 33060 на вашем хост-компьютере с портом 3306 контейнера. Если вы не используете Docker Compose, передайте -p 33060:3306 в docker run при запуске ваш контейнер. Теперь вы сможете подключаться к localhost:33060 с помощью клиентов MySQL, работающих на вашем хосте.

Если вам нужно подключиться из другого контейнера Docker, лучше всего использовать Docker Compose. Определите другую службу для нового контейнера. Оба контейнера будут существовать в одной сети Docker. Вы сможете подключиться, используя порт 3306 на имени хоста контейнера MySQL (это соответствует имени службы, определенному в вашем файле Compose).

Автоматическое создание базы данных и пользователя

Образы MySQL Docker поддерживают необязательные переменные среды, которые позволяют управлять настройкой базы данных при первом запуске. Установите эти переменные для автоматической подготовки новой пустой базы данных и учетной записи пользователя:

  • MYSQL_DATABASE — имя схемы базы данных, создаваемой при первой инициализации сервера.
  • MYSQL_USER и MYSQL_PASSWORD — создайте новую начальную учетную запись пользователя отдельно для пользователя root. Если вы также зададите переменную MYSQL_DATABASE, вашей новой учетной записи пользователя будут автоматически предоставлены все привилегии для вновь созданной базы данных.
  • MYSQL_RANDOM_ROOT_PASSWORD — установите эту переменную, чтобы MySQL автоматически генерировал новый пароль для пользователя root. Это заменяет переменную MYSQL_ROOT_PASSWORD. Сгенерированный пароль будет передан в стандартный поток вывода при первом запуске. По этой причине следует соблюдать осторожность при использовании этой переменной в средах CI — пароль может быть виден всем, у кого есть доступ к журналам заданий!

Исходные файлы первого запуска

У вас часто будут таблицы и данные, которые вы хотите добавить в базу данных, как только она будет создана. Образы MySQL настроены на поиск файлов .sh, .sql и .sql.gz в /docker-entrypoint контейнера. -initdb.d каталог.

Все найденные файлы будут выполняться последовательно. Порядок всегда будет в алфавитном порядке. Вы можете использовать префиксы имен файлов (например, 1-seed_tables.sql/2-seed_data.sql), чтобы операции выполнялись в заданном порядке.

Этот механизм позволяет легко заполнить ваш новый экземпляр базы данных начальными данными. Вы можете написать свой собственный Dockerfile, используя MySQL в качестве базового образа, и добавить исходные файлы в /docker-entrypoint-initdb.d. В качестве альтернативы привяжите каталог монтирования на вашем хосте к каталогу контейнера.

MySQL будет игнорировать файлы инициализации, если в каталоге данных нет базы данных. Очистка содержимого вашего каталога данных вызовет новую инициализацию при перезапуске контейнера.

Настройка параметров сервера

Файлы конфигурации сервера MySQL будут загружены из /etc/mysql/conf.d. Добавьте свои собственные файлы конфигурации в этот каталог, используя переопределение Dockerfile или привязку, чтобы настроить параметры сервера. Вы можете получить список доступных опций из руководства по MySQL Server.

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

docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest --general-log=on

Этот вариант docker run запустит MySQL с включенным общим журналом запросов. Двоичный файл mysql является точкой входа изображения, поэтому флаги, переданные в docker run после того, как имя изображения будет перенаправлено в mysql.

Заключение

Запуск MySQL в Docker намного быстрее и проще, чем установка MySQL Server «на голое железо». Вы можете запускать несколько экземпляров MySQL без риска конфликта.

Официальные образы Docker поставляются с полезными параметрами конфигурации и встроенной поддержкой сидов базы данных при первом запуске. Это позволяет быстро приступить к делу, независимо от того, начинаете ли вы с нуля или используете существующую схему.