Para crear y recrear nuestro entorno de desarrollo estamos utilizando contenedores Docker que se inician y gestionan mediante docker-compose. Esto funciona bien en la mayoría de los casos. Lo único difícil de gestionar era el acceso al servidor web y a otros servicios. Esto se debe a que se asigna una nueva dirección IP a un contenedor Docker cada vez que se inicia.

Para solucionar este problema, buscamos una solución DNS que se configurara automáticamente al iniciar un nuevo contenedor (por ejemplo, dnsmasq). Encontramos esta solución en docker-gen. Esta fantástica herramienta tiene más que sólo el descubrimiento de servicios. Pero por ahora sólo estamos utilizando la parte de descubrimiento de servicios. Y, por supuesto, utilizaremos Docker para ejecutarla. El contenedor docker-dns creado por jderusse hace todo lo que necesitamos por el momento.

Configuración en ubuntu

Configura el dnsmasq local para que reenvíe las peticiones a 127.0.0.1:54 y escuche las interfaces lo y docker0.

[sourcecode language=»bash»]
sudo vim /etc/NetworkManager/dnsmasq.d/01_docker
bind-interfaces
interface=lo
interface=docker0
server=/docker/127.0.0.1#54
sudo systemctl restart NetworkManager
[/sourcecode]

Ejecuta dns-gen y enlaza el puerto 53 al puerto 54 de tu host

[sourcecode language=»bash»]
docker run -detach -name dns-gen
-restart always
-publish 54:53/udp
-volume /var/run/docker.sock:/var/run/docker.sock
jderusse/dns-gen -R
[/sourcecode]

Eso era todo lo que teníamos que hacer para que los servidores web de nuestro proyecto estuvieran disponibles en webserver.project.docker.