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.