Docker упрощает упаковку приложений и сервисов в контейнеры, которые можно запускать в любом окружении. Однако вместе с работой Docker вы легко можете накопить множество ненужных образов (images), контейнеров и томов (volumes), которые занимаются место на диске и засоряют вывод команд.
В этой статье, своего рода шпаргалка, разберем по команды, которые помогут очистить вашу систему Docker и освободить место.
Полная очистка всех неиспользуемых ресурсов
Самый быстрый способ удалить все неиспользуемые контейнеры, образы, сети и (опционально) тома команда:
docker system pruneПо умолчанию эта команда не удаляет тома для этого нужно добавить флаг --volumes.
Чтобы также удалить все остановленные контейнеры и неиспользуемые образы (не только висячие):
docker system prune -aЧтобы включить в очистку тома:
docker system prune -a --volumesКоманда покажет предупреждение и запросит подтверждение перед удалением.
Удаление Docker‑образов (Images)
Удалить конкретные образы
Сначала посмотрим на все образы (включая промежуточные):
docker images -aПример вывода:
REPOSITORY TAG IMAGE ID CREATED SIZE
myapp latest 9b0df6f5f9e3 2 days ago 128MB
<none> <none> 7ac9a45fa5e1 10 days ago 50MBЗатем удалим один или несколько образов:
docker rmi IMAGE_ID1 IMAGE_ID2Если образ висячий (
<none>), то для принудительного удаления можно использовать-f.
Удаление "висячих" образов
Такие образы не связаны с тегами и больше не нужны:
docker images -f dangling=trueУдалить их:
docker image pruneУдаление образов по шаблону
Например, все образы с названием, содержащим слово server:
docker images -a | grep "server"Удаление:
docker images -a | grep "server" | awk '{print $1":"$2}' | xargs docker rmiУдалить все образы
Посмотреть все образы:
docker images -aУдалить все:
docker rmi $(docker images -a -q)Удаление контейнеров
Удалить конкретные контейнеры
Сначала перечислим все контейнеры:
docker ps -aПример:
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
c1a2b3c4d5e6 myapp "/start.sh" 3 days ago Exited (0) 2 days ago myapp_oldУдалим контейнер:
docker rm c1a2b3c4d5e6Удалять контейнер сразу после выхода
Если контейнер временный, можно запускать его так:
docker run --rm image_nameКонтейнер будет автоматически удалён после завершения.
Удалить все остановленные контейнеры
Посмотрим только контейнеры со статусом exited:
docker ps -a -f status=exitedУдалим их все:
docker rm $(docker ps -a -f status=exited -q)Удалить контейнеры с несколькими фильтрами
Например, хотим удалить все созданные или уже завершённые:
docker ps -a -f status=created -f status=exitedА удалить их так:
docker rm $(docker ps -a -f status=created -f status=exited -q)Удаление по шаблону
Найти контейнеры по имени:
docker ps -a | grep "pattern"Удаление:
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rmОстановить и удалить все контейнеры
Посмотрим все контейнеры:
docker ps -aОстановим их:
docker stop $(docker ps -a -q)Удалим:
docker rm $(docker ps -a -q)Удаление Docker‑томов (Volumes)
Удалить конкретные тома
Сначала перечислим тома:
docker volume lsПример:
DRIVER VOLUME NAME
local my_volume
local olddataУдалим:
docker volume rm my_volume olddataУдалить "висячие" тома
Такие тома не связаны с ни одним контейнером:
docker volume ls -f dangling=trueУдалим их:
docker volume pruneУдалить контейнер и его том
Если том был создан без имени, его можно удалить вместе с контейнером:
docker rm -v container_nameПолезные советы
Разница между образами и контейнерами
Образ (image) - это шаблон, из которого создаются контейнеры.
Контейнер - это запущенный экземпляр образа.
Чтобы удалить образ, сначала нужно удалить связанные контейнеры (иначе Docker выдаст ошибку).
Частые ошибки при удалении
Ошибка: «container is running»
Если вы пытаетесь удалить активный контейнер, Docker откажет. Решения:
docker stop <container_id>
docker rm <container_id>или форсированно:
docker rm -f <container_id>Частые вопросы
Как удалить все остановленные контейнеры?
docker container pruneили:
docker compose downЭто остановит и удалит контейнеры из текущего
docker-compose.yml.
Что делает docker system prune?
Удаляет остановленные контейнеры, неиспользуемые сети и висячие образы. С флагом -a ещё и все неиспользуемые образы.
Могу ли я удалить запущенный контейнер?
Да, с флагом -f: docker rm -f <id>.
Как освободить место, занятой Docker?
docker system prune -a --volumesDocker предлагает множество команд для очистки неиспользуемых образов, контейнеров и томов. Правильное использование поможет поддерживать среду чистой и аккуратной, а также освобождать место на диске.