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.
Shell Form (Forma Shell): Usando uma string, que será executada dentro de um shell.
Diferença entre ENTRYPOINT
e CMD
ENTRYPOINT
e CMD
ENTRYPOINT
: 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 emENTRYPOINT
ou definir um comando a ser executado seENTRYPOINT
não estiver definido.
Se ambos estiverem presentes no Dockerfile:
ENTRYPOINT
define o comando a ser executado.CMD
fornece os argumentos padrão para o comando especificado emENTRYPOINT
, mas pode ser sobrescrito na linha de comando.
Exemplos de Uso
Definindo um Comando Principal
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
ENTRYPOINT
Se 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
ENTRYPOINT
simples 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
: CombineENTRYPOINT
eCMD
para 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,CMD
pode 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
ENTRYPOINT
define 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
: UtilizeCMD
para fornecer argumentos padrão que podem ser substituídos, mantendoENTRYPOINT
como o comando fixo.Segurança e Eficiência: Prefira a forma exec para evitar o uso desnecessário de um shell.
Last updated