Ответ
OverlayFS — это современная объединяющая файловая система (union filesystem), которая является стандартным драйвером хранения (storage driver) в Docker. Она позволяет эффективно объединять несколько директорий (слоёв) в единое представление, что лежит в основе работы Docker-образов и контейнеров.
Архитектура слоёв в Docker:
- lowerdir (нижние, read-only слои): Базовый образ (например,
ubuntu:latest) и все слои из Dockerfile (RUN,COPYи т.д.). Эти слои общие для всех контейнеров, основанных на одном образе. - upperdir (верхний, read-write слой): Уникальный для каждого контейнера слой, куда записываются все изменения (создание, модификация, удаление файлов) во время его жизни.
- merged: Единое виртуальное представление файловой системы контейнера, которое видит запущенный процесс.
Практический пример: При запуске контейнера docker run -it ubuntu bash Docker монтирует OverlayFS. Если внутри контейнера изменить файл из нижнего слоя, OverlayFS реализует механизм copy-on-write (CoW): файл копируется в upperdir, и изменения применяются уже к этой копии.
Проверка и отладка:
# Узнать, какой storage driver используется
docker info | grep "Storage Driver"
# Просмотреть информацию о слоях конкретного контейнера
docker inspect <container_id> --format='{{.GraphDriver.Data}}'
Преимущества для DevOps:
- Экономия дискового пространства: Общие слои не дублируются.
- Быстрый запуск контейнеров: Не нужно копировать весь образ.
- Эффективное использование кэша сборки: Изменение в одном слое Dockerfile не требует пересборки предыдущих.
Ограничения и нюансы:
- Работа с OverlayFS требует поддержки ядром (
CONFIG_OVERLAY_FS). - Производительность операций, интенсивно использующих CoW (например, частые записи в большие файлы), может быть ниже, чем у нативных ФС. Для таких сценариев используют volumes.