2016-10-06 2 views
1

Этот вопрос аналогичен:Включая данных в MySQL Докер контейнер

Setting up MySQL and importing dump within Dockerfile

Но ответ на этот вопрос не решить мой случай использования.

У меня есть база данных MySQL, в которой есть 5TB данных в Production. Для Dev мне нужно всего около 500 МБ этих данных. Интеграционные тесты, выполняемые как часть сборки моего приложения, требуют доступа к базе данных MySQL. В настоящее время эта БД создается на Дженкинсе, и данные вносятся в нее процессом сборки. Это очень медленно.

Я хотел бы заменить эту часть этого процесса на Docker. Моя идея состоит в том, что у меня будет контейнер Docker, который запускает MySQL, и у меня есть мои 500 Мбайт данных, уже запеченные в контейнере, вместо того, чтобы полагаться на стандартный процесс, связанный с образцом Docker MySQL, только выполняющий импорт MySQL при запуске контейнера. Основываясь на тестах на сегодняшний день, стандартный процесс занимает 4-5 минут, где я хотел бы получить это до нескольких секунд.

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

Есть ли у кого-нибудь опыт в этом отношении? Есть ли веская причина, почему данные не должны быть предварительно обработаны в контейнере MySQL Docker?

ответ

0

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

Тем не менее, я бы не стал на него нагноваться - я думаю, что это очень хороший вариант использования для непроизводительного изображения Докера. Изображение размером 500 МБ довольно дешево для перемещения, поэтому у вас может быть много версий с тегами для разных версий схемы базы данных и даже нескольких изображений с различными наборами данных для разных тестовых сценариев.

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

+0

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

3

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

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

Однако есть ключевое значение для понимания базового образа MySQL. Оба каталога данных (/ var/lib/mysql /) и каталог config (/ etc/mysql /) настроены как тоны Docker, что означает, что их содержимое отображается в местоположениях вашей хост-системы.

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

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

Чтобы решить проблему, я хочу вернуться к базовому образцу Ubuntu, построить на нем свою БД и передать это новому изображению, которое отлично работает. Размер контейнера немного больше, но развертывание как часть нашего задания сборки значительно быстрее, чем ждать, когда контейнер MySQL будет запускать импорт 500 МБ при запуске.

Смежные вопросы