Блог

Переміщуємо дані docker в розділ home

August 17, 2022

За замовчуванням docker зберігає усі імейджи, контейнери, вол’юми і т.д. в дирикторії /var/lib/docker (розділ root). Може такий підхід це ок для продакшену, але це не дуже зручно для локальної розробки. Зазвичай, під root розділ виділяють не дуже багато місця. А докер, навіть якщо його не активно юзати, дуже легко може з’їсти 10-20гб. Та і взагалі мені контейнери більше виглядають як залежності, типу бібліотек npm. Ми ж не зберігаємо пакети npm чи вихідний код наших проектів в root? Тому не бачу сенсу робити особливі виключення для docker. Пропоную в цьому пості інструкцію як перемістити всі дані докера в інший розділ і більше ніколи не думати про нестачу місця.

Перш за все потрібно зупинити сервіс докера:

sudo systemctl stop docker.service
sudo systemctl stop docker.socket

(можливо буде достатньо просто sudo systemctl stop docker)

Редагуємо конфігурацію /etc/docker/daemon.json (якщо файла немає — треба його створити):

{
  "data-root": "/new/path/to/docker-data-root"
}

Я у себе вирішив скласти усе в директорію /home/{USER_NAME}/.docker/data. Цю директорію автоматично створює докер після встановлення. В ній можуть бути додаткові конфіги і дані для докера. Отже ця директорія виглядає як чудовий кандидат для переносу туди всіх інших даних докера.

Далі копіюємо дані зі старої локації в нову:

sudo rsync -aP /var/lib/docker/ /new/path/to/docker-data-root

або через cp:

sudo cp -axT /var/lib/docker /new/path/to/docker-data-root

Можна ще змінити назву старої директорії, щоб під час тесту бути впевненим, що докер туди точно не полізе:

sudo mv /var/lib/docker /var/lib/docker.old

Запускаємо усе назад:

sudo systemctl start docker.service
sudo systemctl start docker.socket

Перевіряємо, що докер подружився з новою локацією даних:

docker images

можливо тут знадобиться викликати sudo docker images, якщо у вас не налаштований rootless docker

Якщо все працює — звільняємо місце в root:

sudo rm -rf /var/lib/docker.old

Ну що ж, тепер одним пожирачем місця в root менше 😉