Разница между командами RUN, CMD и ENTRYPOINT Docker
Такие команды, как CMD , RUN и ENTRYPOINT , взаимозаменяемы, когда вы пишете файл докеров для создания образа Docker. Однако, если вы только начали использовать Docker или у вас недостаточно практического опыта работы с этими командами, эти команды могут вызвать у вас много путаницы. В этой статье мы собираемся подробно обсудить все три команды с практическими примерами.
Но прежде чем мы углубимся в объяснение, нам нужно сначала понять различные формы выполнения. Мы можем использовать две разные формы для выполнения команд в Docker .
Форма оболочки:
Нормальная обработка оболочки происходит, если мы выбираем выполнение команд в форме оболочки. За кулисами bash вызывает / bin / sh -c . Общая форма команд оболочки показана ниже:
<Инструкция> <Команда>
Чтобы получить более четкое представление, посмотрите на команды ниже.
ЗАПУСТИТЬ apt-get -y установить firefox CMD эхо "GeeksforGeeks" ENTRYPOINT echo "GeeksforGeeks"
Обе приведенные выше команды выводят «GeeksforGeeks». Оболочка команд выполнения обычно используется для команд RUN.
Исполняемая форма:
Исполняемая форма команд обычно используется для команд CMD и ENTRYPOINT. Общая форма исполняемых команд показана ниже:
<Инструкция> [«исполняемый файл», «параметр № 1», «параметр № 2», ...]
Использование исполняемой формы команд выполняет команды напрямую, и обработка оболочки не выполняется. Ознакомьтесь с командами ниже:
ENTRYPOINT ["/ bin / echo", "geeksforgeeks"] CMD ["/ bin / echo", "geeksforgeeks"]
Давайте теперь попробуем более подробно разобраться в командах RUN , CMD и ENTRYPOINT.
1. Команда RUN:
Когда вы используете команду RUN в своем файле докеров , она всегда создает новый промежуточный слой изображения поверх предыдущих. Вот почему всегда рекомендуется объединять все команды RUN вместе.
ЗАПУСТИТЬ команда в исполняемой форме:
RUN ["apt-get", "install", "firefox"]
Команда RUN в форме оболочки:
ЗАПУСТИТЬ apt-get -y установить firefox
2. Команда CMD
Команда CMD используется для установки команды по умолчанию, которая запускается после запуска контейнера Docker. Если вы предоставляете команду с командой запуска Docker, аргументы CMD игнорируются из файла dockerfile. В случае нескольких команд CMD выполняется только последняя.
CMD ["python3", "app.py"]
Если вы используете ENTRYPOINT в своем файле докеров , вы можете добавить некоторые дополнительные параметры, используя следующую форму команды CMD.
CMD ["parameter 1", "parameter 2"]
Обратите внимание, что команды CMD игнорируются, если вы указываете аргументы в своей команде запуска Docker.
sudo docker run -it ubuntu bash
Если вы используете указанную выше команду и в то же время использовали команду CMD в своем файле докеров , она игнорируется и просто открывает bash.
Например, если файл докеров содержит:
Если мы используем дополнительные аргументы вместе с командой docker run, такой как «bash», она просто откроет bash и ничего не отобразит.
3. Команда ENTRYPOINT
Команда ENTRYPOINT , в отличие от CMD , не игнорирует дополнительные параметры, которые вы указываете в своей команде запуска Docker.
Рассмотрим пример ниже:
ENTRYPOINT ["эхо", "Geeksforgeeks"] CMD ["Руководства по Docker"]
Например, если файл докеров
Вывод вышеуказанных команд при запуске контейнера Docker без каких-либо дополнительных аргументов будет:
Учебники по Docker от Geeksforgeeks
Если вы укажете дополнительные параметры, аргументы CMD игнорируются.
В заключение, в этой статье мы обсудили оболочку и исполняемую форму для выполнения инструкций dockerfile. Затем мы обсудили различия между командами RUN , CMD и ENTRYPOINT, каждая с примером.