1. Введение
DockerОн все больше используется в разработке, и недавно я сделалSpring Bootприложение, чтобы облегчить развертывание, будетMysqlтакже размещенDockerвбежать. Итак, как инициализироватьSQLКак насчет скриптов и данных?
У меня есть два традиционных варианта. Первое решение — импортировать вручную после запуска контейнера, что слишком мало. второй вSpring BootПодключение клиентаMysqlБаза данных инициализируется при использовании контейнера, вы можете обратиться кУправление версиями базы данных с помощью flywayстатье, но это зависит от возможностей клиента. можно ли это сделатьMysqlИнициализирует ли контейнер сам базу данных при запуске? Конечно! Продемонстрируем сегодня.Весь код смотрите в конце статьи.
2. Принцип
когдаMysqlКогда контейнер запускается в первый раз, он будет/docker-entrypoint-initdb.d
сканирование каталога.sh
,.sql
,.sql.gz
тип файла. Если файлы этих типов существуют, они будут выполнены для инициализации базы данных.Эти файлы будут выполняться в алфавитном порядке. По умолчанию они инициализируются при запуске контейнера.MYSQL_DATABASE
Например, в базе данных определений переменных следующая команда инициализируетREGION_DB
база данных:
$ docker run --name some-mysql -e MYSQL_DATABASE=REGION_DB -d mysql:tag
Если ваша команда запуска не указывает базу данных, вы должны объявить и указать базу данных в сценарии DDL базы данных.. В противном случае будет реализовано следующее исключение:
ERROR 1046 (3D000) at line 7: No database selected
Затем мы будем использовать этот механизм для достиженияDockerБаза данных инициализируется при запуске контейнера.
3. Пользовательский файл Docker
мы пишем свои собственныеDockerfileчтобы удовлетворить наши потребности, здесьMysql:5.7Например.В разных версиях могут быть определенные несоответствия, нужно подробно читать официальную документацию. Сценарий выглядит следующим образом:
FROM mysql:5.7
LABEL OG=felord.cn
COPY utf8mb4.cnf /etc/mysql/conf.d/utf8mb4.cnf
COPY ./sql /tmp/sql
RUN mv /tmp/sql/*.sql /docker-entrypoint-initdb.d
RUN rm -rf /tmp/sql
- Первым шагом является официальное представлениеMysql:5.7Докер образ.
- Второй шаг практического значения не имеет, в основном информация об авторе и организации.
- Третий шаг очень важен! Первоначально я не настраивал третью строку, но после запуска контейнера я обнаружил, что все китайские символы данных инициализации были искажены. Поэтому его необходимо изменить перед инициализацией базы данных.MysqlКодировка и другие настройки, здесь я также изменил часовой пояс на
+8:00
. - Четвертый шаг, скопируйте сценарий базы данных, содержащий
./sql
папка для зеркала/tmp/sql
Вниз. - Пятый шаг, используйте
mv
Команда помещает все файлы в папку, скопированную на четвертом шаге..sql
файл скопирован в/docker-entrypoint-initdb.d
вниз, чтобы вы могли использовать2. ГлавыМеханизм инициализации базы данных. - Шестой шаг, удалите используемый временный каталог.
Затем вы можете создать собственный образ Mysql с помощью команды build image:
# 一定不要忘记最后的一个 . 点
docker build -t mysql:5.7c .
пройти черезmysql:5.7c
Зеркало запускает файл с именемmysql-service
контейнер,rootпароль123456
и сохранить данные на хостеD:/mysql/data
Вниз:
docker run --name mysql-service -v d:/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7c
Совет: можно пройти
SHOW VARIABLES LIKE 'character%'
Посмотрите, изменился ли набор символов наutf8mb4
, так же можно пройтиSHOW VARIABLES LIKE '%time_zone%'
Проверьте, является ли часовой пояс Dongba.
4. Резюме
Сегодня мы настраиваем базу данных, которую можно инициализироватьMysqlЗеркало для облегчения нашего развертывания. Вы также можете обратиться к этой идее, чтобы настроить некоторые другие вещи, которые вам нужны.Dockerзеркало. полная статьяDemoДоступно через мой личный блог.
关注公众号:Felordcn获取更多资讯