Junior
Para que servem os comandos CMD e ENTRYPOINT no Docker?
sobes.tech IA
Resposta da IA
CMD e ENTRYPOINT indicam a instrução que será executada ao iniciar o contêiner.
Diferença principal:
CMD— instrução que pode ser facilmente sobrescrita por argumentos ao iniciar o contêiner.ENTRYPOINT— instrução que define o comando principal do contêiner. Os argumentos passados ao iniciar são adicionados a ela. Se usarCMDjunto comENTRYPOINT, entãoCMDtorna-se um argumento paraENTRYPOINT.
Exemplos:
Docker com CMD:
FROM alpine
CMD ["echo", "Olá, mundo!"]
Execução:
# Mostrará "Olá, mundo!"
docker run <nome_da_imagem>
# Sobrescreve o CMD, mostrará "Esta é outra comando"
docker run <nome_da_imagem> echo "Esta é outra comando"
Docker com ENTRYPOINT:
FROM alpine
ENTRYPOINT ["echo"]
Execução:
# Mostrará uma linha vazia (echo sem argumentos)
docker run <nome_da_imagem>
# Adiciona argumentos ao ENTRYPOINT, mostrará "Olá, mundo!"
docker run <nome_da_imagem> "Olá, mundo!"
Docker com ENTRYPOINT e CMD:
FROM alpine
ENTRYPOINT ["echo"]
CMD ["Olá, mundo!"]
Execução:
# CMD torna-se um argumento para ENTRYPOINT, mostrará "Olá, mundo!"
docker run <nome_da_imagem>
# Argumentos sobrescrevem o CMD, mas o ENTRYPOINT permanece. Mostrará "Esta é outra comando"
docker run <nome_da_imagem> "Esta é outra comando"
Tabela de comparação:
| Característica | CMD | ENTRYPOINT |
|---|---|---|
| Propósito | Comando padrão ou argumentos | Comando principal do contêiner |
| Sobrescrita ao iniciar | Pode ser facilmente sobrescrito por argumentos | Adiciona argumentos ao seu comando |
| Compatibilidade com outra instrução | Pode fornecer argumentos para ENTRYPOINT |
Usa CMD como seus argumentos |
Melhores práticas:
- Use
ENTRYPOINTse a imagem for destinada a executar um arquivo específico (por exemplo, um servidor web). - Use
CMDpara fornecer argumentos padrão paraENTRYPOINTou para indicar o comando quando a imagem pode ser usada para diferentes fins. - Prefira o formato "exec" (
["executável", "argumento1", ...]) ao formato "shell" (comando argumentos). O formato "exec" não inicia o processo em um shell, evitando problemas com sinais e variáveis de ambiente.