Что такое Docker Volume и какова его цель?

«Что такое Docker Volume и какова его цель?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Docker Volume — это механизм для сохранения и управления данными, независимыми от жизненного цикла контейнера.

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

Типы томов:

  1. Именованные тома (Named Volumes): Управляются Docker'ом, предпочтительный способ.
    # Создание и использование
    docker volume create my_volume
    docker run -v my_volume:/data alpine
  2. Связывание каталогов (Bind Mounts): Связывают конкретный путь на хосте с путем в контейнере.
    docker run -v /home/user/app:/app alpine

Пример в Docker Compose:

services:
  db:
    image: mysql:8
    volumes:
      - db_data:/var/lib/mysql # Именованный том
      - ./config:/etc/mysql/conf.d # Bind mount

volumes:
  db_data: # Том будет создан автоматически

Почему это важно? Контейнеры по своей природе эфемерны. Тома решают проблему потери данных, позволяют делиться данными между контейнерами и обеспечивают более высокую производительность ввода-вывода по сравнению с файловой системой контейнера.