Как удалить контейнеры и образы Docker
При регулярной работе с Docker неизбежно накапливаются неиспользуемые контейнеры, образы, тома и кэш сборки. Эти артефакты не только занимают дисковое пространство, но также могут замедлять операции Docker, увеличивать время развертывания и создавать проблемы безопасности из-за устаревших зависимостей. В этой статье мы рассмотрим проверенные методы очистки Docker-окружения, стратегии оптимизации образов и автоматизацию процессов поддержания порядка в вашей контейнерной инфраструктуре.

Удаление образов Docker
Коротко объясним, что такое образ Docker. Это шаблон с инструкциями для создания контейнера. Он включает код приложения, среду выполнения, зависимости и системные инструменты для запуска ПО. Создается такой образ с помощью Dockerfile.
Удаление определенного образа
Инструкция по удалению конкретного Docker-образа с помощью идентификатора или имени:
Получите список доступных образов с идентификаторами и именами с помощью команды docker images.
Найдите в списке образ, который будете удалять. IMAGE ID — это уникальные идентификаторы, REPOSITORY — имена.
Удалите образ командой docker rmi <image_id> или docker rmi <image_name>. Здесь image_id — идентификатор, <image_name> — имя. Пример команды с идентификатором — docker rmi a1b2c3d4e5f6, с именем — docker rmi ubuntu:latest.
Убедитесь, что удалили образ — выполните команду docker images снова. Если образа в списке нет, значит, все получилось.
Удаление «висячих» образов
«Висячие» образы в Docker — элементы, которые больше не используются никакими контейнерами. Чтобы их удалить, используйте команду:

