ENTRYPOINT versus CMD
ENTRYPOINT e CMD são duas instruções em um Dockerfile que definem o que será executado dentro do contêiner quando ele é iniciado. Embora possam parecer semelhantes, eles têm finalidades distintas e funcionam de maneiras diferentes. Aqui está uma comparação detalhada para esclarecer como e quando usar cada uma:
ENTRYPOINT
ENTRYPOINTObjetivo: Define o comando principal que será sempre executado quando o contêiner for iniciado.
Imutabilidade:
ENTRYPOINTé utilizado para definir o comando que deve sempre ser executado no contêiner, independentemente dos comandos ou argumentos passados na linha de comando ao iniciar o contêiner.Uso como Executável: Configura o contêiner para se comportar como um executável específico, onde argumentos podem ser passados dinamicamente.
Execução Consistente: Se você deseja que o contêiner sempre execute um comando específico, use
ENTRYPOINT.
Exemplo:
FROM ubuntu:20.04
ENTRYPOINT ["echo", "Hello"]Neste exemplo, o comando echo Hello será sempre executado ao iniciar o contêiner, e você pode passar argumentos adicionais para o echo no momento da execução do contêiner:
docker run minha_imagem WorldResultado:
Hello WorldCMD
CMDObjetivo: Define comandos ou argumentos padrão que podem ser substituídos ao executar o contêiner.
Flexibilidade:
CMDé mais flexível e pode ser facilmente sobrescrito passando um comando diferente na linha de comando ao iniciar o contêiner.Combinação com
ENTRYPOINT: Quando usado junto comENTRYPOINT,CMDfornece argumentos padrão para o comando especificado emENTRYPOINT. Se não houverENTRYPOINT,CMDdefine o comando padrão para o contêiner.Comando Opcional: Se você quer que o contêiner tenha um comando padrão, mas permita ao usuário passar um comando diferente quando necessário, use
CMD.
Exemplo:
Neste caso, se você iniciar o contêiner sem passar nenhum comando, ele executará echo Hello, World!. No entanto, você pode substituir isso ao iniciar o contêiner:
Resultado:
Usando ENTRYPOINT e CMD Juntos
ENTRYPOINT e CMD JuntosQuando combinados, ENTRYPOINT define o comando principal que sempre será executado, enquanto CMD pode fornecer argumentos padrão para esse comando.
Exemplo:
Neste exemplo:
ENTRYPOINTé definido comoecho.CMDfornece o argumento padrãoHello, World!.
Ao iniciar o contêiner sem argumentos adicionais, ele executará:
Resultado:
Se você passar um argumento diferente, ele substituirá o CMD:
Resultado:
Resumo das Diferenças
ENTRYPOINT:Define um comando fixo que sempre será executado.
Ideal para configurar o contêiner para se comportar como um executável.
Não é facilmente substituível a menos que se use a flag
--entrypoint.
CMD:Define um comando ou argumentos padrão.
Pode ser substituído ao iniciar o contêiner.
É usado para fornecer argumentos ao
ENTRYPOINTou para definir um comando padrão seENTRYPOINTnão for usado.
Quando Usar Cada Um
Use
ENTRYPOINTquando você deseja que o contêiner sempre execute um comando específico e permita que o usuário apenas passe argumentos adicionais.Use
CMDquando você deseja fornecer um comando ou argumentos padrão que podem ser facilmente substituídos.
Laboratório
CMD e ENTRYPOINT
Executa o comando de inicialização do container;
Não cria uma camada no file system da imagem, mas como metadado
Será executado somente na inicialização do container;
Podem ser combinados para otimizar a execução dos comandos.
ENTRYPOINT
Utilizado quando o comando não será sobrescrito, somente argumentos adicionais
CMD
Utilizado quando o comando ou argumentos podem ser sobrescritos.
No exemplo abaixo /bin/bash seria o CMD do containter:
Outro exemplo:
Entrypoint
Exemplo para imprimir "Hello World!"
Entrypoint + CMD
Sobrescrever o CMD
Sobrescrever o ENTRYPOINT
Shell Script
Arquivo entrypoint.sh:
Iniciando o container sem parâmetro:
Iniciando o container com parâmetro:
Adicionando o CMD no Dockerfile para passagem de parâmetro para o ENTRYPOINT:
Last updated