Сегодня решил развернуть свой проект на докер. Простейшее приложение на django, в котором по нажатию кнопок данные вытаскиваются из таблиц, записываются в другие и т.д.
Захожу в папку проекта, там естественно лежат файлы dockerfile, docker-compose.yml. Так вот, ввожу команду docker-compose up. Создаётся окружение, устанавливаются в pip модули django,psycopg2. Затем makemigrations и migrate. В итоге я получаю готовый проект, сервер запускается и всё работает. Но бд то пустая.
Как мне в докере проинициализировать значения бд и сохранить так, чтобы я мог скинуть папку с проектом и при вводе docker-compose up - происходило всё то же + инициализация бд базовыми значениями. Я так понял, обычно это делают так, или нет ?
Вариантов много. Можно использовать Django fixtures, можно сделать дамп базы и как-то заливать его в docker обратно в базу. Поскольку я почти не работал с docker, то конкретное решение не могу сказать, но это несложно. Если данных немного, то можно генерировать при помощи ./manage.py dumpdata, если много, то сделать pg_dump.
Я не помню детали как делать контейнеры докера, поэтому пишу не как решение, а как комментарий. Как вариант, если это данные, которые нужны для любой инсталляции приложения, то их надо добавить в репозиторий либо:
1) в виде миграций, которые добавляют нужные данные в базу
2) в виде fixtures
Если это данные, которые просто нужны для демонстрации, то правильнее наверное загружать их вручную из дампа после создания контейнера.
Чтобы сохранить данные не только внутри докер контейнера, а ещё и в локальной папке с проектом, вам нужно в docker-compose.yml создать volume и замаунтить его на локальную папку, а в сервисе с postgre сделать volumes_from