Desenvolvimento de docker local com hosts virtuais

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.devem 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_HOSTvariá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.