L1Qu0R
@L1Qu0R
Веб разработчик

Как правильней сохранять состояние БД в docker?

Как по феншую сохранить состояние бд при локальной разработке?
У меня запущено два образа, первый это, например mysql, а второй это уже веб сервер + само приложение.
Так вот как не терять состояние базы, постоянно делать дамп при завершении работы и при старте заливать? Или при запуске маунтить всю бд: -v /mysql:/var/lib/mysql ?
Наставьте на путь истинный
  • Вопрос задан
  • 7695 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
-v /mysql:/var/lib/mysql это вполне по феншую
Я делаю что-то вроде этого:
- в контейнере бд -v ./mysql:/var/lib/mysql
- в контейнере веб сервера -v ./www:/var/www/html
- в случае необходимости сборки собственных образов держу в папке build докерфайлы и нужные им данные.

И в одной папке с проектом у меня папка с базой данных, папка со скриптами/исходниками и другими файловыми данными и папка с образами.

Все аккуратно лежит рядышком, запускается и гасится через docker-compose в одном комплексе.

Смысла делать именнованные docker volumes я не понял, тоже самое, только будет лежать в папке /var/lib/docker. Единственный резон это если том с данными используется сразу несколькими контейнерами, и по имени можно сразу понять что это такое.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
zenwalker
@zenwalker
0xABADBABE
Вариант 1:
Замаунтить в контейнер директорию с хост-машины (т.е. как вы и сказали: -v /mysql:/var/lib/mysql).

Вариант 2:
Создать volume и замаунтить его в контейнер.

$ docker volume create --name mysql_data
$ docker run -v mysql_data:/var/lib/mysql mysql

Чтиво по теме:
https://docs.docker.com/engine/tutorials/dockervolumes/
Ответ написан
@lega
постоянно делать дамп при завершении работы и при старте заливать?

Не удаляйте контейнер, тогда данные не пропадут, а в контейнер приложения можно примаунтить сорцы, и "обновлять" без перезапуска.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы