Mostrar contenedores de Docker sin indicar sus puertos.

Estándar

docker-lego-whaleUn pequeño inconveniente a la hora de usar Docker es que las personas que quieran visualizar la aplicación (mediante navegador web) necesitan indicar el puerto haciendolo un poco “engorroso”.
Es por ello que vamos a ver como poder hacer esto usando VirtualHosts de Apache junto a ProxyPass.

Problema:

Suponemos que tenemos dos contenedores de docker corriendo un simple Apache, ambos contenedores localmente atienden en el puerto 80,
pero la maquina que se comunica con el exterior y la que nos atiende las peticiones está escuchando esos contenedores en el 20001 y 20002 es decir:

20001 –> 80 (ContainerApache1)
20002 –> 80 (ContainerApache2)

Nosotros para poder visualizar esos contenedores tendiamos que utilizar:

http://dominio.com:20001 y http://dominio.com:20002

Y para hacerlo más comodo podriamos hacer:

http://docker1.dominio.com y http://docker2.dominio.com
o
http://dominio1.com y http://dominio2.com

Solución:

Seguir leyendo

Creamos 2 virtualhost de apache en la maquina que contiene el Dockerengine que escuchen en el puerto 80 pero cada uno de ellos redireccionara a un puerto distinto cuando le llegue la petición con la siguiente configuración:

#Configuracion del proxy-pass para la redirección de puertos del docker
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_http.so


<VirtualHost *:80>
ServerName www.container1.dmgweb.es
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:20001/
ProxyPassReverse / http://0.0.0.0:20001/
ServerName container1
</VirtualHost>


<VirtualHost *:80>
ServerName www.container2.dmgweb.es
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:20002/
ProxyPassReverse / http://0.0.0.0:20002/
ServerName container2
</VirtualHost>

Leave a Reply