Какие три основных типа монтирования данных существуют в Docker?

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

Ответ

В Docker есть три основных типа монтирования для работы с данными:

1. Тома (Volumes)

  • Что это: Управляемый Docker'ом механизм хранения. Тома создаются и управляются через Docker CLI/API и хранятся в специальной директории на хосте (/var/lib/docker/volumes/).
  • Когда использовать: Для постоянных данных, которые должны пережить перезапуск контейнера. Это лучшая практика.
  • Пример:
    # Создание тома
    docker volume create myapp_data
    # Запуск контейнера с томом
    docker run -d --name web -v myapp_data:/usr/share/nginx/html nginx:alpine

2. Bind Mounts

  • Что это: Монтирование конкретного файла или директории с файловой системы хоста в контейнер.
  • Когда использовать: Для разработки (чтобы видеть изменения кода в реальном времени) или для монтирования системных файлов (например, /etc/localtime).
  • Пример:
    # Монтирование директории с кодом для разработки
    docker run -d --name dev-app -v /home/user/project/src:/app/src python:3.11

3. tmpfs Mounts

  • Что это: Монтирование временного хранилища в оперативной памяти хоста. Данные существуют только на время жизни контейнера и никогда не записываются на диск.
  • Когда использовать: Для хранения временных, чувствительных данных (например, сессионных файлов), чтобы повысить производительность и безопасность.
  • Пример:
    # Монтирование tmpfs для сессий
    docker run -d --name app --tmpfs /app/sessions:size=100m,mode=1777 myapp:latest

Сравнение:

  • Управление: Volumes (Docker), Bind Mounts (Пользователь), tmpfs (ОЗУ).
  • Персистентность: Volumes (Да), Bind Mounts (Да), tmpfs (Нет).
  • Производительность: tmpfs (Высокая), Volumes/Bind Mounts (Зависит от диска).