Configurando o Nginx como Proxy Reverso no Docker

Configurando o Nginx como Proxy Reverso no Docker

O Docker cria os containers e permite que eles sejam acessador pelo IP do host + uma porta. Dito isso, vamos pensar no seguinte cenário: eu precisao subir três containers web no Docker e como eu não posso ter todos na porta 80, eu criei o primeiro na porta 81, o segundo na porta 82 e o terceiro na porta 83. Para acessa-los, eu precisaria digitar o IP do servidor Docker + a porta.

web1 http://192.168.0.91:81
web2 http://192.168.0.91:82
web3 http://192.168.0.91:83

Mas eu realmente não gosto de ficar digitando as portas, eu gosto é de DNS 😎 tem como fazer isso de uma forma automatizada? Claro que tem, vamos usar o Nginx configurado como proxy reverso. Neste caso, os três containers web seriam acessador desta forma:

web1 http://web1.solutions4crowds.local
web2 http://web2.solutions4crowds.local
web3 http://web3.solutions4crowds.local

Recomendo a leitura do post Instalando o Docker no Ubuntu 16.04 com Portainer.

Antes de mais nada, vamos criar o container para o proxy reverso na porta 80 (após o deploy do nginx proxy, se digitar o IP do servidor Docker no navegador você verá a o erro 503).

docker run -p 80:80 --name nginx-proxy -v /var/run/docker.sock:/tmp/docker.sock:ro -d jwilder/nginx-proxy

Agora é necessário criar as entradas no DNS. No meu caso como é local, vou editar o arquivo hosts no meu desktop (192.168.0.91 é o endereço IP do meu servidor Docker). Se você estiver fazendo isso para a internet, basta adicionar as entradas DNS no seu provedor (Registro BR e afins).

192.168.0.91	web1.solutions4crowds.local
192.168.0.91	web2.solutions4crowds.local
192.168.0.91	web3.solutions4crowds.local

E por fim, basta fazer o deploy dos containers. Neste exemplo vou usar containers com Apache.

docker run --name web1 -p 81:80 -e VIRTUAL_HOST=web1.solutions4crowds.local -d httpd
docker run --name web2 -p 82:80 -e VIRTUAL_HOST=web2.solutions4crowds.local -d httpd
docker run --name web3 -p 83:80 -e VIRTUAL_HOST=web3.solutions4crowds.local -d httpd

Os três containers web e o container do nginx devidamente criados.

Agora se eu digitar o DNS no navegador, ele será direcionado para o container correspondente.

Sensacional, não? O Jason Wilder fez um excelente trabalho!

Valeu turma, até a próxima!

Posts Relacionados

Ricardo é especialista em TI e apaixonado por Virtualização. É graduado em Sistemas de Informação e pós-graduado em Gestão de TI, além de possuir várias certificações Microsoft e VMware.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *