Как удалить Docker‑образы, контейнеры и тома: подробное руководство

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 --volumes

Docker предлагает множество команд для очистки неиспользуемых образов, контейнеров и томов. Правильное использование поможет поддерживать среду чистой и аккуратной, а также освобождать место на диске.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Условные операторы if else в Bash и shell-скриптах

Использование условных операторов if, else и elif в shell-скриптах Bash. Рассматриваются базовый синтаксис, числовые и строковые сравнения, проверки файлов, вложенные условия и практические примеры для повседневных задач администрирования и автоматизации.

10 0 2 мин