Как хранить образы и контейнеры Docker на внешнем диске
Docker хранит загруженные образы, запущенные контейнеры и данные постоянных томов в едином общем корневом каталоге на системном диске. Вы можете настроить свою конфигурацию для использования внешнего диска, общего сетевого ресурса или второго внутреннего диска, если вам нужно добавить хранилище к вашей установке.
Подготовка
Основная часть этого руководства относится к Docker Engine для Linux и Docker Desktop для Windows и Mac. Вам нужно будет найти файл Docker daemon.json
на всех трех платформах. Это будет в одном из следующих мест:
/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 обновлять файл конфигурации через пользовательский интерфейс, а не вносить изменения вручную в текстовом редакторе. Вы можете получить доступ к экрану настроек, выбрав «Настройки» > «Docker Engine» > «Редактировать файл» в интерфейсе 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, выйдя из него и запустив новый экземпляр.
Вам следует скопировать содержимое вашего текущего каталога данных по новому пути, если вы хотите сохранить существующий контент. В противном случае вы начнете с чистого листа, не имея доступа к ранее созданным контейнерам и образам.
$ sudo rsync -aSv /var/lib/docker/ /mnt/docker-data
Изменение каталога данных без перезагрузки
Вы можете переместить каталог данных без перезапуска демона, создав символическую ссылку из /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
, даже если он подходит для определенных типов данных, таких как долгосрочное хранение изображений.
В отсутствие поддержки путей данных для каждого типа сокращение неиспользуемых ресурсов может быть лучшим способом управления требованиями 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, например, одного для личных проектов и другого для работы. Вам нужно будет перезапустить демона, прежде чем переключать контексты, поскольку одновременно может работать только один экземпляр.