Именованные тома
Сохраняем данные между перезапусками контейнера с помощью именованных томов.
Именованный том (named volume) — управляемое Docker хранилище данных с собственным именем, живущее независимо от контейнеров.
Что такое том
Том — это место для данных, которым управляет сам Docker. Он лежит в служебной области Docker, не привязан к конкретному контейнеру и не исчезает при docker rm. Тома — рекомендованный способ хранить данные баз и других stateful-сервисов.
Управление томами
Создать том можно явно или дать Docker создать его автоматически при первом использовании:
# Создать том
docker volume create pgdata
# Список томов
docker volume ls
# Подробности о томе
docker volume inspect pgdata
Подключение тома: флаг -v
Том подключают к контейнеру флагом -v ИМЯ_ТОМА:ПУТЬ_В_КОНТЕЙНЕРЕ. PostgreSQL хранит данные в /var/lib/postgresql/data — туда и смонтируем том:
docker run -d --name db \
-e POSTGRES_PASSWORD=secret \
-v pgdata:/var/lib/postgresql/data \
postgres:16
Теперь все данные базы пишутся в том pgdata, а не в эфемерный слой контейнера.
Проверка: данные переживают пересоздание
# Удаляем контейнер — том остаётся
docker rm -f db
# Запускаем новый контейнер с тем же томом
docker run -d --name db \
-e POSTGRES_PASSWORD=secret \
-v pgdata:/var/lib/postgresql/data \
postgres:16
Новый контейнер увидит все прежние таблицы и записи — данные жили в томе и пережили пересоздание контейнера. Это и есть правильный способ запускать базы в Docker.
Удаление томов
Том нужно удалять осознанно — данные в нём не исчезают сами:
# Удалить конкретный том
docker volume rm pgdata
# Удалить все неиспользуемые тома
docker volume prune
Итог
- Именованный том — управляемое Docker хранилище, не зависящее от жизни контейнера.
- Подключается флагом
-v ИМЯ:ПУТЬ; данные переживают пересоздание контейнера. - Тома — рекомендованный способ хранить данные баз вроде PostgreSQL.