Образ задаёт исходное содержимое
Образ содержит файлы, библиотеки и настройки, необходимые для запуска. Он строится из слоёв и служит исходной основой. Из одного образа можно создать несколько контейнеров, но они не становятся одним общим экземпляром приложения. Когда программа внутри контейнера создаёт или изменяет файл, это не переписывает исходный образ автоматически. У контейнера есть собственный изменяемый слой. Поэтому исправление файла внутри работающего экземпляра ещё не означает, что следующий экземпляр получит ту же правку. Если изменение относится к самой программе, его обычно оформляют в процессе сборки нового образа, сохраняя воспроизводимость.
Остановка отличается от удаления
Остановленный контейнер существует дальше вместе со своим изменяемым слоем. Его можно запустить снова. Удаление контейнера завершает существование этого слоя, и файлы, хранившиеся только в нём, не переходят автоматически в новый экземпляр. Представьте учебное приложение, которое записывает отчёт в обычный внутренний каталог. После остановки и запуска того же контейнера отчёт может остаться, создавая впечатление надёжного хранения. Но при удалении и создании нового контейнера из прежнего образа этот отчёт отсутствует. Проверка только перезапуска поэтому не подтверждает сохранность данных при замене экземпляра.
Том отделяет данные от контейнера, но не заменяет копию
Том является управляемым Docker хранилищем, которое подключается к определённому пути внутри контейнера. Приложение видит каталог, однако его содержимое хранится отдельно от изменяемого слоя контейнера. Если том сохранён и правильно подключён к новому экземпляру, данные могут использоваться дальше. Другой вариант, привязка каталога хоста, связывает путь контейнера с конкретным местом на машине. Эти способы отличаются управлением и условиями доступа. В обоих случаях важно знать, куда действительно пишет приложение. Наличие тома в конфигурации бесполезно, если рабочие файлы сохраняются по другому пути. Также постоянное хранилище не защищает автоматически от ошибочного удаления данных, повреждения или потери самого хоста. Резервное копирование и проверка восстановления остаются отдельными задачами.
Попробуйте на практике
Разберите судьбу файлов в модели Docker на бумаге, ничего не удаляя в работающей системе.
- Нарисуйте образ и два контейнера, созданных из него. В первом обозначьте файл отчёта в собственном изменяемом слое, во втором другой файл с тем же именем.
- Запишите, что произойдёт при остановке и повторном запуске первого контейнера, а затем отдельно при его удалении и создании нового из образа.
- Добавьте том и перенесите в модели место записи отчёта в подключённый каталог. Отметьте, что для нового контейнера нужно сохранить том и повторно подключить его.
- Составьте три проверочных вопроса: куда пишет приложение, что удаляется при замене и где находится проверяемая резервная копия.
Как проверить результат. Изменения одного контейнера не приписаны образу или другому контейнеру. Остановка отделена от удаления, а том назван отдельным хранилищем, без обещания автоматически защитить данные от любой потери.
Частые вопросы
Два контейнера из одного образа автоматически видят файлы друг друга?
Нет. Их изменяемые слои отдельные. Совместное использование данных требует явно организованного хранилища или другого способа обмена, подходящего приложению.
Если образ обновился, данные тома тоже должны обновиться?
Это разные объекты. Новая версия приложения может требовать совместимой структуры данных, поэтому обновление и возможные преобразования планируют отдельно. Само наличие нового образа не гарантирует совместимость с прежним содержимым тома.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.