# Гайд по чистому перезапуску Docker-проектов
Когда мы обновляем код, нам важно сделать три вещи: запустить новую версию, сохранить данные в БД и не оставить после себя мусора на диске.
## Полный цикл безопасного обновления
Рекомендуется использовать связку из трех этапов.
### Шаг 1: Остановка старой версии
Bash
```
docker compose down
```
* **Что происходит:** Docker останавливает и удаляет контейнеры и сети проекта.
* **Безопасность данных:** **Volumes не удаляются**, ваши базы данных (Postgres, Redis) в безопасности.
### Шаг 2: Сборка и запуск (Выбор стратегии)
Здесь у тебя есть два пути в зависимости от задач:
**Вариант А: Быстрая сборка (с кэшем)**
Bash
```
docker compose up -d --build
```
* **Как работает:** Docker использует «слои» от прошлых сборок. Если ты изменил только одну строку кода, он не будет заново скачивать зависимости (библиотеки, пакеты), а просто подставит их из памяти.
* **Когда использовать:** Обычное обновление кода, фикс багов.
**Вариант Б: Чистая сборка (без кэша)**
Bash
```
docker compose up -d --build --no-cache
```
* **Как работает:** Docker игнорирует старые заготовки и собирает образ абсолютно с нуля.
* **Когда использовать:** Обновление версий ОС (например, переход с Debian на Ubuntu), изменение системных зависимостей или если сборка «глючит».
### Шаг 3: Уборка мусора (Critical Step!)
Bash
```
docker image prune -f
```
* **Что происходит:** Удаляет «ошметки» старых образов (`:`), которые остались после пересборки на Шаге 2.
* **Зачем это нужно:** Освобождает место. Без этого Шаг 2 будет потихоньку «отъедать» твой диск после каждого деплоя.
***
## Разбор флагов: что они делают на самом деле?
* **`--build`** — Заставляет Docker проверить Dockerfile и создать новый образ. Без него он может просто запустить старую версию.
* **`--no-cache`** — Принудительная сборка «с нуля».
* *С кэшем:* Готовим из заготовок (быстро).
* *Без кэша:* Покупаем все продукты заново (медленно, но надежно).
* **`-d` (Detached)** — Запуск в фоне.
* **`--force-recreate`** — Пересоздать контейнер, даже если в конфигах ничего не менялось.
* **`-v` (ОПАСНО)** — Флаг для `down`. **Удаляет Volumes вместе с данными БД.**
***
## Итоговая шпаргалка «Одной строкой»
**Для быстрого обновления (рекомендуется):**
Bash
```
docker compose down && docker compose up -d --build && docker image prune -f
```
**Для «капитального» обновления (чистый лист):**
Bash
```
docker compose down && docker compose up -d --build --no-cache && docker image prune -f
```
**Как это работает:** Операторы `&&` гарантируют, что очистка мусора начнется только после успешного запуска проекта.