В чем разница между контейнером и образом в Docker?
Что проверяют
Для тестировщика вопрос прикладной: понимаете ли вы, откуда берётся стенд и почему баг воспроизводится на одном окружении и пропадает на другом. Следом обычно просят рассказать, куда деваются данные после удаления контейнера или как поднять окружение для автотестов.
Как отвечать
- образ (image): шаблон только для чтения. Собирается по
Dockerfileиз слоёв, каждая инструкция вродеRUNилиCOPYдаёт слой. У образа есть неизменяемый дайджестsha256:...и теги, которые можно переназначить; - контейнер: запущенный или остановленный экземпляр образа. Это слои образа плюс тонкий записываемый слой сверху, собственная конфигурация (переменные окружения, порты, сеть, тома) и процесс. Изоляцию дают namespaces и cgroups ядра хоста, отдельного ядра у контейнера нет;
- соотношение: из одного образа можно запустить сколько угодно независимых контейнеров. Так и работают параллельные прогоны: десять контейнеров
selenium/standalone-chromeиз одного образа; - жизненный цикл:
docker runэтоcreateплюсstart. Дальшеstopостанавливает, но не удаляет, аrmудаляет вместе с записываемым слоем. Смотреть:docker images,docker ps -a.
Для QA полезно добавить практику: логи через docker logs, заход внутрь через docker exec -it <контейнер> sh, стенд из нескольких сервисов через docker compose up, а в автотестах база или брокер через Testcontainers. Всё, что должно пережить пересоздание контейнера (данные тестовой БД, отчёты), выносят в том или bind mount.
Где спотыкаются
Называют контейнер лёгкой виртуальной машиной. Он делит ядро с хостом, поэтому на Mac и Windows Linux-контейнеры работают только внутри скрытой виртуалки Docker Desktop.
Считают, что тег latest всегда означает одно и то же. Тег переназначается при каждой публикации, и два стенда с одинаковым тегом могут крутить разные сборки. Для воспроизводимости фиксируют конкретную версию или дайджест, а в баг-репорт пишут, что именно было развёрнуто.
Правят что-то внутри живого контейнера (конфиг, файл) и считают, что это сохранится. После пересоздания контейнера изменения пропадут: в образ они без пересборки не попадают.