Как сделать контейнер MySQL без сохранения состояния - PullRequest
0 голосов
/ 01 апреля 2019

Я хочу создать изображение Docker MySQL, которое импортирует некоторые начальные данные в процессе сборки.

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

Возможно ли это?Как бы мне настроить такой образ и контейнер?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Я думаю, что вам нужна многоэтапная сборка:

FROM mysql:5.7 as builder

# needed for intialization
ENV MYSQL_ROOT_PASSWORD=somepassword

ADD initialize.aql /docker-entrypoint-initdb.d/

# That file does the DB initialization but also runs mysql daemon, by removing the last line it will only init
RUN ["sed", "-i", "s/exec \"$@\"/echo \"not running $@\"/", "/usr/local/bin/docker-entrypoint.sh"]
RUN ["/usr/local/bin/docker-entrypoint.sh", "mysqld", "--datadir", "/initialized-db"]

FROM mysql:5.7

COPY --from=builder /initialized-db /var/lib/mysql

Вы можете поместить свои скрипты инициализации в initialize.sql (или выбрать другой способ инициализации вашей базы данных).

Полученное изображение является базой данных, которая уже инициализирована.Вы можете использовать его и выбросить, как вам нравится.

Вы также можете использовать этот процесс для создания разных изображений (пометить их по-разному) для разных вариантов использования.

Надеюсь, что это ответ на ваш вопрос.

0 голосов
/ 01 апреля 2019

Я предлагаю создавать таблицы MySQL по мере необходимости в сценарии SQL или непосредственно в локальном экземпляре MySQL и экспортировать их в файл.

Имея этот файл в руках, создайте файл Docker, основанный на MySQLконтейнер.Добавьте к этому еще один сценарий точки входа, который вставляет сценарий SQL в базу данных.

Вы ничего не пишете о монтировании томов.Вам может потребоваться объем данных для базы данных или настроить MySQL для хранения всего в памяти.

Для добавления «отсутствия состояния» вы можете также УДАЛИТЬ все таблицы в вашем сценарии SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...