Что делает точка входа Docker?

Что делает точка входа Docker Советы и хитрости

Dockerfiles — важная часть работы с контейнерами; они позволяют нам создавать образы из Dockerfile и настраивать их в соответствии с нашими потребностями использования, потому что Dockerfiles работают с использованием директив и параметров для конфигураций.

Одной из распространенных директив в Dockerfile является директива ENTRYPOINT. Эта директива определяет исполняемый файл, который запускается во время создания контейнера из образа Dockerfile.

В этом руководстве рассматривается, как работает директива ENTRYPOINT в Docker и как ее использовать в файлах Dockerfiles.

Основное использование

Директива Entrypoint в Dockerfile принимает две формы, EXEC формы и оболочки формы. Наличие директивы ENTRYPOINT в Dockerfile предотвращает автоматический запуск и остановку контейнера.

Общий синтаксис директивы ENTRYPOINT:

Форма Exec:

ENTRYPOINT [exec, option1, option2…optionN]

Exec представляет исполняемый файл для запуска; параметры — это параметры для запуска исполняемого файла.

Другая форма директивы ENTERYPOINT — это оболочка. Форма оболочки запускается как подкоманда из / bin / sh -c [команда]. Общий синтаксис этой формы следующий:

ENTRYPOINT command option1, option2…option

Точно так же команда является исполняемым файлом оболочки, а параметры представляют собой параметры, передаваемые команде.

Как работает ENTRYPOINT

Вкратце, директива ENTRYPOINT в Dockerfile позволяет контейнерам, созданным из образа, запускать исполняемый файл после создания. К сожалению, две формы директивы ENTRYPOINT имеют тенденцию вести себя по-разному:

Форма оболочки директивы ENTRYPOINT не поддерживает аргументы команды при запуске контейнера. Кроме того, в отличие от формы exec, которая запускает исполняемый файл в фоновом режиме, форма оболочки запускается как часть / bin / sh -c, запускающая процесс с другим значением PID, чем процесс контейнера.

С другой стороны, форма exec поддерживает аргументы во время создания контейнера. Это означает, что команда запускается после исполняемого файла, установленного в ENTRYPOINT. Так, например, если вы добавляете параметр в команду docker run, она запускается в фоновом режиме после исполняемого файла, установленного в ENTRYPOINT. Кроме того, Docker позволяет вам переопределить значение ENTRYPOINT, используя параметр —entrypoint во время создания контейнера.

Читайте также:  Каковы этапы установления связи TCP?

Пример 1: Форма Exec

Проиллюстрируем, как работает форма exec. В этом примере мы используем изображение nginx в качестве тестового примера.

Пример файла Dockerfile содержит следующие записи:

FROM debian:latest
RUN apt-get update && \
apt-get install -y nginx
LABEL maintainer=«linuxhint»
LABEL version=«1.0»
LABEL description=«A simple image running Nginx on Debain 10»
EXPOSE 80/tcp
ENTRYPOINT [ «nginx»«-g»«daemon off;» ]

Давайте создадим образ из файла Docker как:

docker build —pull —rm -f «Dockerfile-t nginx:custom «.«

С помощью изображения давайте создадим контейнер и запустим оболочку в контейнер.

docker exec -it f3538752d6c3 bash

Внутри оболочки контейнера давайте выполним основные команды и установим несколько пакетов.

root@f3538752d6c3:/# sudo apt-get update && apt-get install htop

Если вы запустите htop внутри контейнера, вы получите результат, аналогичный показанному ниже:

Если вы запустите htop внутри контейнера, вы получите результат

Если вы проигнорируете все рабочие процессы nginx и htop, вы заметите, что основной демон nginx работает с PID равным 1.

Пример 2: Форма оболочки

Если вы измените Dockerfile, чтобы он выглядел, как показано в записях ниже:

FROM debian:latest
RUN apt-get update && \
apt-get install -y nginx
LABEL maintainer=«linuxhint»
LABEL version=«1.0»
LABEL description=«A simple image running Nginx on Debain 10»
EXPOSE 80/tcp
ENTRYPOINT «nginx»«-g»«daemon off;»

Постройте образ и создайте контейнер.

docker build —pull —rm -f «Dockerfile.dockerfile» -t nginx:custom «.»

docker run -d —name nginx-exec-form nginx:custom

Внутри контейнера, если мы запустим команду htop, мы увидим, что рабочий процесс nginx работает в / bin / sh -c как:

Внутри контейнера, если мы запустим команду htop

Вы также можете получить аналогичный результат, исследуя контейнер с помощью команды docker inspect следующим образом:

Читайте также:  Как создавать Twitch Emotes

Вы также можете получить аналогичный результат, исследуя контейнер

Краткое резюме

Хорошо бы не путать директивы docker ENTRYPOINT и docker CMD. Хотя обе директивы определяют команды, которые docker выполняет во время выполнения контейнера:

Убедитесь, что вы используете директиву Dockerfile ENTRYPOINT при запуске контейнера как исполняемого файла.

Используйте CMD для определения аргументов по умолчанию для ENTRYPOINT или для выполнения специальных команд в контейнере.

ПРИМЕЧАНИЕ: аргументы CMD будут переопределены при запуске контейнера с другими аргументами.

Как указывалось ранее, любой Dockerfile должен включать директиву CMD или ENTRYPOINT.

Заключение

В заключение, Docker ENTRYPOINT — очень подходящий выбор при определении исполняемого файла для контейнеров. Чтобы узнать больше, проверьте документацию.

Оцените статью
ПОПУЛЯРНЫЕ ТЕХНОЛОГИИ
Добавить комментарий