Перейти к содержимому
Главная страница » Как пересобрать контейнер Docker

Как пересобрать контейнер Docker

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

И так возможно два варианта пересборки контейнера с помощью docker-compose, если вы используете этот инструмент и у вас есть файл docker-compose.yaml и без docker compose.

Рекомендуется использовать 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *