Sobes.tech
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 usar CMD junto com ENTRYPOINT, então CMD torna-se um argumento para ENTRYPOINT.

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 ENTRYPOINT se a imagem for destinada a executar um arquivo específico (por exemplo, um servidor web).
  • Use CMD para fornecer argumentos padrão para ENTRYPOINT ou 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.