Какую файловую систему используешь для Docker и почему?

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

Ответ

В production-средах для Docker я предпочитаю использовать overlay2 в качестве драйвера хранения (storage driver). Это современный, производительный и рекомендуемый по умолчанию выбор для большинства дистрибутивов Linux.

Почему overlay2?

  1. Производительность и эффективность: Использует механизм Union File System с copy-on-write (CoW). Слои образов и контейнеров объединяются в единое представление, что минимизирует накладные расходы на ввод-вывод.
  2. Надежность и стабильность: Широко протестирован, активно поддерживается в ядре Linux. Меньше известных проблем по сравнению с устаревшими драйверами, такими как aufs или devicemapper.
  3. Требования к ядру: Требует ядро версии 4.0 или выше и поддержку файловой системы overlay.

Как проверить и настроить:

# Проверить текущий драйвер хранения
docker info | grep -i "storage driver"

# Типичная конфигурация в /etc/docker/daemon.json
{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

Альтернативы и когда их рассматривать:

  • btrfs / zfs: Использую в специфичных сценариях, где необходимы продвинутые возможности снапшотов, сжатия или дедупликации на уровне файловой системы. Требуют отдельного раздела, отформатированного в btrfs/zfs.
  • aufs: Может быть запасным вариантом на очень старых системах, где ядро не поддерживает overlay2. В остальных случаях избегаю.
  • devicemapper (direct-lvm): Исторически использовался на RHEL/CentOS, но сейчас считается устаревшим. Не рекомендую для новых развертываний.

Важно: Драйвер vfs не использует слои, создавая полные копии, что приводит к огромному расходу дискового пространства и непригодно для production.