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