Как безопасно остановить / запустить мой сервер postgres при использовании docker-compose

Я иногда очень часто останавливаю / запускаю докер, когда добавляю новые функции в свое приложение.

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

Эта установка в настоящее время работает без сбоев в разработке, но как только она будет запущена в производство, я хочу убедиться, что следую лучшим практикам и т. д.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
7 669
2

Ответы 2

Использовать,

docker-compose down -v

По сути, он удаляет все добавленные вами тома. Если вы этого не сделаете, эти тома будут висеть и занимать ваше пространство. Он только удаляет том внутри контейнера докеров. Том на вашем хосте остается и переживает удаление контейнера, если вы хотите, чтобы эти данные пережили удаление контейнера.

Всякий раз, когда вы создаете контейнер докера с помощью docker run, Docker создает том / каталог для хранения сведений о контейнерах. После выполнения docker run, если вы заглянете в /var/lib/docker/containers, вы увидите по одному каталогу для каждого запущенного контейнера. Если вы не удалили тома для предыдущего контейнера, вы увидите много каталогов в каталоге «контейнер». Название этих каталогов будет состоять из очень длинных случайных букв и цифр. Итак, если вы не скажете докеру удалить эти каталоги при остановке контейнера, он останется там навсегда. Опция v, о которой я упоминал выше, удалит эти каталоги при снятии контейнера. Имейте в виду, что просматривать содержимое каталога /var/lib/docker можно только как пользователь root. Чтобы перейти к пользователю root, используйте sudo -i, прежде чем пытаться просмотреть содержимое каталога.

так что ты имеешь в виду? если я использую stop, как я могу определить, остались ли эти тома? Извините, просто не понимаю, что "подожди и съешь свое пространство" означает, есть ли команда докеров, где я могу видеть, как они задерживаются?

Blankman 30.09.2018 21:56
Total reclaimed space: 24.48GB спасибо за подсказку!
Blankman 01.10.2018 01:06

Не стоял вопрос, как полностью остановить PostgreSQL?

Laurenz Albe 01.10.2018 08:03

В частности, базы данных обычно спроектированы таким образом, что очень трудно потерять данные, даже если машина теряет питание во время записи чего-либо на диск. (Это связано с некоторой потерей производительности.) Пока у вас не более одного экземпляра PostgreSQL одновременно, использующего одно и то же хранилище данных, я ожидаю, что он не потеряет данные или иным образом не повредит себя; худшее, что вы должны ожидать увидеть, - это сообщение при запуске о том, что он восстанавливается из журнала упреждающей записи или чего-то подобного.

докер стоп отправит сигнал контейнеру, предлагающий ему полностью завершить работу, и PostgreSQL воспримет это как сигнал для завершения работы. Похоже, что docker-compose stop, докер-сочинять и отправка ^ C в докер-сочинять используют один и тот же механизм. Таким образом, то, как вы это делаете сейчас, должно привести к чистому завершению работы (при условии, что PostgreSQL завершит очистку в течение 10 секунд).

Я считаю, что вы можете использовать перезапуск docker-compose для конкретных сервисов или докер-составить --форс-воссоздать для них. Это поможет, если вы перестроили контейнер приложения и перезапустили его, но не базу данных.

docker stop задокументирован для отправки SIGTERM, ожидания 10 секунд, затем отправки SIGKILL; процедура в вопросе верна. Я добавил к своему ответу параграф, объясняющий это.
David Maze 01.10.2018 12:10

Другие вопросы по теме