В чём разница между CMD и ENTRYPOINT в Dockerfile
Python
Senior
Без компании
В чём разница между CMD и ENTRYPOINT в Dockerfile
Ответы
Разница между `CMD` и `ENTRYPOINT` в Dockerfile заключается в их назначении и поведении при запуске контейнера:
- **ENTRYPOINT** определяет команду, которая всегда будет выполняться при запуске контейнера. Её можно дополнить аргументами из `CMD` или переопределить с помощью `docker run --entrypoint`.
- **CMD** предоставляет аргументы по умолчанию для `ENTRYPOINT` или команду, которая выполнится, если `ENTRYPOINT` не указан. Аргументы `CMD` можно переопределить при запуске контейнера.
Пример:
```
# ENTRYPOINT + CMD
ENTRYPOINT ["echo", "Hello"]
CMD ["World"] # docker run → "Hello World"
# docker run myimage Python → "Hello Python"
# Только CMD
CMD ["echo", "Hello World"] # docker run → "Hello World"
# docker run myimage ls → выполнится `ls`
```
Если `ENTRYPOINT` не указан, `CMD` определяет команду для запуска. Если `ENTRYPOINT` есть, `CMD` становится его аргументами по умолчанию.