Как остановить контейнер Docker?

«Как остановить контейнер Docker?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-пайплайнах и при управлении инфраструктурой остановка контейнеров — базовая операция. Вот как я это делаю:

1. Остановка с graceful shutdown: Команда docker stop отправляет сигнал SIGTERM, позволяя контейнеру корректно завершить процессы.

   # Остановка по имени
   docker stop my-app-container
   # Остановка по ID
   docker stop a1b2c3d4
   # Остановка с таймаутом (по умолчанию 10 сек)
   docker stop -t 30 my-app-container

2. Принудительная остановка: Если контейнер не реагирует на SIGTERM, docker kill отправляет SIGKILL.

   docker kill my-app-container
   # Можно указать конкретный сигнал
   docker kill --signal=SIGINT my-app-container

3. Остановка нескольких контейнеров:

   # Остановить все запущенные контейнеры
   docker stop $(docker ps -q)
   # Остановить контейнеры по фильтру (например, по label)
   docker stop $(docker ps -q --filter "label=environment=staging")

4. В контексте оркестрации (Docker Compose / Swarm):

   # Остановка сервисов, определённых в docker-compose.yml
   docker-compose down
   # Остановка только определённого сервиса
   docker-compose stop service_name

Практическое замечание: В CI/CD скриптах я часто комбинирую эти команды, например, останавливаю старый контейнер перед развёртыванием новой версии. Всегда проверяю, что контейнер действительно остановился, с помощью docker ps -a | grep <name>.