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