(написано для всех, кто сталкивается с этим) Поскольку требования к доступу к коду часто отличаются от данных, и контроль версий должен иллюстрировать разработку, а не, скажем, резервное копирование некоторых изменений базы данных, общая рекомендация - хранить данные отдельно отисходный код.Учебные пособия по 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
(имена ваших изображений, имена контейнеров и пути могут отличаться)