Declaração do problema
Usar docker está na moda hoje em dia, mas existem alguns problemas que encontrei ao tentar usá-lo localmente, a maioria dos quais pode ser resolvida por uma configuração de host virtual. As principais vantagens de usar hosts virtuais no desenvolvimento local são:
– Não há necessidade de se preocupar com a colisão / gerenciamento de portas
– URLs nomeados, por exemplo, myapp.dev
em oposição alocalhost:4000
O que fazer?
Usando uma combinação de dnsmasq e uma imagem nginx incrível com descoberta de serviço automático , podemos implementar nossa configuração de host virtual.
1) Configure o dnsmasq: vamos configurar o dnsmasq com um resolvedor de dns local para rotear todas as solicitações para * .dev para sua instância docker local.
brew install dnsmasq # and follow the post-install instructions (or use something else if you prefer)
# Find your docker IP, with docker-machine as 'docker-machine ip', or with docker private beta it is just 127.0.0.1
sudo echo 'address=/dev/YOUR_DOCKER_IP' >> /usr/local/etc/dnsmasq.conf
sudo mkdir -p /etc/resolver
echo 'nameserver 127.0.0.1' | sudo tee /etc/resolver/dev
sudo brew services restart dnsmasq # or restart dnsmasq however you chose to start it
# restart your computer for the local dns resolver to be recognized
2) Adicione nosso proxy reverso nginx automatizado para docker
docker run -d --name nginx -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
3) Defina a VIRTUAL_HOST
variável de ambiente em todos os contêineres que você deseja que sejam acessíveis por meio de hosts virtuais
docker run -e VIRTUAL_HOST=myapp.dev ...
ou em docker-compose …
web:
expose:
- "8080"
environment:
- VIRTUAL_HOST=myapp.dev
Conforme você adiciona mais serviços ou inicia e interrompe contêineres, pode ser divertido inspecionar a configuração do nginx no contêiner nginx, já que ele muda automaticamente e atualiza com base em eventos na API docker interna.
E é isso!
Espero que goste e me avise se tiver algum problema. Obrigado a Jason Wilder por nos deixar ficar sobre os ombros de gigantes.