Работали ли вы с Volume в Docker?

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

Ответ

Да, постоянно работаю с томами (volumes) в Docker, так как это основа для управления состоянием в контейнеризированных приложениях.

Мой опыт использования разных типов томов:

  • Named Volumes (Именованные тома): Использую для данных, которыми управляет Docker (идеально для баз данных).

    # Создание тома
    docker volume create postgres_data
    # Использование в контейнере
    docker run -d --name db -v postgres_data:/var/lib/postgresql/data postgres:15
  • Bind Mounts (Привязка каталогов): Применяю во время разработки для монтирования исходного кода в контейнер, что позволяет видеть изменения без пересборки образа.

    docker run -d --name dev-app -v $(pwd)/src:/app/src my-app-image
  • tmpfs Mounts: Использовал для временных чувствительных к производительности данных, которые не нужно сохранять (например, /tmp).

Ключевые практики, которым я следую:

  1. Для production-БД всегда использую Named Volumes и настраиваю регулярное резервное копирование содержимого тома.
  2. В Docker Compose явно объявляю тома для удобства управления.
    version: '3.8'
    services:
      database:
        image: postgres:15
        volumes:
          - db_data:/var/lib/postgresql/data
    volumes:
      db_data:
  3. Понимаю разницу между VOLUME в Dockerfile (декларация) и флагом -v при запуске (реальное монтирование).