Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

duvida docker e ec2

Pessoal, tenho uma duvida cabeluda aqui que não consegui entender.... fiz o curso de docker utilizando uma instancia EC2 na AWS. Consegui subir os containers de boa mas uma coisa não entra na minha cabeça, seguinte....

tenho a minha ec2 com a porta 80 liberada, quando subo uma aplicação utilizando essa porta consigo acessar de boa, porem quando tento subir outra na mesma porta da erro pois a porta esta em uso... como faço para ter varios containers rodando na minha ec2 e poder acessar por urls diferentes? como o docker identifica que a url a é do container x e a url b do container y?

10 respostas

Olá Elton, tudo bem? Entendi bem sua dúvida, nesse caso é necessário usar algum "cara" no meio que faça o redirecionamento para os containers especificos, no curso de Docker: Criando containers sem dor de cabeça o instrutor faz um simples exemplo usando o Nginx como LoadBalancer para fazer a distribuição das requisições ou seja da carga entre os containers. Bem como no Curso de Docker Swarm também é mostrado como fazer essa distribuição.

Espero ter ajudado!

opa Jonilson, estou bem e você? Tinha imaginado isso mesmo então preciso fazer como no primeiro curso, criando um container com o nginx para distribuir as requisições.... só, uma duvida... existe alguma forma de dizer ao nginx qual a url do container ele deve direcionar?

Exatamente isso Elton, é a melhor maneira de fazer! Sobre "alguma forma de dizer ao Nginx qual a url do container ele deve direcionar" tem sim!

Para fazer isso você vai ter que usar o que chamamos de proxy reverso, e quem faz isso é o nginx-proxy, e isso só é possível porque ele usa o conceito de VIRTUAL HOST, que usávamos muito antigamente, principalmente em ambiente de desenvolvimento.

Tento o Nginx já em execução, você criar dois arquivos no diretório /etc/nginx/sites-available/:

  • container1.meusite.com.conf

  • container2.meusite.com.conf

E ambos com o conteúdo:

server {
  listen        80;
  server_name   container1.bobbyiliev.com;

  location / {
    proxy_pass  http://localhost:8080;
  }
}

Porém devemos alterar o proxy_pass http://localhost:8080; de acordo com as portas dos containers, sendo assim podemos ter o primeiro arquivo com esse endereço acima e o segundo arquivo com o endereço proxy_pass http://localhost:3000; e por fim você precisa reiniciar o Nginx.

Espero ter ajudado!

opa, boa noite

me ajudou muito..... so mais uma duvida (desculpa a amolação) =/

se a requisição esta vindo de um dominio, exemplo "www.solariatrends.com" ficaria como o exemplo abaixo? E outra duvida o nginx-proxy é uma versão especifica ou ele já faz parte do nginx quando baixo?

server { listen 80; server_name solariatrends.com;

location / { proxy_pass http://localhost:3000; } }

eu fiz esse teste com um container docker usando o nginx e outro com uma app basica em node mas quando aponto para o dominio ele cai no nginx... eu criei eles na mesma rede inclusive mas tanto pelo configue que vc me passou quando direto pelo nginx.conf não rolou :/ abaixo como eu subi os containers...

sudo docker run -it -v /docker/container1.solariatrends.com.br.conf:/etc/nginx/sites-available/container1.solariatrends.com.br.conf -p 80:80 --net solaria-network nginx

docker run -d --name demo --net=solaria-network elton/demo1

obrigado pela ajuda!

Sem problemas Elton, estamos aqui para ajudar sempre! Sim o nginx-proxy já vem com Nginx, é apenas uma ferramenta do Nginx.

Agora não entendi muito bem esse seu cenário. Você poderia explicar melhor? Porque o server_name em:

server_name   container1.bobbyiliev.com;

Indica o endereço pra que possamos acessar o container, sendo assim se acessarmos a URL container1.bobbyiliev.com vamos estar acessar na verdade o container que está sendo executado na porta 8080 do nosso servidor localhost.

Então poderia explicar melhor seu cenário pra eu poder ti dar uma resposta mais exata possível!

opa, sem problemas....

meu cenário é o seguinte...

eu tenho uma instancia ec2 que vai hospedar um site em python... o dominio desse site é www.solariatrends.com... o que preciso fazer é que ao acessar a url do site ele direcione para o container da minha aplicação.

como eu faço esse vinculo do meu dominio com meu container para que o nginx entenda onde ele deve apontar quando chegar a requisição? nao deveria colocar a url do dominio nesse arquivo?

ou eu preciso nomear o container com a url do dominio?

Na verdade segue como informei no trecho da configuração do código que mencionei acima. Você vai precisar apenas usar subdomínios, como por exemplo:

server {
  listen        80;
  server_name   container1.solariatrends.com;

  location / {
    proxy_pass  http://localhost:8080;
  }
}

Como também:

server {
  listen        80;
  server_name   container2.solariatrends.com;

  location / {
    proxy_pass  http://localhost:3000;
  }
}

E para acessar ambos você precisar usar as URLs: container1.solariatrends.com e container2.solariatrends.com.

Espero ter ajudado!

show de bola Jonilson... Deu certo aqui!

Muito obrigado!

um abraço.

solução!

Que legal que deu certo Elton! Fico muito feliz por ajudar! Sendo assim, você poderia marcar esse tópico como solucionado, assim caso alguém tenha a mesma dúvida que você poderá encontrar a resposta facilmente aqui!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software