В свежих версиях Docker Engine 29.0 и новее контейнерный runtime containerd по умолчанию становится хранилищем образов вместо устаревших граф-драйверов типа overlay2. Если вы обновлялись с ранней версии, ваш демон продолжит работать на legacy-драйверах, пока вы не включите новое хранилище. Containerd использует технологию snapshotters для управления слоями образов и контейнеров, что кардинально отличается от классических драйверов. Важное ограничение: такое хранилище не работает при использовании remapping пользовательских пространств (userns-remap).
Внедрение containerd image store дает сразу несколько конкретных преимуществ. Вы сможете локально создавать и хранить мультиплатформенные образы без внешних бьюлеров, а также работать с аттестациями и списками материалов безопасности (SBOM), используя поддерживаемые контейнером image indices. Также появляется полноценная поддержка контейнеров Wasm. Система задействует расширяемые snapshotters для таких функций, как ленивое подтягивание образов через stargz или распределение образы по сети через nydus и dragonfly. Для большинства пользователей переход полностью прозрачен: смена бэкенда не ломает рабочие процессы, хотя потребует места на диске.
Новое хранилище занимает больше места, потому что сохраняет слои в сжатом и разжатом форматах одновременно, тогда как legacy-драйверы хранили только разжатые данные. При подтягивании образа containerd сохраняет сжатые копии и распаковывает их на диск. Это значит, что каждый слой занимает больше места, но обеспечивает быстрый доступ. Проблема усугубляется, если несколько образов делят один и тот же базовый слой: в новой системе каждый образ хранит свою сжатую копию базового слоя, что создает накладные расходы пропорционально количеству образов. Если место на диске критично, нужно регулярно удалять неиспользуемые образы командой docker image prune, мониторить占用 с помощью docker system df и выносить данные в раздел с достаточным объемом.
При обновлении с предыдущей версии хранилище нужно включить вручную. В файл /etc/docker/daemon.json следует добавить соответствующую конфигурацию и перезапустить демон. После перезагрузки старые изображения и контейнеры с драйвером overlay2 станут невидимыми, но данные останутся на диске. Чтобы снова их увидеть, нужно вернуть старую конфигурацию или сначала выгрузить образы через docker save и загрузить их заново. В Docker Engine также есть экспериментальная функция автоматического переключения, которая сработает, если запущено меньше пяти контейнеров и образов. Перед тестированием обязательно сделайте бэкапы, так как автоматическая миграция может не сработать в сложных сценариях.