И так мы доработали наше приложение и его необходимо передеплоить для этого необходимо пересобрать docker образ и запустить из него контейнер, проще говоря пересобрать контейнер, хотя такого понятия нет, но смысл всем понятен, так как пересобираем образ, а не контейнер.
Рекомендуется использовать Docker compose, но например при деплое простого Telegram бота с одним файлом на Python, избыточен.
Вариант 1: без docker compose (чистый Docker)
Если проекта на Compose нет, используйте docker build
и docker run
.
Собрать образ:
docker build -t myapp:latest .
# или без кеша:
docker build --no-cache -t myapp:latest .
Остановить и удалить старый контейнер:
docker stop myapp || true
docker rm myapp || true
Запустить новый контейнер:
docker run -d --name myapp -p 8000:80 --restart unless-stopped myapp:latest
Обновить базовый образ и пересобрать:shellscriptdocker pull mybase:latestdocker build -t myapp:latest .docker run -d —name myapp -p 8000:80 —restart unless-stopped myapp:latest
Вариант 2: с использованием docker compose (рекомендуется)
Предполагается, что у вас есть docker-compose.yml
и установлен Docker Compose V2 (команда docker compose без дефиса).
Пересобрать и перезапустить все сервисы:
docker compose build --pull
docker compose up -d --remove-orphans
Пересобрать конкретный сервис и перезапустить только его:
docker compose build --pull web
docker compose up -d web
Пересобрать без кеша (когда изменения «не берутся» из-за кеширования):
docker compose build --no-cache
docker compose up -d
Автопересборка и рестарт за один шаг:
docker compose up -d --build
Передать build-аргументы:
docker compose build --build-arg NODE_ENV=production
Обновить базовые образы перед сборкой:
docker compose pull
docker compose build
docker compose up -d
Проверить статус:
docker compose ps
docker compose logs -f
Важные нюансы и хорошие практики
Теги образов: используйте семантические теги вместо «вечного» latest
, например myapp:2025-09-02
или короткий Git SHA. Это упрощает откаты.
ENV и конфиги: изменения в .env
или переменных окружения требуют пересоздания контейнера (up -d
у Compose, либо docker run
заново).
Миграции БД: после пересборки выполните миграции (например, docker compose run —rm web python manage.py migrate).
Кеш сборки: если Docker «не видит» изменения, используйте —no-cache и проверьте порядок слоёв в Dockerfile (часто помогает перенести COPY выше).
Очистка мусора:
docker image prune -f
docker builder prune -f
Zero-downtime (опционально): применяйте Blue-Green/Canary-подходы или docker compose up -d —scale web=2 за балансировщиком.
Проверка здоровья: настройте HEALTHCHECK
в Dockerfile
и мониторьте docker ps/docker compose ps
.
Логи и отладка:
docker compose logs -f web
# или
docker logs -f myapp
Короткие шпаргалки
Быстро «пересобрать и поднять» с Compose
docker compose up -d --build
Жёстко пересобрать без кеша
docker compose build --no-cache && docker compose up -d
Обновить образы и перезапустить
docker compose pull && docker compose up -d