Драйверы хранения данных Docker

В идеале на записываемый слой контейнера записывается очень мало данных, а для записи данных используются тома Docker. Однако некоторые рабочие нагрузки требуют возможности записи на записываемый слой контейнера. Здесь на помощь приходят драйверы хранения.

Docker поддерживает несколько драйверов хранения, используя подключаемую архитектуру. Драйвер хранилища управляет тем, как образы и контейнеры хранятся и управляются на вашем хосте Docker. После прочтения обзор драйверов хранения следующим шагом будет выбор наилучшего драйвера хранения для ваших рабочих нагрузок. Используйте драйвер хранилища с наилучшей общей производительностью и стабильностью в самых обычных сценариях.

Docker Engine предоставляет следующие драйверы для хранения данных в Linux:

Драйвер

Описание

overlay2

overlay2 является предпочтительным драйвером хранилища для всех поддерживаемых в настоящее время дистрибутивов Linux и не требует дополнительной настройки.

fuse-overlayfs

Драйвер fuse-overlayfs предпочтителен только для запуска Rootless Docker на хосте, не поддерживающем rootless overlay2. На Ubuntu и Debian 10 драйвер fuse-overlayfs использовать не нужно, а overlay2 работает даже в режиме rootless. Подробности см. в документации по rootless режиму.

btrfs и zfs

Драйверы хранения btrfs и zfs позволяют использовать расширенные возможности, такие как создание «моментальных снимков», но требуют большего обслуживания и настройки. Каждый из них зависит от правильной настройки резервной файловой системы.

vfs

Драйвер хранилища vfs предназначен для целей тестирования и для ситуаций, в которых не может быть использована файловая система «копирование при записи». Производительность этого драйвера хранилища невысока, поэтому его не рекомендуется использовать в производственных целях.

aufs

Драйвер хранения aufs был предпочтительным драйвером хранения для Docker 18.06 и старше, когда работал на Ubuntu 14.04 на ядре 3.13, которое не поддерживало overlay2. Однако в текущих версиях Ubuntu и Debian появилась поддержка overlay2, который теперь является рекомендуемым драйвером.

devicemapper

Драйвер хранилища devicemapper требует direct-lvm для производственных сред, поскольку loopback-lvm, несмотря на нулевую конфигурацию, имеет очень низкую производительность. devicemapper был рекомендуемым драйвером хранилища для CentOS и RHEL, поскольку их версии ядра не поддерживали overlay2. Однако в текущих версиях CentOS и RHEL появилась поддержка overlay2, который теперь является рекомендуемым драйвером.

overlay

Устаревший драйвер overlay использовался для ядер, которые не поддерживали функцию «multiple-lowerdir», необходимую для overlay2 Все поддерживаемые в настоящее время дистрибутивы Linux теперь обеспечивают поддержку этой функции, и поэтому он устарел.

Docker Engine имеет список приоритетов того, какой драйвер хранения использовать, если драйвер хранения не настроен явно, предполагая, что драйвер хранения соответствует необходимым условиям, и автоматически выбирает совместимый драйвер хранения. Порядок можно увидеть в исходный код для Docker Engine {{ site.docker_ce_version}}.

Некоторые драйверы хранилищ требуют использования определенного формата для резервной файловой системы. Если у вас есть внешние требования к использованию определенной резервной файловой системы, это может ограничить ваш выбор. См. Поддерживаемые резервные файловые системы.

После того как вы сузили круг возможных драйверов хранения данных, ваш выбор определяется характеристиками вашей рабочей нагрузки и уровнем стабильности, который вам необходим. См. Другие соображения для помощи в принятии окончательного решения.

Поддерживаемые драйверы хранения данных для каждого дистрибутива Linux

Примечание

Docker Desktop и Docker в режиме Rootless

Изменение драйвера хранения не поддерживается в Docker Desktop для Mac и Docker Desktop для Windows, и можно использовать только драйвер хранения по умолчанию. Приведенная ниже сравнительная таблица также не применима для режима Rootless. О драйверах, доступных в режиме rootless, см. в Документация по Rootless режиму.

Ваша операционная система и ядро могут поддерживать не все драйверы хранения данных. Например, aufs поддерживается только в Ubuntu и Debian и может потребовать установки дополнительных пакетов, а btrfs поддерживается, только если ваша система использует btrfs в качестве хранилища. В целом, следующие конфигурации работают на последних версиях дистрибутива Linux:

Linux дистрибутив

Рекомендуемые драйверы накопителей

Альтернативные драйверы

Ubuntu

overlay2

overlay¹, devicemapper², aufs³, zfs, vfs

Debian

overlay2

overlay¹, devicemapper², aufs³, vfs

CentOS

overlay2

overlay¹, devicemapper², zfs, vfs

Fedora

overlay2

overlay¹, devicemapper², zfs, vfs

SLES 15

overlay2

overlay¹, devicemapper², vfs

RHEL

overlay2

overlay¹, devicemapper², vfs

¹) Драйвер хранения данных overlay устарел и будет удалён в одном из будущих выпусков. Пользователям драйвера хранилища overlay рекомендуется перейти на overlay2.

²) Драйвер хранилища devicemapper устарел и будет удалён в одном из будущих выпусков. Пользователям драйвера хранилища devicemapper рекомендуется перейти на overlay2.

³) Драйвер хранилища aufs устарел и будет удалён в одном из будущих выпусков. Пользователям драйвера хранилища aufs рекомендуется перейти на overlay2.

