Создание, заполнение и использование томов Docker - PullRequest
0 голосов
/ 07 марта 2019

Я подключался к Docker в течение последних нескольких дней и надеюсь вскоре перенести мое веб-приложение Python-MySQL в Docker.

Следствие заключается в том, что мне нужно использовать тома Docker и иметьбыл в тупик в последнее время.Я могу создать том напрямую с помощью

$ docker volume create my-vol

Или косвенно, ссылаясь на несуществующий том в вызове запуска Docker, но я не могу понять, как заполнить эти тома моей базой данных .sqlфайл, без копирования файла с помощью вызова COPY в Dockerfile.

Я попытался напрямую создать том в каталоге, содержащем файл .sql (первый метод, упомянутый выше), и подключить каталог, содержащий.файл sql в моем вызове 'docker run', который перемещает файл .sql в контейнер (я видел это, перемещаясь по оболочке bash внутри контейнера), но при запуске контейнера mariadb, соединяющегося с контейнером mariadb, содержащим базу данных (как предложено в файле readme для mariadb docker), он имеет только стандартные базы данных (information_schema, mysql, performance_schema)

Как создать том, содержащий мою ранее существующую базу данных .sql?

1 Ответ

2 голосов
/ 07 марта 2019

При работе с mariadb в док-контейнере образ поддерживает запуск файлов .sql как часть первого запуска контейнера.Это позволяет вам помещать данные в базу данных до того, как они станут доступны.

С документации mariadb :

Инициализация нового экземпляра

Когда контейнер запускается в первый раз, будет создана новая база данных с указанным именем и инициализирована предоставленными переменными конфигурации.Кроме того, он будет выполнять файлы с расширениями .sh, .sql и .sql.gz, которые находятся в /docker-entrypoint-initdb.d.Файлы будут выполнены в алфавитном порядке.Вы можете легко заполнить свои службы mariadb, смонтировав дамп SQL в этот каталог и предоставив пользовательские образы с предоставленными данными.Файлы SQL будут импортированы по умолчанию в базу данных, указанную в переменной MYSQL_DATABASE.

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

this:

FROM mariadb
COPY ./myscript.sql /docker-entrypoint-initdb.d/myscript.sql

Тогда:

docker run -e MYSQL_DATABASE=mydb mariadb

Тогда возникает вопрос, как вы хотите управлять хранилищем базы данных.Здесь у вас есть два варианта:

  1. Создать привязку тома к хосту, где mariadb хранит базу данных.Это позволит вам легко получить доступ к файлам хранилища базы данных с хост-компьютера.

Пример с запуском Docker:

docker run -v /my/own/datadir:/var/lib/mysql mariadb
Создайте том докера и привяжите его к месту хранения в контейнере.Это будет том, управляемый докером.Этот том сохранит данные между перезапусками контейнера.
docker volume create my_mariadb_volume
docker run -v my_mariadb_volume:/var/lib/mysql mariadb

Он также описан в документах для образа док-станции mariadb .Я могу рекомендовать прочитать его сверху вниз, если вы собираетесь использовать это изображение.

...