Что такое Docker Volume и для чего он используется

Ответ

Docker Volume — это основной механизм для сохранения данных, генерируемых и используемых Docker-контейнерами. Volume управляется самим Docker, хранится на хост-системе в специальной директории (/var/lib/docker/volumes/ на Linux) и существует независимо от жизненного цикла контейнера.

Основное назначение — обеспечить сохранность данных (например, баз данных, логов, загруженных файлов) даже после остановки, удаления или пересоздания контейнера.

Ключевые типы хранения данных в Docker:

  1. Volumes (Именованные тома):

    • Предпочтительный способ.
    • Создаются и управляются командами docker volume ....
    • Легко бэкапить, переносить и использовать совместно несколькими контейнерами.
  2. 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.