ENTRYPOINT
A instrução ENTRYPOINT em um Dockerfile define o comando que será executado quando um contêiner iniciado a partir da imagem é executado. Diferente de CMD, que também define um comando a ser executado, ENTRYPOINT permite configurar um contêiner para sempre executar como um executável específico, enquanto ainda permite que você passe argumentos adicionais no momento da execução do contêiner.
Sintaxe Básica
O ENTRYPOINT pode ser definido de duas formas:
Exec Form (Forma Exec): Usando um array, que é a forma recomendada porque não envolve a utilização de um shell.
ENTRYPOINT ["executable", "param1", "param2"]Shell Form (Forma Shell): Usando uma string, que será executada dentro de um shell.
ENTRYPOINT command param1 param2
Diferença entre ENTRYPOINT e CMD
ENTRYPOINT e CMDENTRYPOINT: Define o comando principal e obrigatório que sempre será executado quando o contêiner iniciar.CMD: Pode fornecer argumentos padrão ao comando especificado emENTRYPOINTou definir um comando a ser executado seENTRYPOINTnão estiver definido.
Se ambos estiverem presentes no Dockerfile:
ENTRYPOINTdefine o comando a ser executado.CMDfornece os argumentos padrão para o comando especificado emENTRYPOINT, mas pode ser sobrescrito na linha de comando.
Exemplos de Uso
Definindo um Comando Principal
FROM ubuntu:20.04
ENTRYPOINT ["echo", "Hello"]Neste exemplo, ao executar o contêiner, ele sempre executará o comando echo Hello. Você pode passar argumentos adicionais ao contêiner, que serão anexados ao comando echo.
Saída:
Usando CMD com ENTRYPOINT
Neste caso, o ENTRYPOINT define o comando principal (echo Hello), enquanto o CMD fornece um argumento padrão (World). Quando o contêiner é executado sem argumentos adicionais, ele executará echo Hello World. Se você passar um argumento ao contêiner, ele substituirá o valor de CMD:
Saída:
Combinando ENTRYPOINT com CMD para um Script Personalizado
Aqui, ENTRYPOINT define o comando que executa o script Python. CMD fornece um argumento padrão --help, que será utilizado se nenhum outro argumento for passado durante a execução do contêiner. Isso permite que o contêiner seja usado como uma ferramenta de linha de comando.
Isso executará:
Overriding ENTRYPOINT
ENTRYPOINTSe você quiser substituir o ENTRYPOINT ao executar o contêiner, você pode usar a flag --entrypoint:
Isso inicia o contêiner com o bash em vez do comando definido no ENTRYPOINT.
Boas Práticas e Considerações
Evitar Uso de Shell Form: A forma exec (
["comando", "arg1", "arg2"]) é preferível porque não depende de um shell, o que é mais eficiente e seguro.Comandos Curto e Claro: Mantenha o comando
ENTRYPOINTsimples e direto, para que seja fácil substituir ou complementar o comportamento esperado no momento da execução do contêiner.Uso Combinado com
CMD: CombineENTRYPOINTeCMDpara fornecer comportamento padrão e ao mesmo tempo permitir que o usuário do contêiner personalize a execução passando diferentes argumentos.Flexibilidade: Se o contêiner deve sempre executar um comando específico, use
ENTRYPOINT. Para mais flexibilidade, onde o comando pode ser alterado frequentemente,CMDpode ser mais apropriado.
Exemplo Avançado
Usando ENTRYPOINT para um Contêiner de Backup
Aqui, o contêiner sempre executará o comando rsync -avz para sincronizar arquivos entre diretórios. Os usuários podem passar os diretórios de origem e destino como argumentos quando executarem o contêiner.
Resumo
ENTRYPOINTdefine o comando principal a ser executado quando o contêiner inicia, tornando o contêiner mais parecido com um executável.Combinação com
CMD: UtilizeCMDpara fornecer argumentos padrão que podem ser substituídos, mantendoENTRYPOINTcomo o comando fixo.Segurança e Eficiência: Prefira a forma exec para evitar o uso desnecessário de um shell.
Last updated