Pular para o conteúdo
Início » Docker RUN vs CMD vs ENTRYPOINT: Entendendo as Instruções de Construção do Docker

Docker RUN vs CMD vs ENTRYPOINT: Entendendo as Instruções de Construção do Docker

Free code on computer screen

Ao construir com Docker, três instruções – RUN, CMD e ENTRYPOINT – são frequentemente empregadas no Dockerfile para definir vários aspectos de uma imagem Docker. Elas parecem semelhantes e, às vezes, causam confusão. Vamos discutir suas diferenças.

RUN, CMD e ENTRYPOINT

  • RUN executa comandos e cria novas camadas de imagem.
  • CMD define o comando e seus parâmetros a serem executados por padrão após o início do container. No entanto, CMD pode ser substituído pelos parâmetros da linha de comando do docker run.
  • ENTRYPOINT configura o comando a ser executado quando o container é iniciado, similar à funcionalidade do CMD.

Formato Shell vs Formato Exec

Os comandos para RUN, CMD e ENTRYPOINT podem ser especificados de duas maneiras: Formato Shell e Formato Exec, que possuem sutis diferenças de uso.

Formato Shell

O formato Shell tem a forma:

<instrução> <comando>

Exemplos:

RUN apt-get install python3
CMD echo "Olá mundo"
ENTRYPOINT echo "Olá mundo"

Quando executado, o comando no formato Shell chama /bin/sh -c <comando>. O ambiente definido pelo comando ENV será herdado.

ENV name Homem Nuvem
ENTRYPOINT echo "Olá, $name"

Resultado:

Olá, Homem Nuvem

Formato Exec

O formato Exec segue:

<instrução> ["executável", "param1", "param2", ...]

Exemplos:

RUN ["apt-get", "install", "python3"]
CMD ["/bin/echo", "Olá mundo"]
ENTRYPOINT ["/bin/echo", "Olá mundo"]

Neste formato, o comando será chamado diretamente e não será processado pelo shell. Variáveis de ambiente definidas por ENV não serão passadas.

ENV name Homem Nuvem
ENTRYPOINT ["/bin/echo", "Olá, $name"]

Resultado:

Olá, $name

O formato Exec é recomendado para CMD e ENTRYPOINT por ser mais legível e fácil de entender.

RUN

O comando RUN é geralmente usado para instalar aplicativos e pacotes. Ele executa o comando sobre a imagem atual, criando uma nova camada.

CMD

O CMD permite especificar o comando padrão executado pelo container. Se docker run especificar outro comando, o padrão definido por CMD será ignorado.

ENTRYPOINT

O ENTRYPOINT permite que o container seja executado como uma aplicação ou serviço. Mesmo que outros comandos sejam especificados ao executar docker run, o ENTRYPOINT não será ignorado.

Conclusão

  • Use o comando RUN para instalar aplicativos, pacotes e construir imagens.
  • Para imagens Docker que visam executar uma aplicação ou serviço, como o MySQL, prefira usar o comando ENTRYPOINT no formato Exec.
  • Se desejar definir o comando de inicialização padrão para o container, use o comando CMD.

Espero que este artigo tenha ajudado a esclarecer as diferenças e usos de RUN, CMD e ENTRYPOINT no Docker. Agradeço a Shespelt pelo contributo!