Урок 01 · Основа

Image, container, process

Запустите веб-сервер в контейнере и научитесь читать docker run как точное описание создаваемого runtime-объекта.

Время: 15-20 минут Результат: работающий Nginx Интервью: ответ за 30 секунд

Что получится

  • Отличить образ от контейнера и процесса.
  • Объяснить каждую часть команды запуска.
  • Проверить состояние и логи без догадок.
  • Связать базовую модель с тестовым контуром AQA.

Сначала из памяти

Не ищите определение. Одним-двумя предложениями ответьте: что происходит после docker run nginx:alpine?

Рабочая модель

Образ — неизменяемый пакет файлов, библиотек и конфигурации. Контейнер — созданный из образа runtime-объект с настройками, сетью и writable layer. Пока основной процесс контейнера работает, контейнер имеет состояние running.

Ключевая мысль Контейнер не является облегчённой виртуальной машиной. Для практической модели это изолированный процесс с подготовленной файловой системой и ограниченным окружением; несколько контейнеров на одном Linux-хосте разделяют ядро.

Официальные определения и ограничения модели: What is a container? и What is an image?.

Практика: один контейнер

Убедитесь, что Docker Engine доступен, затем запустите Nginx. Привязка к 127.0.0.1 оставляет тестовый порт доступным только с текущего хоста.

docker version

docker run --name wms-web \
  --detach \
  --publish 127.0.0.1:8080:80 \
  nginx:alpine
ФрагментЧто он задаёт
docker runПри необходимости скачивает image, создаёт container и запускает его основной process.
--name wms-webДаёт контейнеру стабильное имя для последующих команд.
--detachЗапускает в фоне и возвращает управление терминалу.
127.0.0.1:8080:80Направляет host TCP 8080 в container TCP 80 только через loopback хоста.
nginx:alpineВыбирает repository nginx и tag alpine.

Проверьте наблюдаемые факты:

docker ps --filter name=wms-web
docker logs wms-web
curl --fail http://127.0.0.1:8080/
docker inspect --format '{{.State.Status}} {{.Config.Image}}' wms-web

Ожидается: статус running, image nginx:alpine, access log после curl и HTML-ответ Nginx.

Если docker version не показывает Server CLI установлен, но daemon недоступен. Проверьте, запущен ли Docker Engine, выбран ли правильный context и имеет ли пользователь доступ к socket. Не маскируйте проблему через произвольный sudo: сначала назовите нарушенную границу доступа.

Диагностика вместо перезапуска

Остановите контейнер и предскажите результат запроса до выполнения команд:

docker stop wms-web
curl --fail http://127.0.0.1:8080/
docker ps --filter name=wms-web
docker ps --all --filter name=wms-web
docker inspect --format '{{.State.Status}} {{.State.ExitCode}}' wms-web

docker ps показывает только running containers, поэтому строка исчезнет. docker ps --all покажет существующий stopped container. Образ при этом не удаляется: один и тот же image может создать много containers.

docker rm wms-web
docker image ls nginx:alpine

Удаление контейнера освобождает его runtime-конфигурацию и writable layer, но не удаляет image.

Зачем это Senior AQA

В тестовом контуре image фиксирует исполняемое окружение, а container создаётся заново для конкретного запуска. Поэтому падение тестов нужно раскладывать по границам:

  • Тот ли image/tag запущен?
  • Создан ли container и работает ли основной process?
  • Опубликован ли нужный порт и на каком host address?
  • Что говорят status, exit code и logs?

Этот порядок отделяет дефект приложения от ошибки тестового окружения и уменьшает бессистемные перезапуски flaky-прогонов.

Проверка понимания

1. Как точнее разделить image и container?

2. Что делает docker run?

3. Что означает -p 8080:80?

4. Контейнер неожиданно завершился. Первый шаг?

Ответ на собеседовании

«Image — неизменяемый слоёный пакет приложения и его runtime-зависимостей. Container — созданный из image изолированный runtime-экземпляр со своей конфигурацией, сетью и writable layer. Его жизненный цикл обычно связан с основным процессом: процесс завершился — container перешёл в stopped. Один image может породить много containers».

Произнесите ответ своими словами без чтения. Затем добавьте пример из AQA: один image Playwright test runner запускается отдельным container для каждого CI job.

Первичные источники

Задавайте преподавателю вопросы по любому месту урока: особенно если фактический вывод команд отличается от ожидаемого.