Появится список. В колонках REPOSITORY и TAG у «висячих» образов будет стоять <none>.
Некоторые образы имеют теги, но не используются. Их вместе с «висячими» можно удалить с помощью команды:
Применение команды docker image pruneЕсли нужно удалить только «висячие» образы, а не все неиспользуемые, примените команду с дополнительным флагом:
После удаления снова введите команду:
Если команда не выдает результатов, значит, все «висячие» образы были успешно удалены.
Удаление образов по шаблону
В таблице собраны все способы применения шаблонов и фильтров для удаления определенных образов.
Описание | Команда |
Удаление элементов с конкретным тегом | docker rmi $(docker images -q "my_image_name:latest") |
Удаление образов, которые более 30 дней не использовались | docker image prune -a --filter "until=720h" |
Удаление образов меньше 100 MB | docker images --filter "before=100m" -q |
Удаление образов старше 30 дней, которые давно не использовались | docker image prune -a --filter "until=720h" |
Удаление всех образов с определенным префиксом в имени | docker rmi $(docker images -q 'test_*') |
Удаление всех образов, кроме одного | `docker rmi $(docker images -q) |
Продвинутый метод: Интерактивный выбор образов и контейнеров для удаления с помощью fzf
Часто бывает сложно запомнить все ID и имена, особенно когда нужно выборочно удалить несколько старых или самых объемных образов. Команды с фильтрами мощны, но не всегда наглядны. Решить эту проблему помогает fzf (fuzzy finder) — универсальный интерактивный фильтр для командной строки.
Что такое fzf и как его установить
fzf — это инструмент, который работает как «поиск с нечетким соответствием». Он позволяет интерактивно искать и выбирать элементы из списка.
Установить его можно через менеджеры пакетов:
Для Ubuntu/Debian: sudo apt install fzf
Для macOS (с Homebrew): brew install fzf
Интерактивное удаление образов
Следующая команда выведет список всех Docker-образов в удобном формате (с размерами!) и позволит вам интерактивно выбрать один или несколько для удаления.
Как это работает:
docker images --format "table ..." — создает детализированную таблицу с ID, именем, тегом и размером образа.
fzf -m — запускает интерактивный интерфейс, где вы можете искать образы по имени или тегу. Ключ -m позволяет выбрать несколько образов с помощью Tab.
awk '{print $1}' — из всего выбранного выводит только первый столбец (IMAGE ID).
xargs -r docker rmi — передает эти ID в команду docker rmi для удаления.
Интерактивное удаление контейнеров
Аналогичный подход применим и для контейнеров. Эта команда поможет вам выбрать и удалить контейнеры из списка всех (включая остановленные).
Использование fzf превращает рутинную задачу очистки в быстрый и контролируемый процесс, что особенно ценно в активно развивающихся проектах с большим количеством артефактов.
Удаление всех образов
Если нужно освободить дисковое пространство, полностью обновить систему и минимизировать риски безопасности, иногда приходится удалять все Docker-образы. В этом поможет команда:
Команда docker images -q выводит список ID всех образов системы, а docker rmi удаляет указанные образы.
После выполнения очистки локальных образов возникает стратегически важная задача — обеспечить надежное хранение актуальных и протестированных версий образов в централизованном реестре. Локальная очистка освобождает дисковое пространство, но одновременно создает риск безвозвратной потери рабочих версий приложений, особенно если удаленные образы не были предварительно загружены в удаленный репозиторий.
Для профессионального централизованного управления Docker-образами в корпоративной среде рекомендуется использовать специализированные решения класса Artifact Registry. Одним из таких решений является Evolution Artifact Registry — сервис корпоративного уровня, который обеспечивает:
Безопасное хранение артефактов с контролем доступа на уровне команд и проектов, что критично для соблюдения политик информационной безопасности.
Полное версионирование образов с возможностью отката к любой предыдущей версии, что незаменимо при необходимости быстрого восстановления работоспособности системы.
Быстрый доступ к артефактам для всей команды разработки благодаря распределенной инфраструктуре и кэшированию, что сокращает время развертывания.
Интеграцию с CI/CD-пайплайнами для автоматической публикации образов после успешной сборки.
Поддержку множественных форматов артефактов — помимо Docker-образов сервис работает с Helm-чартами, DEB и RPM-пакетами, что позволяет централизовать всю инфраструктуру хранения.
Централизованный реестр артефактов становится особенно критичным при работе с микросервисной архитектурой, где количество образов может исчисляться десятками и сотнями. Без надежного реестра команда рискует потерять возможность воспроизвести рабочую конфигурацию системы, что в продакшен-среде может привести к серьезным инцидентам и простоям.

Удаление контейнеров Docker
В этой главе рассмотрим различные подходы к удалению Docker-контейнеров — от выборочного удаления конкретных экземпляров до массовой очистки неиспользуемых и остановленных контейнеров.
Удаление определенного контейнера
Для начала работы с точечным удалением необходимо идентифицировать целевые контейнеры. Команда просмотра активных контейнеров:
Для получения полной картины, включая остановленные и завершенные контейнеры, используйте расширенную версию команды:
После идентификации контейнера через его уникальный идентификатор или понятное имя, выполните удаление одним из способов:
Замените <container_id> на реальный идентификатор контейнера, который можно предварительно найти в списке из команды docker ps -a.
Если намерены удалить контейнер по имени, используйте команду:
Замените <container_name> на имя контейнера.
Для принудительного удаления запущенного контейнера без предварительной остановки применяйте флаг принудительного выполнения:
Удаление контейнеров после их завершения
Для временных контейнеров, которые не требуют сохранения после выполнения своих задач, эффективно использовать флаг автоматического удаления. Этот параметр обеспечивает автоочистку контейнера сразу после его остановки:
Замените <image_name> на реальное имя.
Удаление всех остановленных контейнеров
Для комплексного освобождения пространства от неработающих контейнеров сначала проанализируйте общую ситуацию:
Затем выполните команду массового удаления всех остановленных экземпляров:
Принцип работы данной команды:
docker ps -a -q извлекает идентификаторы всех контейнеров;
-f status=exited фильтрует только остановленные экземпляры;
docker rm $(...) выполняет удаление отфильтрованного списка.
После выполнения операции рекомендуется проверить результат, повторно выполнив команду просмотра контейнеров, чтобы убедиться в успешности очистки и отсутствии нежелательных последствий.
Удаление контейнеров по шаблону
Для точного управления контейнерной инфраструктурой Docker предлагает мощные инструменты фильтрации, позволяющие выполнять выборочное удаление по различным критериям. В таблице ниже представлены наиболее эффективные методы целевой очистки.
Метод фильтрации | Описание | Пример команды |
Фильтр по именам | Удаление контейнеров, чьи имена соответствуют заданному шаблону именования | docker rm $(docker ps -a -q --filter "name=web_") |
Фильтр по состоянию | Очистка контейнеров с определенным статусом выполнения | docker rm $(docker ps -a -q --filter "status=exited") |
Фильтр по идентификатору | Удаление по уникальному фрагменту ID контейнера | docker rm $(docker ps -a -q --filter "id=abc123") |
Фильтр по временным меткам | Очистка контейнеров, созданных до или после указанной даты | docker rm $(docker ps -a -q --filter "before=2025-01-01") |
Фильтр по меткам | Удаление контейнеров, помеченных определенными тегами | docker rm $(docker ps -a -q --filter "label=env=production") |
Комбинированная фильтрация | Селективное удаление по нескольким критериям одновременно | docker rm $(docker ps -a -q --filter "status=exited" --filter "label=env=testing") |
Быстрая очистка остановленных контейнеров | Мгновенное удаление всех завершивших работу контейнеров | docker container prune -f |
Остановка и удаление всех контейнеров
Чтобы быстро остановить запущенные контейнеры и сразу их удалить, используйте подходящую команду из таблицы.
Действие | Описание | Команда |
Остановка всех контейнеров | Останавливает все работающие контейнеры. Команда выведет ID запущенных контейнеров. Данные будут переданы в команду docker stop | docker stop $(docker ps -q) |
Удаление всех контейнеров (включая остановленные) | Удаляет все контейнеры, включая остановленные. docker ps -a -q выводит ID всех контейнеров — как работающих, так и остановленных | docker rm $(docker ps -a -q) |
Остановка и удаление контейнеров в одном шаге | Останавливает все контейнеры, а затем удаляет их. Используется для выполнения двух операций одновременно | docker stop $(docker ps -q) && docker rm $(docker ps -a -q) |
Удаление всех остановленных контейнеров | Удаляет только остановленные контейнеры, не затрагивая работающие. Предварительно можно использовать фильтр по статусу exited | docker rm $(docker ps -a -q --filter "status=exited") |
Удаление всех остановленных контейнеров (без подтверждения) | Быстро удаляет все остановленные контейнеры без запроса на подтверждение с помощью флага -f | docker container prune -f |
Дополнительные команды и советы
Чтобы еще эффективнее управлять ресурсами Docker, изучите инструменты и рекомендации для удаления томов и автоматизации очистки системы.
Удаление томов Docker
Есть разные способы удалить тома, которые в Docker-системах используются для хранения данных. В таблице — основные команды.
Действие | Описание | Команда |
Просмотр всех томов | Показывает список всех томов Docker | docker volume ls |
Просмотр только висячих томов | Показывает все «висячие» (dangling) тома, которые не используются контейнерами | docker volume ls -f "dangling=true" |
Удаление конкретного тома | Удаляет конкретный том Docker по имени | docker volume rm |
Удаление всех неиспользуемых томов | Удаляет тома, которые не привязаны к конкретным контейнерам | docker volume prune |
Удаление всех томов (включая используемые) | Удаляет все тома Docker, включая те, которые используются контейнерами. Учтите, что в этом случае есть риск потери данных | docker volume rm $(docker volume ls -q) |
Оптимизация дискового пространства: анализ и очистка сборок Docker Buildx Cache
При активной разработке с использованием Docker Buildx и multi-архитектурных сборок в системе накапливается кэш сборок, который может занимать десятки гигабайт. В отличие от стандартных образов, этот кэш часто остается «невидимым» при обычных командах очистки.
Как обнаружить скрытые данные сборок
Сначала оценим реальный объем данных: docker system df -v. Обратите внимание на раздел Build cache. Если он показывает значительный объем, пришло время для детального анализа.
Просмотр детализированного кэша сборок:docker buildx du --verbose
Стратегии очистки кэша: осторожная и агрессивная.
Осторожная (рекомендуется):
Агрессивная:
Инструменты для автоматизации очистки
Чтобы устранять все ненужные контейнеры, тома и образы, можно использовать комбинированный скрипт:
Чтобы регулярно очищать Docker-систему с минимальными усилиями, можно настроить задачу в планировщике Cron. Процессы удаления неиспользуемых ресурсов будут запускаться в определенное время.
Откройте планировщик:
Добавьте строку для автоматической очистки каждый день, например, в полночь:
Для очистки и оптимизации Docker-систем можно пользоваться сторонними инструментами. В таблице перечислили самые распространенные.
Инструмент | Описание |
docker-gc | Утилита для автоматической очистки неиспользуемых контейнеров и образов. Выполняет очистку Docker-системы по настроенным критериям |
LazyDocker | Инструмент с интерфейсом для управления Docker-контейнерами и образами с опциями для удаления неиспользуемых ресурсов |
Portainer | Утилита с графическим интерфейсом для управления Docker-системами. Поддерживает удаление контейнеров, сетей и образов |
Предупреждения и советы по безопасной практике при использовании команд удаления в Docker
При очистке систем Docker придерживайтесь следующих принципов:
Используйте только те команды, которыми хорошо владеете.
Проверьте зависимости между образами и контейнерами, прежде чем что-то удалять.
Сделайте резервные копии важных данных на случай, если удалите лишнее.
Проверьте, не используются ли удаляемые данные другими компонентами системы.
Откажитесь от массового удаления ресурсов без предварительного анализа.
Заключение
Регулярная очистка Docker-систем — обязательная практика для поддержания производительности и безопасности инфраструктуры. Систематическое удаление неиспользуемых образов, контейнеров и томов помогает освободить дисковое пространство, ускорить работу системы и снизить риски безопасности.
Используйте проверенные команды для мониторинга и очистки ресурсов, настройте автоматизацию через Cron или сторонние инструменты для упрощения процесса. Не забывайте о резервном копировании важных данных перед массовым удалением и всегда проверяйте зависимости между компонентами системы. Следуя этим рекомендациям, вы сможете поддерживать Docker-окружение в оптимальном состоянии.
