Переміщуємо дані 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 менше 😉
