Как запускать и останавливать Docker контейнеры
DevOpsDockerинфраструктураконтейнеризацияуправление контейнерами
Что проверяют
Базовое владение инструментом. Ответ на уровне двух команд считается неполным: ждут понимания жизненного цикла и работы с логами.
Как отвечать
Основные команды с пояснением смысла:
docker run -d --name app -p 8080:8080 --env-file .env myimage:1.4 # создать и запустить
docker ps # что работает сейчас
docker ps -a # включая остановленные
docker logs -f app # смотреть логи
docker exec -it app sh # зайти внутрь работающего контейнера
docker stop app # мягкая остановка: SIGTERM, затем SIGKILL по таймауту
docker start app # запустить остановленный
docker rm app # удалить контейнерЧто отличает уверенный ответ:
runсоздаёт новый контейнер каждый раз, аstartзапускает существующий. Отсюда куча остановленных контейнеров у тех, кто путает эти команды;- остановка мягкая: контейнер получает сигнал завершения и время на корректное закрытие. Приложение должно этот сигнал обрабатывать, иначе соединения рвутся;
killвместоstopтолько когда процесс завис;- данные: с удалением контейнера исчезает его записываемый слой, поэтому состояние держат в томах;
- набор сервисов запускают через
docker compose up -dи останавливаютdocker compose down, а флаг для удаления томов там опасен, потому что уносит данные; - уборка:
docker system pruneосвобождает место, занятое остановленными контейнерами и висячими образами, и это регулярная операция на сервере.
Где спотыкаются
Плодят контейнеры через run вместо start и потом удивляются занятому месту.
Не знают про пробрасывание портов и не могут объяснить, почему сервис недоступен снаружи.
Останавливают контейнер с базой без тома и теряют данные.