Я иногда очень часто останавливаю / запускаю докер, когда добавляю новые функции в свое приложение.
docker-compose up -d
docker-compose stop
Я использую в значительной степени простую настройку докеров postgres (см. Ниже). Я сопоставляю папку / data своему хосту.
Есть ли что-то, о чем я должен беспокоиться, если я останавливаю / запускаю докер много раз в день с точки зрения повреждения данных?
Вызов docker-compose stop - лучший способ остановить мой экземпляр postgres?
Моя служба postgres в моем docker-compose выглядит так:
db:
image: postgres:9.4
volumes:
- "/home/deploy/data/pgdata:/var/lib/postgresql/data"
restart: always
Эта установка в настоящее время работает без сбоев в разработке, но как только она будет запущена в производство, я хочу убедиться, что следую лучшим практикам и т. д.





Использовать,
docker-compose down -v
По сути, он удаляет все добавленные вами тома. Если вы этого не сделаете, эти тома будут висеть и занимать ваше пространство. Он только удаляет том внутри контейнера докеров. Том на вашем хосте остается и переживает удаление контейнера, если вы хотите, чтобы эти данные пережили удаление контейнера.
Всякий раз, когда вы создаете контейнер докера с помощью docker run, Docker создает том / каталог для хранения сведений о контейнерах. После выполнения docker run, если вы заглянете в /var/lib/docker/containers, вы увидите по одному каталогу для каждого запущенного контейнера. Если вы не удалили тома для предыдущего контейнера, вы увидите много каталогов в каталоге «контейнер». Название этих каталогов будет состоять из очень длинных случайных букв и цифр. Итак, если вы не скажете докеру удалить эти каталоги при остановке контейнера, он останется там навсегда. Опция v, о которой я упоминал выше, удалит эти каталоги при снятии контейнера.
Имейте в виду, что просматривать содержимое каталога /var/lib/docker можно только как пользователь root. Чтобы перейти к пользователю root, используйте sudo -i, прежде чем пытаться просмотреть содержимое каталога.
Total reclaimed space: 24.48GB спасибо за подсказку!
Не стоял вопрос, как полностью остановить PostgreSQL?
В частности, базы данных обычно спроектированы таким образом, что очень трудно потерять данные, даже если машина теряет питание во время записи чего-либо на диск. (Это связано с некоторой потерей производительности.) Пока у вас не более одного экземпляра PostgreSQL одновременно, использующего одно и то же хранилище данных, я ожидаю, что он не потеряет данные или иным образом не повредит себя; худшее, что вы должны ожидать увидеть, - это сообщение при запуске о том, что он восстанавливается из журнала упреждающей записи или чего-то подобного.
докер стоп отправит сигнал контейнеру, предлагающий ему полностью завершить работу, и PostgreSQL воспримет это как сигнал для завершения работы. Похоже, что docker-compose stop, докер-сочинять и отправка ^ C в докер-сочинять используют один и тот же механизм. Таким образом, то, как вы это делаете сейчас, должно привести к чистому завершению работы (при условии, что PostgreSQL завершит очистку в течение 10 секунд).
Я считаю, что вы можете использовать перезапуск docker-compose для конкретных сервисов или докер-составить --форс-воссоздать для них. Это поможет, если вы перестроили контейнер приложения и перезапустили его, но не базу данных.
docker stop задокументирован для отправки SIGTERM, ожидания 10 секунд, затем отправки SIGKILL; процедура в вопросе верна. Я добавил к своему ответу параграф, объясняющий это.
так что ты имеешь в виду? если я использую
stop, как я могу определить, остались ли эти тома? Извините, просто не понимаю, что "подожди и съешь свое пространство" означает, есть ли команда докеров, где я могу видеть, как они задерживаются?