Ответ
Да, данные, созданные внутри контейнера, удаляются при его удалении (docker rm), если они не сохранены во внешнем хранилище.
Причина: Каждый контейнер использует собственную изолированную файловую систему (контейнерный слой), которая существует только на время жизни контейнера. Это принцип эфемерности (ephemerality) контейнеров.
Как сохранить данные:
- Docker Volumes (рекомендуемый способ): Управляемые Docker'ом хранилища, независимые от жизненного цикла контейнера.
- 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).