Olá pessoal,
Ainda não entendi porque o serviço do mongo é o único que não precisa explicitar porta no docker-compose.yml. Alguém pode me explicar, por favor?
Obrigado!
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá pessoal,
Ainda não entendi porque o serviço do mongo é o único que não precisa explicitar porta no docker-compose.yml. Alguém pode me explicar, por favor?
Obrigado!
Oi Ítalo,
Essa imagem do mongo já vem com uma porta exposta, conforme indicado na documentação do Docker:
This image includes EXPOSE 27017 (the mongo port), so standard container linking will make it automatically available to the linked containers.
Percebi que a imagem do MySql também é assim, então acredito ser um padrão em imagens de banco de dados.
Espero ter ajudado,
Abraço
Opa Vitor, beleza?
Obrigado pela resposta. Foi o que eu imaginei.
No entanto, por exemplo, no Dockerfile do Alura books, também há uma exposição explícita da porta 3000, e, mesmo assim, no arquivo de configuração do docker compose é necessário expor (novamente?)
FROM node:latest
MAINTAINER Douglas Quintanilha
ENV NODE_ENV=development
COPY . /var/www
WORKDIR /var/www
RUN npm install
ENTRYPOINT ["npm", "start"]
EXPOSE 3000
Ítalo, boa tarde!
É que existe uma diferença entre o EXPOSE e o ports. Se você reparar, no docker file é usado o EXPOSE e no docker.compose, o ports. Com o EXPOSE você expõe aquela porta do cointainer para outros cointainers, mas não para o host. Com o ports você mapeia o cointainer com o host.
Lembrando que o docker-compose não precisa que existam os docker files.
Qualquer coisa é só falar!
Abraço
Vitor, o que você disse faz total sentido.
O Nginx teve sua porta exposta para o mundo externo através do port (É por ele que todo o acesso à aplicação sera feito). OK
O Mongo não precisa ter porta exposta para o mundo externo. Faz sentido também, já que a aplicação poderá acessá-lo, porque estão na mesma rede. OK
Porém não fez sentido para mim os nodes terem suas portas expostas para o mundo externo. O acesso da aplicação não se dá apenas pelo Nginx? O Ngnix já conseguiria acessar os nodes, já que estão na mesma rede. Por que expor as portas dos nodes com o port?
Obrigado.
Alguém?
Oi Ítalo
Pesquisei em alguns sites e acho que em todos o port é usado nos cointainers dos nodes. Mas acredito que neste nosso caso, você tem razão, não é obrigatório esse port dado que está tudo na mesma rede e o acesso pode ser feito pelo próprio Ngnix.
Olá, Vitor,
Sim, foi o que pensei. Tentei subir tudo, sem expor as portas dos nodes, e funcionou normalmente. Talvez para algum caso específico seja útil expô-las.
Obrigado pela resposta,
Italo.