Я хочу создать образ docker поверх mysql, который уже содержит необходимую схему для моего приложения.
Я попытался добавить строки в Dockerfile, которые будут импортировать мою схему в виде файла sql. Я так и сделал (мой Dockerfile):
FROM mysql
ENV MYSQL_ROOT_PASSWORD="bagabu"
ENV MYSQL_DATABASE="imhere"
ADD imhere.sql /tmp/imhere.sql
RUN "mysql -u root --password="bagabu" imhere < /tmp/imhere.sql"
Насколько я понимаю, это не сработало, потому что образ docker mysql не содержит клиента mysql (лучшие практики заявляют: «не добавляйте вещи только потому, что они будут хороши») (я ошибаюсь по этому поводу?)
что может быть хорошим способом сделать это? Я имел в виду несколько вещей, но все они кажутся грязными обходными путями.
- установите клиент mysql, сделайте то, что я должен с ним сделать, затем удалите / очистите его.
- скопируйте двоичный файл клиента mysql в образ, сделайте то, что я должен сделать, затем удалите его.
- Создайте схему на другом сервере sql и скопируйте непосредственно файл db (это кажется очень грязным и звучит для меня как загрязненный пул проблем)
Какие-либо предложения? Надеюсь, таким способом, который будет легко поддерживать позже и, возможно, будет соответствовать лучшим практикам?
Ответы:
Вы должны поместить ваш скрипт инициализации в каталог, смонтированный как
/docker-entrypoint-initdb.d
- см. Раздел «Инициализация нового экземпляра» в документации по образу MySQL Docker .источник
/docker-entrypoint-initdb.d
было в хосте, но это на самом деле в контейнере. Я изменилADD
команду для копирования в этот каталог и удалилRUN
команду. Докер успешно создал образ, и я проверил его, и он работает.Я должен был сделать это для целей тестирования.
Вот как я это сделал, используя реальные изображения MySQL / MariaDB на dockerhub и многоэтапную сборку:
Полный рабочий пример здесь: https://github.com/lindycoder/prepopulated-mysql-container-example
источник
Кредиты @Martin Roy
Внесены незначительные изменения, чтобы работать для MySQL ...
Содержание Dockerfile
Содержание setup.sql
Полный рабочий пример здесь: https://github.com/iamdvr/prepopulated-mysql-container-example
источник
Программное обеспечение для управления, такое как Ansible, может помочь вам автоматизировать импорт MySQL без необходимости устанавливать и переустанавливать клиент. Ansible обладает великолепными встроенными функциями для управления образами и контейнерами Docker, а также базами данных MySQL.
источник