Другое

Полное руководство по удалению Docker образов и контейнеров

Узнайте, как удалить все локальные Docker образы и контейнеры с помощью полных команд. Изучите безопасные методы очистки, расширенные параметры очистки и пошаговые руководства для новичков и экспертов.

Как удалить все локальные образы и контейнеры Docker?

Я новичок в Docker и накопил много неиспользуемых локальных образов после экспериментов с контейнерами. Я понимаю, что для правильной очистки следует использовать docker-compose down вместо ctrl-c или docker-compose stop, но теперь у меня большое количество ненужных образов Docker.

Существует ли команда или флаг для удаления всех локальных образов и контейнеров Docker одновременно? Я ищу что-то похожее на docker rmi --all --force, но знаю, что флага --all не существует. Как правильно очистить все неиспользуемые образы и контейнеры Docker?

Чтобы удалить все локальные образы Docker и контейнеры одновременно, можно использовать команду docker system prune с соответствующими флагами. Наиболее полная команда очистки — docker system prune -af --volumes, которая удаляет все остановленные контейнеры, неиспользуемые сети, висячие образы, кэш сборки и неиспользуемые тома без запроса подтверждения. Альтернативно, можно удалить все контейнеры с помощью docker rm $(docker ps -a -q) и все образы с помощью docker rmi $(docker images -q), хотя команда system prune обычно безопаснее и эффективнее для регулярной очистки.

Содержание

Основы команды Docker System Prune

Команда docker system prune — это встроенное решение Docker для очистки неиспользуемых ресурсов. По умолчанию она удаляет:

  • Остановленные контейнеры
  • Неиспользуемые сети
  • Висячие образы (неиспользуемые образы)
  • Кэш сборки

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

Базовый синтаксис:

bash
docker system prune

Однако эта команда запросит подтверждение перед выполнением. Чтобы обойти запрос, используйте флаг -f или --force.

Полные команды очистки

Для удаления всех неиспользуемых образов Docker и контейнеров одной командой, вот наиболее эффективные подходы:

1. Полная очистка (Рекомендуется)

bash
docker system prune -af --volumes

Что делает эта команда:

  • -a: Удаляет все неиспользуемые образы (не только висячие)
  • -f: Принудительное удаление без подтверждения
  • --volumes: Удаляет неиспользуемые тома

Предупреждение: Эта команда агрессивна и удалит все остановленные контейнеры, неиспользуемые сети, висячие образы, кэш сборки и неиспользуемые тома. Используйте с осторожностью.

2. System Prune со всеми образами (Менее агрессивно)

bash
docker system prune -af

Эта команда удаляет остановленные контейнеры, неиспользуемые сети, висячие образы, кэш сборки и неиспользуемые образы (не только висячие), но сохраняет тома.

3. Пошаговая очистка (Безопаснее)

bash
# Сначала посмотрим, что будет удалено
docker system df

# Затем остановим все работающие контейнеры
docker stop $(docker ps -q)

# Удалим все контейнеры
docker rm $(docker ps -a -q)

# Удалим все неиспользуемые образы
docker image prune -af

# Опционально: Удалим неиспользуемые тома
docker volume prune -f

💡 Совет профессионала: Всегда сначала выполняйте docker system df, чтобы увидеть, сколько места вы освободите перед выполнением операций очистки.

Очистка отдельных компонентов

Иногда может потребоваться очистка конкретных компонентов, а не всех сразу:

Удаление всех контейнеров

bash
# Удалить все остановленные контейнеры
docker container prune -f

# Удалить все контейнеры (работающие и остановленные)
docker rm $(docker ps -a -q) 2>/dev/null || true

Удаление всех образов

bash
# Удалить все висячие образы (неиспользуемые)
docker image prune -f

# Удалить все неиспользуемые образы (включая те, на которые не ссылаются контейнеры)
docker image prune -af

Удаление всех томов

bash
# Удалить неиспользуемые тома
docker volume prune -f

# Удалить все тома (включая те, которые не связаны с контейнерами)
docker volume prune -af

Удаление всех сетей

bash
# Удалить неиспользуемые сети
docker network prune -f

Безопасные практики очистки

При очистке ресурсов Docker следуйте этим лучшим практикам:

1. Всегда проверяйте перед удалением

