TIL — куда девается место под Docker
Сегодня мониторинг прислал, что на сервере осталось 3% свободного места. Паника, бэкапы, всё дело. Оказалось — виноват Docker, а конкретно накопившийся за полгода мусор: висячие образы, старые слои и build cache, который я пересобирал десятки раз.
Первое, что надо посмотреть — кто сколько ест:
docker system df
У меня вышло примерно так:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 61 12 18.4GB 14.1GB (76%)
Containers 14 11 220MB 180MB
Local Volumes 9 8 4.2GB 0B
Build Cache 312 0 9.8GB 9.8GB
Build cache на 9.8 ГБ — это он, родимый. Чистим аккуратно.
Снести вообще всё неиспользуемое (образы, сети, остановленные контейнеры):
docker system prune -a
Отдельно вынести build cache, если предыдущей команды показалось мало:
docker builder prune
Важно: -a сносит все образы, у которых нет запущенного контейнера. Если какой-то образ нужен, но контейнер из него сейчас не крутится — он тоже улетит и будет качаться заново. Тома (volumes) prune по умолчанию не трогает, и слава богу, иначе бы я сейчас восстанавливал базы.
Итог: освободил 23 ГБ за минуту. Записал себе в cron еженедельный docker system prune -f без -a, чтобы хотя бы висячие слои не копились до следующей паники.