Cuando tenemos una aplicación multiservicios y necesitamos ejecutar microservicios en nuestra máquina, nos damos cuenta de que es más fácil con Docker. Para establecer la conectividad entre estos microservicios o contenedores, podemos configurar una red Docker, creando efectivamente una conexión entre ellos. El proceso es sencillo y requiere unos pocos comandos en el orden correcto (si no te interesa trabajar en red, no dudes en saltar hasta el final).
Sepa lo que necesita
Como en todo lo que hacemos, el primer paso es saber lo que necesita. No todos nuestros contenedores tienen por qué estar conectados. Todo administrador de una red te dirá: “Tienes que diagramar tu red de necesidades antes de ejecutar el comando, o tendrás un error en el camino”.
También es necesario conocer el tipo de conexión, pero quiero que este artículo sea breve. Por defecto, nuestros ordenadores suelen tener la red configurada como “puente”, así que puedo ayudarte a implementar ese tipo de red. Sin embargo, es importante saber que también hay otras opciones disponibles, como “Host”, “Overlay” y “Macvlan”.
El esquema gráfico de la red puede hacerse en un ordenador o en papel, pero dependerá de lo compleja que sea nuestra configuración.
Creación de la red
Utilizaremos el comando “docker network create” para crear una nueva red. En este comando, puede especificar el controlador a utilizar, como “bridge” o “host”, utilizando la bandera “-d”. Por defecto, si omite la bandera, creará un tipo “puente”.
Una vez que tenemos la red, podemos inspeccionarla si queremos ver la información que contiene. Utilizando el comando “docker network inspect name” nos proporcionará el detalle de la red, como el IPAN, que contendrá el controlador, la subred y la puerta de enlace, etc.
Después de la creación, tenemos que añadir el contenedor a la red. En este ejemplo, creo dos contenedores aleatorios.
Debemos ejecutar el siguiente comando “docker network connect nombre-red nombre-contenedor” para añadir el contenedor a la red.
Una vez que ejecutamos estos comandos, debemos inspeccionar la red porque este comando no devuelve ninguna validación y a veces falla.
Ahora que hemos certificado que la red contiene nuestros dos contenedores, podemos intentar probar la conexión entre ambos.
Probar la conexión entre nuestros contenedores
Esta prueba es fácil de hacer, si entramos en el terminal del contenedor, podríamos ejecutar un comando “ping” con la IP del otro contenedor.
Después de esto, ahora solo debemos cambiar nuestro entorno para apuntar la IP del contenedor y nuestra aplicación tendrá la capacidad de conectarse entre los contenedores.
Aclaraciones
A veces cometemos el error de tomar esta red como si fuera nuestro nuevo “localhost”. No es esto. El localhost y la red docker son dos entidades separadas.
La red docker no funcionará en nuestro navegador, esta red es sólo para conectarse internamente.
Otro error común es poner el puerto externo en nuestro entorno junto con la IP para la conexión. En nuestro entorno, necesitamos poner la IP con el puerto interno para la conexión.
Alternativas
Si no te gusta trabajar en red y no quieres luchar contra los posibles errores que pueden producirse, existe una alternativa. Desde la versión 18.03, Docker ha añadido un nombre de host interno “host.docker.internal” que permite conectar los contenedores internamente sin necesidad de una red docker. En algunos casos, como los contenedores Ubuntu, tendrá que añadir este parámetro “–add-host=host.docker.internal:host-gateway” para incluir el host.