Если возникают сомнения, то наилучшей универсальной конфигурацией является использование современного дистрибутива Linux с ядром, поддерживающим драйвер хранения overlay2, и использование томов Docker для тяжелых в плане записи рабочих нагрузок вместо того, чтобы полагаться на запись данных на записываемый слой контейнера.

Драйвер хранилища vfs обычно не является лучшим выбором и предназначен в основном для отладочных целей в ситуациях, когда не поддерживаются другие драйверы хранилища. Перед использованием драйвера хранилища vfs обязательно прочитайте о его характеристики и ограничения по производительности и хранению.

Известно, что рекомендации, приведенные в таблице выше, работают у большого числа пользователей. Если вы используете рекомендованную конфигурацию и обнаружите воспроизводимую проблему, она, скорее всего, будет исправлена очень быстро. Если драйвер, который вы хотите использовать, не рекомендован в соответствии с этой таблицей, вы можете использовать его на свой страх и риск. Вы можете и должны сообщать о любых проблемах, с которыми вы столкнулись. Однако такие проблемы имеют более низкий приоритет, чем проблемы, возникающие при использовании рекомендованной конфигурации.

В зависимости от дистрибутива Linux, могут быть доступны другие драйверы хранения данных, например, btrfs. Эти драйверы хранения могут иметь преимущества для конкретных случаев использования, но могут потребовать дополнительной настройки или обслуживания, поэтому их не рекомендуется использовать в распространенных сценариях. Подробности см. в документации к этим драйверам хранения данных.

Поддерживаемые резервные файловые системы

Что касается Docker, резервная файловая система - это файловая система, в которой находится /var/lib/docker/. Некоторые драйверы хранения работают только с определенными резервными файловыми системами.

Драйвер хранилища

Поддерживаемые резервные файловые системы

overlay2, overlay

xfs с ftype=1, ext4

fuse-overlayfs

любая файловая система

aufs

xfs, ext4

devicemapper

direct-lvm

btrfs

btrfs

zfs

zfs

vfs

любая файловая система

Другие соображения

Пригодность для вашей рабочей нагрузки

Кроме всего прочего, каждый драйвер хранения имеет свои собственные характеристики производительности, которые делают его более или менее подходящим для различных рабочих нагрузок. Рассмотрим следующие обобщения:

  • overlay2, aufs и overlay работают на уровне файлов, а не блоков. Это позволяет более эффективно использовать память, но при интенсивной записи слой контейнера, доступный для записи, может стать довольно большим.

  • Драйверы хранения на уровне блоков, такие как devicemapper, btrfs и zfs, лучше справляются с нагрузками, связанными с записью (хотя и не так хорошо, как тома Docker).

  • Для большого количества небольших записей или контейнеров с большим количеством уровней или глубоких файловых систем, overlay может работать лучше, чем overlay2, но потребляет больше инодов, что может привести к исчерпанию инодов.

  • btrfs и zfs требуют много памяти.

  • zfs - хороший выбор для высокоплотных рабочих нагрузок, таких как PaaS.

Более подробную информацию о производительности, пригодности и лучших практиках можно найти в документации к каждому драйверу хранилища.

Системы хранения с общим доступом и драйвер хранения

Если на вашем предприятии используются SAN, NAS, аппаратные RAID-массивы или другие системы хранения с общим доступом, они могут обеспечивать высокую доступность, повышенную производительность, тонкое выделение ресурсов, дедупликацию и сжатие. Во многих случаях Docker может работать поверх этих систем хранения, но Docker не интегрируется с ними.

Каждый драйвер хранилища Docker основан на файловой системе Linux или менеджере томов. Обязательно следуйте существующим лучшим практикам для работы драйвера хранилища (файловой системы или менеджера томов) поверх общей системы хранения. Например, при использовании драйвера хранения ZFS поверх общей системы хранения, обязательно следуйте лучшим практикам работы с файловыми системами ZFS поверх этой конкретной общей системы хранения.

Стабильность

Для некоторых пользователей стабильность важнее производительности. Хотя Docker считает все упомянутые здесь драйверы хранения стабильными, некоторые из них являются более новыми и находятся в стадии активной разработки. В целом, overlay2, aufs и devicemapper являются вариантами с наибольшей стабильностью.

Тестирование с помощью собственных рабочих нагрузок

Вы можете проверить производительность Docker при выполнении собственных рабочих нагрузок на различных драйверах хранения. Обязательно используйте эквивалентное оборудование и рабочие нагрузки, чтобы соответствовать производственным условиям, и тогда вы сможете увидеть, какой драйвер хранения обеспечивает наилучшую общую производительность.

Проверка текущего драйвера хранилища

В подробной документации по каждому отдельному драйверу хранения данных подробно описаны все шаги по настройке для использования данного драйвера хранения данных.

Чтобы узнать, какой драйвер хранения используется Docker в настоящее время, используйте docker info и найдите строку Storage Driver:

$ docker info

Containers: 0
Images: 0
Storage Driver: overlay2
 Backing Filesystem: xfs
<...>

Чтобы изменить драйвер хранилища, см. специальные инструкции для нового драйвера хранилища. Некоторые драйверы требуют дополнительной настройки, включая настройку на физические или логические диски на хосте Docker.

Важно

При смене драйвера хранилища все существующие образы и контейнеры становятся недоступными. Это происходит потому, что их слои не могут быть использованы новым драйвером хранилища. Если вы вернете изменения, вы сможете снова получить доступ к старым образам и контейнерам, но все те, которые вы извлекли или создали с помощью нового драйвера, станут недоступными.