Ответ
Docker Volume — это основной механизм для сохранения данных, генерируемых и используемых Docker-контейнерами. Volume управляется самим Docker, хранится на хост-системе в специальной директории (/var/lib/docker/volumes/ на Linux) и существует независимо от жизненного цикла контейнера.
Основное назначение — обеспечить сохранность данных (например, баз данных, логов, загруженных файлов) даже после остановки, удаления или пересоздания контейнера.
Ключевые типы хранения данных в Docker:
-
Volumes (Именованные тома):
- Предпочтительный способ.
- Создаются и управляются командами
docker volume .... - Легко бэкапить, переносить и использовать совместно несколькими контейнерами.
-
Bind Mounts (Привязка директории хоста):
- Прямое монтирование файла или папки с хост-системы в контейнер.
- Полезно для разработки, когда нужно «пробросить» исходный код в контейнер для live-reloading.
- Производительность может быть ниже, чем у volumes.
Пример использования именованного Volume:
# 1. Создать именованный том
docker volume create postgres_data
# 2. Запустить контейнер PostgreSQL и подключить к нему том
# Данные будут сохраняться в 'postgres_data' на хосте
docker run -d
--name my-postgres
-e POSTGRES_PASSWORD=mysecretpassword
-v postgres_data:/var/lib/postgresql/data
postgres:13
# 3. Даже если удалить контейнер, данные останутся в томе
docker rm -f my-postgres
# 4. Можно запустить новый контейнер, подключив тот же том,
# и все данные будут на месте
docker run -d --name new-postgres ... -v postgres_data:/var/lib/postgresql/data postgres:13
Использование Volumes — это best practice для управления состоянием (stateful) приложений в Docker.