# Docker — Cleanup (Очистка и обслуживание)

Эта страница описывает команды и практики очистки Docker-окружения. Со временем на сервере накапливаются остановленные контейнеры, старые образы, build-cache и неиспользуемые volumes. Здесь разобраны способы безопасной очистки этих ресурсов и рекомендации по регулярному обслуживанию Docker-системы.

---

# Почему Docker со временем занимает много места

При работе Docker постоянно создаёт временные и устаревшие ресурсы:

* остановленные контейнеры
* старые образы
* build cache после сборок
* неиспользуемые сети
* volumes с данными

Если их не удалять, они могут занять **десятки гигабайт диска**.

---

# Проверка использования диска Docker

Перед очисткой полезно проверить, сколько места занимает Docker.

```bash id="7p0vfd"
docker system df
```

Пример вывода:

```text id="ny1s4p"
TYPE            TOTAL     ACTIVE    SIZE
Images          12        5         3.4GB
Containers      8         4         150MB
Local Volumes   6         4         8.2GB
Build Cache     -         -         2.1GB
```

Это показывает:

* сколько образов хранится
* сколько контейнеров существует
* сколько места занимают volumes
* размер build cache

---

# Очистка остановленных контейнеров

Контейнеры, которые были остановлены, продолжают существовать в системе.

Удалить их можно так:

```bash id="r3cqlj"
docker container prune
```

Docker попросит подтверждение.

Чтобы выполнить без подтверждения:

```bash id="2v9u3n"
docker container prune -f
```

---

# Очистка неиспользуемых образов

Если контейнеры пересобираются, старые образы остаются в системе.

Удалить их можно так:

```bash id="p3h1y1"
docker image prune
```

Удаляются **dangling images** — образы без тегов.

---

# Удаление всех неиспользуемых образов

```bash id="n0oq1d"
docker image prune -a
```

Эта команда удаляет все образы, которые не используются контейнерами.

> **Важно:**
> После удаления Docker при следующем запуске контейнера может заново скачать образ.

---

# Очистка неиспользуемых volumes

Volumes могут занимать много места, особенно если в них хранятся базы данных.

Удалить неиспользуемые volumes:

```bash id="z3ibk9"
docker volume prune
```

Без подтверждения:

```bash id="pcx9o7"
docker volume prune -f
```

> **Важно:**
> Удаляются только volumes, не подключённые к контейнерам.

---

# Очистка сетей

Иногда остаются неиспользуемые Docker-сети.

Удалить их можно так:

```bash id="v6j8hd"
docker network prune
```

---

# Полная очистка Docker

Docker предоставляет команду для очистки большинства временных ресурсов.

```bash id="f0e67x"
docker system prune
```

Удаляются:

* остановленные контейнеры
* неиспользуемые сети
* dangling images
* build cache

Без подтверждения:

```bash id="v9qakf"
docker system prune -f
```

---

# Полная очистка включая образы

```bash id="z6y9qt"
docker system prune -a
```

Удаляются:

* все остановленные контейнеры
* все неиспользуемые образы
* сети
* build cache

---

# Очистка build cache

Build cache создаётся при сборке Docker-образов.

Удалить cache можно так:

```bash id="1scnqs"
docker builder prune
```

Без подтверждения:

```bash id="8n9y2n"
docker builder prune -f
```

---

# Проверка больших Docker-директорий

Иногда полезно посмотреть, какие директории занимают больше всего места.

```bash id="2r5y1s"
du -sh /var/lib/docker/*
```

Это поможет понять, где именно находятся большие файлы.

---

# Регулярная очистка Docker

На серверах разработки рекомендуется периодически выполнять:

```bash id="0trvru"
docker system prune -f
```

Если активно собираются образы:

```bash id="6a2vpc"
docker builder prune -f
```

---

# Пример полной очистки

Пример набора команд:

```bash id="l8s5a8"
docker container prune -f
docker image prune -a -f
docker volume prune -f
docker network prune -f
docker builder prune -f
```

Эти команды удаляют почти все неиспользуемые ресурсы.

---

# Типичные проблемы с очисткой

## Удаление volumes с данными

Если выполнить:

```bash id="4fr4cf"
docker compose down -v
```

Docker удалит **все volumes проекта**, включая базы данных.

Поэтому эту команду нужно использовать осторожно.

---

## Удаление образов перед деплоем

Если удалить все образы, Docker будет вынужден заново скачивать их из registry.

Это может занять время.

---

# Когда нужно выполнять очистку

Очистку стоит выполнять, если:

* диск сервера заполняется
* Docker занимает слишком много места
* накопилось много старых образов
* часто выполняется сборка контейнеров

---

# Краткая памятка

```bash id="88duh4"
docker system df                # использование диска Docker

docker container prune          # удалить остановленные контейнеры
docker image prune              # удалить dangling images
docker image prune -a           # удалить неиспользуемые образы

docker volume prune             # удалить неиспользуемые volumes
docker network prune            # удалить неиспользуемые сети

docker builder prune            # очистить build cache

docker system prune             # очистка системы Docker
docker system prune -a          # полная очистка
```

---

# Итог

Со временем Docker накапливает большое количество неиспользуемых ресурсов:

* контейнеров
* образов
* volumes
* build cache

Регулярная очистка системы помогает:

* освободить дисковое пространство
* поддерживать стабильную работу сервера
* избежать проблем с переполнением диска.