Gymterview
junior

Чем отличается контейнер от образа?

Образ — это неизменяемый шаблон (набор read-only слоёв), а контейнер — запущенный экземпляр этого образа с добавленным записываемым слоем и собственным состоянием.

Аналогия для Java-разработчиков: образ — это класс, контейнер — это объект (экземпляр класса). Из одного класса можно создать множество объектов, из одного образа — множество контейнеров.

Характеристика Образ (Image) Контейнер (Container)
Аналогия в Java Класс Объект (экземпляр класса)
Изменяемость Неизменяемый (immutable) Изменяемый (имеет writable layer)
Хранение На диске в реестре или локально Запущенный или остановленный процесс
Создание docker build / docker pull docker run / docker create
Количество Один образ Множество контейнеров из одного образа
Состояние Нет (шаблон) Есть (running, stopped, paused)

Образ — это набор неизменяемых слоёв (read-only layers), представляющих файловую систему, метаданные и инструкции для запуска. Образ не потребляет CPU и не имеет состояния.

Контейнер — это запущенный экземпляр образа. При создании контейнера Docker добавляет тонкий записываемый слой (writable/container layer) поверх слоёв образа. Все изменения в файловой системе (создание, изменение, удаление файлов) записываются в этот слой.

Пример
Контейнер = Образ (read-only) + Writable Layer + Конфигурация (сети, тома, переменные)

Из одного образа можно запустить множество контейнеров, и каждый будет иметь свой независимый writable layer:

Пример
docker run -d --name app1 my-spring-app
docker run -d --name app2 my-spring-app
docker run -d --name app3 my-spring-app
# Три независимых контейнера из одного образа

При удалении контейнера (docker rm) writable layer удаляется. Данные, которые нужно сохранить, следует хранить в томах (volumes).

На собеседовании: используйте аналогию класс/объект — она понятна любому Java-разработчику. Ключевое: образ неизменяемый (read-only слои), контейнер добавляет writable layer. При удалении контейнера writable layer теряется, поэтому для персистентных данных нужны volumes.