Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Comando para startar

Boa tarde, li o artigo mencionado em alguma das aulas e depois fui fazer a atividade do fim do capítulo, fiquei com uma dúvida: quando eu uso o CMD ["yarn", "start"] ou o ENTRYPOINT yarn start? Qual seria a diferença no fim das contas?

Artigo mencionado: https://www.alura.com.br/artigos/desvendando-o-dockerfile

1 resposta
solução!

Olá, Rodrigo!

A dúvida que você levantou é bastante comum quando estamos começando a trabalhar com Docker. Vamos lá!

O CMD e o ENTRYPOINT são ambos usados para definir o comando que será executado quando um contêiner é iniciado a partir de uma imagem Docker. No entanto, eles têm algumas diferenças sutis que podem influenciar na forma como você decide usá-los.

  1. CMD: O CMD é usado para fornecer argumentos padrão para o ENTRYPOINT ou para especificar o comando a ser executado se não for fornecido nenhum comando na linha de comando do docker run. Se você usar CMD ["yarn", "start"], isso significa que, por padrão, o contêiner irá executar yarn start quando iniciado. No entanto, se você fornecer um comando diferente ao executar o contêiner, esse comando substituirá o CMD.

    Exemplo prático:

    CMD ["yarn", "start"]
    

    Se você executar:

    docker run minha-imagem
    

    Ele executará yarn start. Mas se você executar:

    docker run minha-imagem ls
    

    Ele executará ls em vez de yarn start.

  2. ENTRYPOINT: O ENTRYPOINT define um comando fixo que sempre será executado quando o contêiner iniciar. Quando você usa ENTRYPOINT ["yarn", "start"], você está dizendo que yarn start é o comando que sempre será executado, e qualquer argumento passado na linha de comando será adicionado a esse comando.

    Exemplo prático:

    ENTRYPOINT ["yarn", "start"]
    

    Se você executar:

    docker run minha-imagem
    

    Ele executará yarn start. E se você executar:

    docker run minha-imagem --verbose
    

    Ele executará yarn start --verbose.

Em resumo, use CMD quando você quiser permitir que o comando padrão seja facilmente substituído, e use ENTRYPOINT quando você quiser garantir que um comando específico sempre seja executado.

Bons estudos!