Введение в сборку в Docker
Файла шагов из основного учебника хватает, пока программа запускается одной командой без оболочки. Один JSON-массив в конце рецепта задаёт программу и аргументы, а сборка и запуск проходят без сюрпризов.
Иной раз нужна постоянная программа, к которой при старте только дописывают слова. Тогда главный процесс не меняют каждый раз, а меняют лишь хвост команды или аргументы после имени образа в терминале.
Бывает, что команду удобнее записать строкой, как в оболочке: тогда подстановка и разбор идут через неё, а не напрямую в программу. Это другой стиль записи, не тот же самый массив без кавычек и скобок.
Значение может понадобиться только пока образ собирают: например, метка сайта для шага записи в файл, которую не хотят тащить в живой контейнер. Или то же значение нужно и при сборке, и при каждом старте - тогда его переносят в переменную окружения.
Шаги сборки и запуск иногда выполняют не от root, а от ограниченной учётной записи. Тогда и файлы в слоях, и главный процесс контейнера идут от выбранного пользователя.
Ещё встречаются копирование с распаковкой архива, периодическая проверка живости программы, сборка по другому имени файла и принудительный повтор шагов без кеша. Каждый такой приём разбирают отдельным коротким уроком с маленьким рецептом и проверкой в терминале.