Практика по Docker: остановка и перезапуск контейнеризированного приложения с сохранением данных

11.09.2025
0
29
---

Практика по Docker: остановка и перезапуск контейнеризированного приложения с сохранением данных. Задумывались, куда пропали записи вашей БД после выполнения docker compose down? Если да, этот челлендж для вас.

Это упражнение рассчитано на средний уровень (“Medium”) по теме контейнеров Docker. Цель — попрактиковаться с остановкой, перезапуском контейнеров и увидеть, как файловая система контейнера сохраняет изменения.

Что описано

Контейнеры — не просто процессы
Контейнер — это процесс (или набор процессов), работающий в изолированной среде, с собственной файловой системой. Изображения (images) предоставляют базовые слои, а контейнер добавляет “copy-on-write” слой (записываемый слой) для хранения изменений.

Приложение в контейнере
В упражнении запущено простое приложение на Flask, личный трекер финансов. Оно хранит данные в файле /var/lib/app/test.txt внутри контейнера.

Что нужно сделать

Через веб-интерфейс приложения добавьте одну или несколько записей.

Чтобы убедиться, что они записаны, используйте команду внутри контейнера:

cat /var/lib/app/test.txt

Остановить контейнер (docker stop CONTAINER_ID_OR_NAME) — при этом Docker посылает основному процессу сигналы (по умолчанию SIGTERM, либо то, что задано через STOPSIGNAL), ждёт, пока процесс “прекратит работу” (по умолчанию 10 секунд), затем — если процесс не завершился — отправляет SIGKILL.


После остановки веб-интерфейс перестанет работать, вы не сможете добавлять/просматривать записи.


Перезапустить контейнер (docker start CONTAINER_ID_OR_NAME) — контейнер возвращается в работу, всё, что было в записываемом слое, сохраняется.


После старта проверяется, что записи, которые вы добавили ранее, всё ещё там.


Удалить контейнер (docker rm CONTAINER_ID_OR_NAME) — полностью удалить остановленный контейнер; при этом удаляется весь его файловый слой, все данные внутри него (если они не вынесены в томах (volumes)).


Запустить новый контейнер из того же образа:

docker run -d --name my-finance -p 8080:8080 registry.test.com/my-finance


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


Что показывает упражнение

Останавливая и снова запуская контейнер, изменения, сделанные внутри него (в записываемом слое), сохраняются.

Но удалив контейнер, вы теряете эти данные, если они не были сохранены в “volumes”.

Таким образом, важно понимать разницу между “остановкой/перезапуском” и “удалением + запуском нового”.

Понравиласть статья? Жми лайк или расскажи своим друзьям!
Теги к новости:
Docker, Linux
Комментарии
Добавить комментарий
Добавить свой комментарий:
Ваше Имя:
Ваш E-Mail:
Это код:
Кликните на изображение чтобы обновить код, если он неразборчив
Введите сюда:
Похожие новости:
03.09.2025
Deployment и DaemonSet являются двумя типами контроллеров, которые управляют развертыванием и обеспечением жизненного цикла подов (групп контейнеров). Они оба играют важные роли, но используются для разных целей и сценариев.
03.09.2025
Это программные системы (RabbitMQ, Apache Kafka, Redis, ActiveMQ), которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей
08.09.2025
В PostgreSQL управление доступом построено на ролях (roles), которые могут быть пользователями или группами. Роли создаются на уровне всего кластера, а не отдельной базы. У ролей есть атрибуты (LOGIN, SUPERUSER, CREATEDB, CREATEROLE, REPLICATION,
31.08.2025
Вертикальное масштабирование пода без перезапуска стало возможным начиная с Kubernetes v1.33. Если вы хотели выдать приложению (Pod в Kubernetes) больше памяти или CPU, его приходилось перезапускать.
08.09.2025
Нет, нельзя изменить DNS у уже запущенного контейнера напрямую через CLI. Но есть обходные способы!
все шаблоны для dle на сайте шаблоны dle 11.2 скачать
выбрать фон