Это старая версия документа!


Dockerfile

  • RUN: В основном используемый для создания образов и установки приложений и пакетов, создает новый слой поверх существующего образа, фиксируя результаты.
  • CMD: Устанавливает параметры по умолчанию, которые можно переопределить из интерфейса командной строки Docker (CLI) при запуске контейнера.
  • ENTRYPOINT: Параметры по умолчанию, которые нельзя переопределить, когда контейнеры Docker запускаются с параметрами CLI.
В общем случае у вас должен быть Dockerfile CMD, а не Compose command:. Если не определить ни одной из них, то получите сообщение об ошибке.
  • Если во время выполнения определена только одна из инструкций, то и CMD и ENTRYPOINT будут иметь одинаковый эффект.
  • Те же результаты будут, если использовать CMD вместо ENTRYPOINT.
Режим Пример Формат запуска Завершение работы $PATH
SHELL ENTRYPOINT ping www.ya.ru /bin/sh -c ping www.ya.ru - [ ]
EXEC :!: ENTRYPOINT ["ping", "www.ya.ru"] ping www.ya.ru CTRL-C [x]

  • Если используется режим shell для ENTRYPOINT, CMD игнорируется.
  • При использовании режима exec для ENTRYPOINT аргументы CMD добавляются в конце.
  • При использовании режима exec для инструкции ENTRYPOINT необходимо использовать режим exec и для инструкции CMD. Если этого не сделать, Docker попытается добавить sh -c в уже добавленные аргументы, что может привести к некоторым непредсказуемым результатам.
  • Инструкции ENTRYPOINT и CMD могут быть переопределены с помощью флагов командной строки.
  • Все вышеперечисленные факты справедливы, но разработчики имеют возможность переопределять флаги в команде docker run
  • Используйте ENTRYPOINT, если вы не хотите, чтобы разработчики изменяли исполняемый файл, который запускается при запуске контейнера. Вы можете представлять, что ваш контейнер – исполняемая оболочка.
  • Используйте только CMD (без определения ENTRYPOINT), если требуется, чтобы разработчики могли легко переопределять исполняемый файл. Если точка входа определена, исполняемый файл все равно можно переопределить, используя флаг –entrypoint.

command

В файле Compose переопределяет CMDDockerfile. Есть некоторые незначительные синтаксические различия (в частности, Compose никогда не будет автоматически вставлять sh -cза вас оболочку оболочки), но они контролируют одно и то же в метаданных контейнера.

Однако помните, что помимо Compose существуют и другие способы запуска контейнера. docker run не прочитает ваш docker-compose.yml файл и не увидит эту command: он также не читается такими инструментами, как Kubernetes. Если вы встроите Dockerfile CMD в, оно будет использовать во всех вариантах.

Переопределение действительно необходимо command:в том случае, если вам нужно запустить основной процесс, отличный от стандартного, для контейнера.

endpoint

Ссылки