✏️ CMD vs ENTRYPOINT
Один из подписчиков недавно задал интересный вопрос:
Когда лучше использовать CMD, а когда ENTRYPOINT в Docker?
Эти два параметра могут запутать, но их применение зависит от того, как вы хотите запустить контейнер.
ENTRYPOINT
— основная команда контейнераЕсли вам нужно задать команду, которая всегда будет выполняться при запуске контейнера, используйте ENTRYPOINT.
Он задает команду, которая является обязательной для запуска контейнера, и её нельзя переопределить (без указания дополнительных аргументов).
Пример:
ENTRYPOINT ["python", "app.py"]
В этом случае контейнер всегда будет запускать python app.py
CMD
— параметры по умолчаниюCMD — это параметры, которые могут быть переданы командной строкой при запуске контейнера.
Если CMD используется в Dockerfile, но команда не была указана при запуске контейнера, то используется команда из CMD. Он также может быть переопределен во время запуска.
Пример:
CMD ["python", "app.py"]
Но если вы хотите передать другие параметры, например:
docker run my_image python other_app.py
То CMD будет переопределен.
Вы также можете использовать оба параметра вместе, когда хотите задать основную команду через
ENTRYPOINT
, а CMD
использовать для указания параметров по умолчанию.Пример:
ENTRYPOINT ["python"]
CMD ["app.py"]
Используйте
ENTRYPOINT
, если хотите, чтобы контейнер всегда выполнял одну конкретную команду.Используйте
CMD
, если хотите задать параметры по умолчанию, которые можно переопределить при запуске контейнера.Используйте оба вместе, чтобы задать команду с возможностью замены параметров.
💬 А какие у вас есть примеры использования
CMD
и ENTRYPOINT
? Поделитесь своим опытом в комментариях 👇