# Гайд по чистому перезапуску 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 ``` **Как это работает:** Операторы `&&` гарантируют, что очистка мусора начнется только после успешного запуска проекта.