Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>[docker dockerfile]}} ====== Dockerfile ====== * **RUN**: В основном используемый для создания образов и установки приложений и пакетов, создает новый слой поверх существующего образа, фиксируя результаты. * **CMD**: Устанавливает параметры по умолчанию, которые можно переопределить из интерфейса командной строки Docker (CLI) при запуске контейнера. * **ENTRYPOINT**: Параметры по умолчанию, которые нельзя переопределить, когда контейнеры Docker запускаются с параметрами CLI. <note tip> * В общем случае у вас должен быть Dockerfile CMD, а не Compose command:. Если не определить ни одной из них, то получите сообщение об ошибке. * В идеале отдельно указывать исполяемый бинарник в ENTRYPOINT и отдельно команды к нему в CMD. </note> ===== ENTRYPOINT / CMD ===== ^ Режим ^ Пример ^ Формат запуска ^ Завершение работы ^ $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] | {{https://habrastorage.org/r/w1560/web/ca2/564/592/ca25645927e9445c9a70475de1be7afc.png?800|}} ==== Правила использования ==== * Если используется режим 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 === ====== Ссылки ====== {{topic>[docker]}}СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal