Как вы толкаете образ базы данных докера с данными? - PullRequest
0 голосов
/ 31 мая 2018

Я понимаю, что образы докеров для баз данных обычно хранят данные на томе.И этот объем можно смонтировать.

Я пытаюсь создать докер-контейнер с некоторыми данными по умолчанию.

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

Или что произойдет, если вы запустите mongo локально и создадите локальный том, а затем смонтируете том в контейнер mongo как часть сборки?Это вообще возможно, или вы можете указать только монтирование при запуске док-контейнера?И если я разверну образ монго в докер-хабе, будут ли в нем данные, хранящиеся в томе?

1 Ответ

0 голосов
/ 11 января 2019

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

Да , возможно копировать любые данные в образ во время сборки.Пока конфигурация MongoDB указывает на каталог, в который были скопированы файлы базы данных, он будет видеть данные при запуске. Однако , любые изменения, внесенные в базу данных, будут сохранены только в работающем контейнере и будут потеряны при его удалении (если только вы не создадите другое изображение из этого контейнера).Обычно они сохраняются в каталоге данных, но монтирование тома данных на run заменяет все, что изображение было в этом месте.

Как выполнить резервное копирование томов данных в Docker Hub предлагает компромисс, который отсоединяет изображение данных от образа приложения.Во-первых, он расширяет процесс локального резервного копирования для создания контейнера данных , превращая контейнер в образ и выдвигая его:

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup
docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar
docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

Затем можно использовать --volumes-from toзапустите другой контейнер, который использует папки из контейнера данных в качестве тома данных.

docker run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}
docker run --volumes-from=data-container repo/whatEver

(имена ваших изображений, имена контейнеров и пути могут отличаться)

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