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, чтобы хотя бы висячие слои не копились до следующей паники.