Удалятся ли данные контейнера при его удалении?

«Удалятся ли данные контейнера при его удалении?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Причина: Каждый контейнер использует собственную изолированную файловую систему (контейнерный слой), которая существует только на время жизни контейнера. Это принцип эфемерности (ephemerality) контейнеров.

Как сохранить данные:

  1. Docker Volumes (рекомендуемый способ): Управляемые Docker'ом хранилища, независимые от жизненного цикла контейнера.
  2. Bind Mounts: Примонтирование конкретной директории с хоста в контейнер.

Пример с Docker Volume:

# 1. Создаем именованный volume
$ docker volume create app_data

# 2. Запускаем контейнер и записываем данные в volume
$ docker run -d --name db_container -v app_data:/var/lib/postgresql/data postgres:15

# 3. Останавливаем и удаляем контейнер
$ docker stop db_container && docker rm db_container

# 4. Запускаем новый контейнер, подключая тот же volume
$ docker run -d --name new_db_container -v app_data:/var/lib/postgresql/data postgres:15
# Данные из предыдущего контейнера будут доступны в новом.

Практическое правило в DevOps: Состояние приложения (базы данных, загруженные файлы, кэши) никогда не должно храниться внутри контейнера. Для stateful-сервисов всегда используются volumes или внешние managed-сервисы (например, Amazon RDS, Google Cloud SQL).