Миграция данных Docker в домашний каталог

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

Docker по умолчанию хранит свои данные в /var/lib/docker, но этот каталог можно перенастроить. Есть два подхода:

  1. С бэкапом – скопировать существующие данные, перенастроить Docker и Containerd, затем удалить старые файлы.
  2. Без бэкап – полностью очистить все компоненты Docker и настроить окружение с нуля.

Ниже описан первый вариант (с бэкапом).

Останавливаем службы

sudo systemctl stop docker docker.socket containerd

Переносим данные

Создаем рабочие каталоги:

sudo mkdir -p /home/master/dev/docker
sudo mkdir -p /home/master/dev/containerd

Копируем данные:

sudo rsync -avxP /var/lib/docker/ /home/master/dev/docker
sudo rsync -avxP /var/lib/containerd/ /home/master/dev/containerd

Делаем бэкап старых каталогов:

sudo mv /var/lib/docker /var/lib/docker.back
sudo mv /var/lib/containerd /var/lib/containerd.back

Настраиваем службы

Настраиваем Docker:

sudo nano /etc/docker/daemon.json
{
  "data-root": "/home/master/dev/docker"
}

Настраиваем Containerd:

sudo nano /etc/containerd/config.toml
root = "/home/master/dev/containerd"

Запускаем службы и проверяем

sudo systemctl start containerd
sudo systemctl start docker

Проверьте, что Docker использует новый каталог:

$ docker info | grep "Docker Root Dir"
Docker Root Dir: /home/master/dev/docker

Проверьте путь Containerd:

$ containerd config dump | grep ^root
root = '/home/master/dev/containerd'

Удаляем резервные копии (если все работает)

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

После этого освободится место в корневом разделе Ubuntu.