Home_Sofia
New member
Неделю назад мой ноутбук внезапно начал ругаться на нехватку места. Я открыл терминал, посмотрел df -h и увидел, что корень занят почти под завязку. Дальше du -sh /var/lib/docker показал примерно 40 ГБ. Честно, сначала я не поверил: у меня не так много контейнеров, чтобы они занимали столько. Но Docker умеет незаметно копить старые образы, остановленные контейнеры, тома и кэш сборки. Именно тогда я решил разобраться, где именно прячется мусор.
Первым делом я выполнил docker system df. Эта команда показывает общий размер образов, контейнеров, локальных томов и кэша сборки. Ещё полезнее оказалась docker system df -v: она выдаёт подробную разбивку по каждому объекту. Я сразу увидел десятки висячих образов с тегом none, несколько остановленных контейнеров и тома, которые остались от старых экспериментов. Без этой диагностики легко удалить не то и потом долго восстанавливать данные.
Главное правило: не всё, что выглядит мусором, действительно мусор. Висячие образы и кэш сборки обычно можно удалять спокойно. Остановленные контейнеры тоже чаще всего безопасны, но если внутри есть важные изменения, их лучше сначала сохранить. А вот тома — самая опасная зона. В них могут лежать базы данных, загруженные файлы и конфиги. Поэтому перед чисткой томов я всегда проверяю, к какому проекту они относятся, и делаю резервные копии.
Мой безопасный порядок чистки выглядит так. Сначала docker container prune — удаляет остановленные контейнеры. Потом docker image prune — убирает висячие образы. Затем docker builder prune — чистит кэш сборки, который у меня разросся особенно сильно. И только после этого я смотрю на тома. Если нужно удалить вообще все неиспользуемые образы, есть docker image prune -a, но её стоит применять осознанно. Для томов есть docker volume prune, однако я запускаю её лишь после ручной проверки.
В моём случае 40 ГБ удалось вернуть постепенно. Примерно половину освободил кэш сборки, ещё часть — старые образы от десятков тестовых сборок. Несколько гигабайт занимали тома от проектов, которые я уже не открывал полгода. Я аккуратно проверил каждый том через docker volume ls и docker volume inspect, убедился, что там нет нужных данных, и удалил лишнее. После этого диск снова задышал, а Docker продолжил работать как обычно.
Теперь я стараюсь не доводить до аврала. Раз в пару недель запускаю docker system df, чтобы видеть динамику. Для контейнеров настроил ротацию логов, иначе они тоже могут незаметно съесть гигабайты. В проектах использую именованные тома и удаляю их через docker compose down -v только тогда, когда данные точно не нужны. А на CI-раннерах добавил регулярную очистку, потому что там мусор копится особенно быстро. Ещё советую не хранить в Docker то, что должно лежать в отдельном хранилище.
В итоге Docker — не враг, а просто инструмент, который требует периодической уборки. Если знать, где смотреть, и не удалять тома вслепую, можно безболезненно освободить десятки гигабайт. А у вас бывали случаи, когда Docker неожиданно съедал диск? Какие команды, привычки или скрипты помогают вам держать его в порядке?
Первым делом я выполнил docker system df. Эта команда показывает общий размер образов, контейнеров, локальных томов и кэша сборки. Ещё полезнее оказалась docker system df -v: она выдаёт подробную разбивку по каждому объекту. Я сразу увидел десятки висячих образов с тегом none, несколько остановленных контейнеров и тома, которые остались от старых экспериментов. Без этой диагностики легко удалить не то и потом долго восстанавливать данные.
Главное правило: не всё, что выглядит мусором, действительно мусор. Висячие образы и кэш сборки обычно можно удалять спокойно. Остановленные контейнеры тоже чаще всего безопасны, но если внутри есть важные изменения, их лучше сначала сохранить. А вот тома — самая опасная зона. В них могут лежать базы данных, загруженные файлы и конфиги. Поэтому перед чисткой томов я всегда проверяю, к какому проекту они относятся, и делаю резервные копии.
Мой безопасный порядок чистки выглядит так. Сначала docker container prune — удаляет остановленные контейнеры. Потом docker image prune — убирает висячие образы. Затем docker builder prune — чистит кэш сборки, который у меня разросся особенно сильно. И только после этого я смотрю на тома. Если нужно удалить вообще все неиспользуемые образы, есть docker image prune -a, но её стоит применять осознанно. Для томов есть docker volume prune, однако я запускаю её лишь после ручной проверки.
В моём случае 40 ГБ удалось вернуть постепенно. Примерно половину освободил кэш сборки, ещё часть — старые образы от десятков тестовых сборок. Несколько гигабайт занимали тома от проектов, которые я уже не открывал полгода. Я аккуратно проверил каждый том через docker volume ls и docker volume inspect, убедился, что там нет нужных данных, и удалил лишнее. После этого диск снова задышал, а Docker продолжил работать как обычно.
Теперь я стараюсь не доводить до аврала. Раз в пару недель запускаю docker system df, чтобы видеть динамику. Для контейнеров настроил ротацию логов, иначе они тоже могут незаметно съесть гигабайты. В проектах использую именованные тома и удаляю их через docker compose down -v только тогда, когда данные точно не нужны. А на CI-раннерах добавил регулярную очистку, потому что там мусор копится особенно быстро. Ещё советую не хранить в Docker то, что должно лежать в отдельном хранилище.
В итоге Docker — не враг, а просто инструмент, который требует периодической уборки. Если знать, где смотреть, и не удалять тома вслепую, можно безболезненно освободить десятки гигабайт. А у вас бывали случаи, когда Docker неожиданно съедал диск? Какие команды, привычки или скрипты помогают вам держать его в порядке?