bash
# Посмотрите, что будет удалено
docker system prune --dry-run

# Проверьте использование диска
docker system df

# Перечислите контейнеры, которые будут удалены
docker ps -a

# Перечислите образы, которые будут удалены
docker images

2. Используйте фильтры для выборочной очистки

bash
# Удалить образы, созданные до определенной даты
docker image prune -af --filter "until=24h"

# Удалить контейнеры с определенной меткой
docker container prune -f --filter "label=environment=dev"

3. Понимайте, что удаляется

  • Остановленные контейнеры: Контейнеры, которые не работают
  • Висячие образы: Образы, помеченные как <none> или на которые не ссылается ни один контейнер
  • Неиспользуемые образы: Образы, на которые не ссылается ни один работающий контейнер
  • Кэш сборки: Промежуточные слои из сборки образов
  • Неиспользуемые сети: Сети, которые не используются ни одним контейнером
  • Неиспользуемые тома: Тома, которые не используются ни одним контейнером

⚠️ Важно: Как только вы удалите образ, вам придется снова скачать его из реестра, если вы захотите его использовать. Убедитесь, что вы не удаляете образы, которые могут понадобиться позже.

Расширенные параметры очистки

Использование нескольких фильтров

bash
# Удалить образы старше 7 дней и без меток
docker image prune -af --filter "until=168h" --filter "dangling=true"

Очистка на основе меток

bash
# Удалить контейнеры с определенной меткой
docker container prune -f --filter "label=cleanup=true"

# Удалить ресурсы без определенной метки
docker system prune -f --filter "label!=keep"

Очистка на основе времени

bash
# Удалить ресурсы, созданные до 1 января 2024 года
docker system prune -f --filter "until=2024-01-01T00:00:00Z"

🔍 Мнение эксперта: Согласно UMA Technology, команда docker system prune с фильтром --until особенно эффективна для управления ресурсами во времени и реализации автоматизированных графиков очистки.

Команды для Windows и PowerShell

Если вы используете Windows PowerShell, команды немного отличаются:

Однострочник PowerShell для всех контейнеров

powershell
docker ps -aq | ForEach-Object { docker rm $_ }

Однострочник PowerShell для всех образов

powershell
docker images -q | ForEach-Object { docker rmi $_ }

Подход с пакетным файлом

Как показано в GitHub gist, вы можете создать пакетный файл с:

batch
FOR /F %k in ('docker ps -aq') DO docker rm %k
FOR /F %k in ('docker images -q') DO docker rmi %k

💻 Примечание: Для пользователей Windows команда docker system prune работает так же, как и в Linux/macOS, что делает ее рекомендуемым подходом независимо от вашей операционной системы.

Заключение

Чтобы эффективно удалить все локальные образы Docker и контейнеры, следуйте этим ключевым рекомендациям:

  1. Начните с docker system df, чтобы понять текущее использование ресурсов
  2. Используйте docker system prune -af для комплексной очистки контейнеров, сетей и образов
  3. Добавьте --volumes, если также хотите удалить неиспользуемые тома
  4. Всегда сначала запускайте с --dry-run, чтобы увидеть, что будет удалено
  5. Рассмотрите возможность реализации регулярной очистки как части вашего режима обслуживания Docker

Самый безопасный подход для начинающих — запускать отдельные команды очистки, а не комплексную команду docker system prune -af --volumes, пока вы не разберетесь, что делает каждая команда. Помните, что как только ресурсы удалены, вам придется их воссоздать или скачать снова, если это потребуется.

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

Источники

  1. Как удалить все локальные образы Docker? - Stack Overflow
  2. Как удалить образы Docker, контейнеры и тома | DigitalOcean
  3. Команды Docker для удаления всех контейнеров и образов · GitHub
  4. Docker - Удаление всех контейнеров и образов - GeeksforGeeks
  5. Как удалить все образы Docker, контейнеры, тома и сети
  6. Очистка неиспользуемых объектов Docker | Docker Docs
  7. Docker system prune: Подробное руководство по удалению неиспользуемых объектов
  8. Docker system prune | Docker Docs
  9. Docker Prune: 6 простых шагов для освобождения дискового пространства
  10. Как удалить все образы Docker и другие ресурсы в 2024 году - UMA Technology
Авторы
Проверено модерацией
Модерация