Разница между командами RUN, CMD и ENTRYPOINT Docker

Опубликовано: 18 Декабря, 2021

Такие команды, как 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, каждая с примером.