Если вы хоть раз работали с Docker, то точно сталкивались с ситуацией, когда система превращается в свалку из десятков (или сотен!) контейнеров, которые уже не нужны, но продолжают занимать место и мозолить глаза в списке docker ps -a
. Особенно это актуально на dev-серверах, CI/CD-агентах или просто если любите “поиграться” с новыми образами. Так вот, сегодня разберёмся, как быстро и безопасно удалить все контейнеры Docker и почистить систему. Без лишней воды, только рабочие команды и советы с полей.
Зачем вообще чистить контейнеры?
- Экономия места на диске. Контейнеры могут занимать гигабайты.
- Избавление от “мусора” — старых, остановленных, ненужных инстансов.
- Упрощение навигации: меньше контейнеров — меньше путаницы.
- Безопасность: забытый контейнер с открытым портом — потенциальная уязвимость.
Что потребуется
- ОС: Подойдёт Linux (Ubuntu, CentOS, Debian), macOS, Windows (WSL2 или Docker Desktop).
- Железо: Любое, где Docker уже установлен и работает.
- Права: Доступ к терминалу с правами пользователя, который может выполнять
docker
(обычноsudo
). - Установленный Docker: Официальная инструкция
Установка Docker (если вдруг ещё нет)
- Для Ubuntu/Debian:
sudo apt update sudo apt install docker.io sudo systemctl enable --now docker
- Для CentOS:
sudo yum install docker sudo systemctl enable --now docker
- Для macOS/Windows — качаем Docker Desktop и ставим по инструкции.
- Проверьте, что всё работает:
docker --version
Использование: команды для удаления контейнеров
Вот тут начинается самое интересное. Есть разные способы, от “снести всё к чертям” до более аккуратных. Давайте по порядку.
Удалить только остановленные контейнеры
docker container prune
Эта команда удалит только те контейнеры, которые не запущены. Вас попросят подтвердить действие (Y/n).
Удалить все контейнеры (и запущенные, и остановленные)
docker rm -f $(docker ps -aq)
docker ps -aq
— выводит ID всех контейнеров.rm -f
— удаляет контейнеры, даже если они запущены (останавливает и удаляет).
Будьте осторожны: это снесёт всё, что есть.
Удалить только конкретные контейнеры
docker rm -f container_id_1 container_id_2
Можно подставить имена или ID контейнеров, которые хотите удалить.
Удалить все контейнеры и образы, и volume
docker system prune -a --volumes
Это удалит всё: остановленные контейнеры, неиспользуемые образы и тома. Очень мощная команда, используйте с пониманием!
-a
— удаляет все неиспользуемые образы, не только dangling.--volumes
— добавляет удаление неиспользуемых томов.
Ошибки и как делать не надо
- Удалять всё бездумно на продакшене. Никогда не запускайте
docker rm -f $(docker ps -aq)
илиdocker system prune -a
на продуктивных серверах — потеряете ВСЁ. - Не проверять, что удаляете. Перед удалением проверьте список контейнеров:
docker ps -a
. - Удалять тома без бэкапа. В томах могут лежать данные — бэкапните, если не уверены.
- Скрипты с rm -rf /var/lib/docker. Не удаляйте руками папки Docker — это может поломать демона и привести к багам.
Реальный пример из жизни
У меня на CI-агенте (GitLab Runner) за месяц тестов накопилось 500+ остановленных контейнеров и 30ГБ занятых томов. Система стала тормозить, появлялись ошибки “no space left on device”. Решение:
# Удаляем все остановленные контейнеры
docker container prune -f
# Чистим неиспользуемые образы и volume
docker system prune -a --volumes -f
Освободил 28ГБ и ускорил работу runner’а. А главное — теперь это в кроне раз в неделю!
Заключение
Docker — крутая штука, но требует регулярной уборки. Не ленитесь — чистите контейнеры, образы и тома, особенно на dev-серверах и CI. Используйте docker container prune
для быстрой уборки, а docker system prune -a --volumes
для тотального ресета. И не забывайте: осторожность — наше всё!
Официальная документация Docker по теме:
Если остались вопросы — не стесняйтесь спрашивать в комментах или на Stack Overflow!
Ваш отзыв