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