🐳 Как хранить образы и контейнеры Docker на внешнем диске

Разбираемся с хранилищами Docker

by itisgood

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

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

🐳 Где хранятся образы, контейнеры и тома Docker в хост-системе Linux?

Предварительные условия

Основная часть этого руководства относится к Docker Engine для Linux и Docker Desktop для Windows и Mac.

Вам нужно найти файл Docker daemon.json на всех трех платформах.

Где docker хранит данные на Mac,Linux, Windows?

Он будет находиться в одном из следующих мест:

  • /etc/docker/daemon.json на Linux.
  • %programdata%\docker\config\daemon.json на Windows.
  • ~/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/etc/docker/daemon.json на Mac.

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

Вы можете получить доступ к экрану настроек, перейдя в Preferences > Docker Engine > Edit file в интерфейсе Docker Desktop.

Изменение каталога данных

Расположение каталога данных Docker контролируется параметром data-root в вашем конфигурационном файле.

В старых версиях Docker, выпущенных до версии 17.06, вместо этого используется graph.

Вы можете проверить, какая версия у вас установлена, выполнив команду docker version.

$ docker version
...
Server: Docker Engine - Community
  Engine:
    Version: 20.10.17
Найдите или добавьте соответствующий ключ в файл конфигурации.
В качестве его значения задайте желаемый путь к каталогу.
Вот пример Linux, при котором будет хранить данные Docker на внешнем диске, смонтированном в файловой системе:
{
    "data-root": "/mnt/docker-data"
}
После внесения изменений необходимо перезапустить демон Docker:
$ sudo service docker restart

Docker Desktop можно перезапустить на Windows и Mac, выйдя из него, а затем запустив новый экземпляр.

Вам следует скопировать содержимое текущего каталога данных на новый путь, если вы хотите сохранить существующий контент.

В противном случае вы начнете с чистого листа, не имея доступа к ранее созданным контейнерам и образам.

Изменение каталога данных без перезапуска

Вы можете переместить каталог данных без перезапуска демона, создав симлинк из /var/lib/docker в новое место.

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

Скопируйте существующие данные Docker в новый каталог:

$ sudo rsync -aSv /var/lib/docker/ /mnt/docker-data

Затем создайте симлинк, который преобразует /var/lib/docker в целевое местоположение:

$ sudo ln -s /mnt/docker-data/ /var/lib/docker

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

Существует риск возникновения несоответствий, если данные будут записаны за время между копированием существующего каталога и созданием симлинка.

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

Что на самом деле изменится?

Изменение корневого каталога Docker влияет на все различные типы данных, которые хранит демон.

Сюда входят ваши образы, контейнеры, установленные плагины, конфигурация Swarm, тома, а также кэш сборки Docker.

При изменении пути все эти данные будут записаны в новое место.

Вы не можете выборочно перемещать определенные типы в отдельные точки монтирования.

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

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

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

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

Это может освободить значительное пространство на вашем хосте.

Одноразовое использование другого каталога данных

Вы можете вручную запустить Docker Engine с определенным каталогом данных, передав флаг –data-root при запуске демона. Это можно использовать для переключения между каталогами данных или запуска чистого экземпляра без существующих данных.

$ sudo /usr/bin/dockerd --data-root /mnt/docker-data

Флаг отменяет путь к директории, указанный в файле daemon.json.

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

Заключение

Docker хранит все свои данные, включая собранные и извлеченные образы, созданные контейнеры и тома, в одном дереве каталогов.

Корнем обычно является /var/lib/docker, но вы можете настроить его, добавив соответствующую настройку в свой конфигурационный файл или указав флаг –data-root при запуске демона.

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

Однако перед переключением контекстов необходимо перезапустить демон, поскольку одновременно может работать только один экземпляр.

см. также:

 

You may also like

1 comment

djuz 19.02.2023 - 17:51

доброго времени суток!
сделал по инструкции
Скопируйте существующие данные Docker в новый каталог:
$ sudo rsync -aSv /var/lib/docker/ /mnt/docker-data
Затем создайте симлинк, который преобразует /var/lib/docker в целевое местоположение:
$ sudo ln -s /mnt/docker-data/ /var/lib/docker

предварительно создал mnt/-docker-data и смонтировал туда новый диск
но ничего туда не пишется
даже перезагружался)

Reply

Добавить комментарий для djuz Cancel Reply