O que o ponto de entrada do Docker faz?

O que o ponto de entrada do Docker faz?
Dockerfiles são uma parte crítica do trabalho com contêineres; Eles nos permitem criar imagens a partir de um Dockerfile e personalizá -las para atender às nossas necessidades de uso, porque o DockerFiles funciona usando diretivas e parâmetros para configurações.

Uma das diretivas comuns em um Dockerfile é a diretiva de entrada. Esta diretiva especifica o executável que é executado durante a criação de contêineres a partir da imagem do Dockerfile.

Este guia analisa como a Diretiva de Entrada no Docker funciona e como usá -lo em Dockerfiles.

Uso básico

A diretiva de entrada em um Dockerfile assume duas formas, formulário executivo e forma de concha. Ter uma diretiva de entrada no Dockerfile impede que o recipiente inicie e pare automaticamente.

A sintaxe geral da diretiva de entrada é:

Formulário executivo:

EntryPoint [EXEC, Option1, Option2… OptionN]

O executivo representa o executável para executar; As opções são os parâmetros a serem executados para o executável.

A outra forma da diretiva EnterheryPoint é o formulário de shell. O formulário de shell é executado como um subcomando de /bin /sh -c [comando]. A sintaxe geral para este formulário é como:

Opção de comando de entrada 1, opção2… opção

Da mesma forma, o comando é um shell executável, enquanto as opções representam os parâmetros para passar para o comando.

Como funciona o ponto de entrada

Em poucas palavras, a diretiva de entrada em um Dockerfile permite que os recipientes criados a partir da imagem executem um executável após a criação. Infelizmente, as duas formas da diretiva de entrada tendem a se comportar de maneira diferente:

A forma de shell da diretiva de entrada não suporta argumentos de comando ao iniciar o contêiner. Além disso, diferentemente do formulário executivo que executa o executável em segundo plano, o formulário de shell é executado como um sub -bin /sh -c lançando o processo com um valor PID diferente do processo de contêiner.

Por outro lado, o formulário executivo suporta argumentos durante a criação de contêineres. Isso significa que o comando é executado após o executável definido no ponto de entrada. Por exemplo, se você adicionar uma opção ao comando do Docker Run, ele será executado em segundo plano após o executável definido no ponto de entrada. Além disso, o Docker permite substituir o valor do ponto de entrada usando a opção -Entrypoint durante a criação de contêineres.

Exemplo 1: formulário executivo

Vamos ilustrar como o formulário executivo funciona. Neste exemplo, usamos uma imagem nginx como o caso de teste.

Uma amostra Dockerfile contém as entradas como:

De Debian: mais recente
Run Apt-Get Update && \
instalação apt -get -y nginx
Rótulo para manter "Linuxhint"
Versão de etiqueta = "1.0 "
Rótulo Descrição = "Uma imagem simples executando o nginx no DeBain 10"
Exponha 80/TCP
EntryPoint ["nginx", "-g", "Daemon off;" ]

Vamos construir a imagem a partir do arquivo do docker como:

Docker Build - -Pull - -rm -f "Dockerfile -T nginx: Custom"."

Com a imagem, vamos criar um contêiner e iniciar um shell no recipiente.

Docker Exec -it F3538752D6C3 BASH

Dentro do shell do contêiner, vamos executar comandos básicos e instalar alguns pacotes.

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

Se você executar o HTOP dentro do contêiner, obterá uma saída semelhante à mostrada abaixo:

Se você ignorar todos os processos e HTOP do funcionário do Nginx, você notará que o daemon principal nginx está funcionando como PID de 1.

Exemplo 2: Formulário de shell

Se você alterar o Dockerfile para olhar como mostrado nas entradas abaixo:

De Debian: mais recente
Run Apt-Get Update && \
instalação apt -get -y nginx
Rótulo para manter "Linuxhint"
Versão de etiqueta = "1.0 "
Rótulo Descrição = "Uma imagem simples executando o nginx no DeBain 10"
Exponha 80/TCP
EntryPoint "nginx" "-g" "Daemon Off;"

Construa a imagem e crie um contêiner.

Docker Build - -PULL - -RM -F "Dockerfile.Dockerfile "-t nginx: personalizado"."
Docker Run -D-Nome Nginx-ExecM-Form Nginx: Custom

Dentro do contêiner, se executarmos o comando HTOP, vemos que o processo do trabalhador nginx está sendo executado em /bin /sh -c como:

Você também pode obter uma saída semelhante examinando o contêiner usando o comando Docker Inspect como:

Recapitulação rápida

É bom não confundir o Docker EntryPoint e as Diretivas CMD do Docker. Embora ambas as diretrizes definam os comandos para o Docker executar durante o tempo de execução do contêiner:

Certifique -se de usar a Diretiva Dockerfile EntryPoint ao executar o contêiner como um executável.

Use CMD para definir argumentos padrão para a entrada ou para executar comandos ad-hoc no contêiner.

OBSERVAÇÃO: Os argumentos da CMD serão substituídos ao executar o contêiner com outros argumentos.

Como afirmado anteriormente, qualquer dockerfile deve incluir CMD ou Diretiva de entrada.

Para concluir.

Em conclusão, o Docker EntryPoint é uma escolha muito adequada ao definir executáveis ​​para os contêineres. Para saber mais, verifique a documentação.