Чем образ отличается от контейнера и куда попадают файлы, которые процесс создаёт после запуска?
как ответить Образ — неизменяемый шаблон: конфигурация и набор content-addressed слоёв файловой системы. Контейнер — запущенный или остановленный экземпляр образа с собственным runtime-состоянием и верхним writable layer. Файлы в этом слое живут только вместе с контейнером; важные данные выносят в volume или внешнее хранилище.
Несколько контейнеров могут разделять read-only слои одного образа, но у каждого будет свой верхний слой изменений. Запись существующего файла обычно реализуется механизмом copy-on-write: изменение видно контейнеру, не меняя исходный image layer.
Из этого следуют практические свойства:
- новый контейнер из того же digest начинает с исходного состояния образа;
- удаление контейнера удаляет его writable layer, если данные не смонтированы отдельно;
docker commitтехнически может сделать новый образ из изменений, но это плохо воспроизводимый процесс доставки;- конфигурацию и бинарники лучше получать из декларативной сборки, а данные — из volume, БД или object storage.
Остановленный контейнер всё ещё имеет своё состояние, поэтому повторный start отличается от создания нового экземпляра. В production рассчитываю именно на заменяемость: контейнер можно удалить и воссоздать без ручного ремонта внутри. Логи также не стоит хранить только в writable layer без ограничений и внешнего сбора: они растут вместе с локальным storage и исчезают при очистке.
чтобы прозвучать сильнее Объясни различие между OCI manifest, config и filesystem layers, а также почему tag не идентифицирует неизменяемое содержимое. Свяжи copy-on-write с ценой интенсивной записи в верхний слой.