Как контейнер hello world печатает текст приветствия?

Я где-то читал, что образ докера hello-world создан с нуля, поэтому у него нет оболочки, тогда как он выполняет исполняемый файл hello? Разве нам не нужна оболочка для выполнения файла?


person Sandipan    schedule 29.11.2019    source источник
comment
Команды запускаются в ядре Linux, обычно с использованием семейства функций exec так что оболочка не нужна. Аналогичный вопрос Как Docker запускает команду, не вызывая командную оболочку?   -  person b0gusb    schedule 29.11.2019
comment
Don't we need a shell to execute a file ? - оболочка сама по себе является исполняемым файлом. Вам не нужна оболочка для выполнения файла. Просто запустите его вместо оболочки.   -  person KamilCuk    schedule 29.11.2019


Ответы (1)


Поскольку докер CMD предназначен для запуска исполняемого файла.

CMD

Инструкция CMD имеет три формы:

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

В Dockerfile может быть только одна инструкция CMD. Если вы укажете более одного CMD, вступит в силу только последний CMD.

Основная цель CMD — предоставить значения по умолчанию для исполняемого контейнера. Эти значения по умолчанию могут включать исполняемый файл или исключать исполняемый файл, и в этом случае вы также должны указать инструкцию ENTRYPOINT.

Таким образом, CMD и точка входа запускают исполняемый файл, вам не нужна оболочка. вы получите тот же ответ, если запустите

docker run -it --entrypoint ./hello --rm hello-world
docker run -it --rm hello-world
person Adiii    schedule 29.11.2019