Я где-то читал, что образ докера hello-world создан с нуля, поэтому у него нет оболочки, тогда как он выполняет исполняемый файл hello
? Разве нам не нужна оболочка для выполнения файла?
Как контейнер hello world печатает текст приветствия?
Ответы (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
Don't we need a shell to execute a file ?
- оболочка сама по себе является исполняемым файлом. Вам не нужна оболочка для выполнения файла. Просто запустите его вместо оболочки. - person KamilCuk   schedule 29.11.2019