Si planea implementar su aplicación web con Docker, definitivamente se beneficiará del conocimiento de las redes Docker. Docker ha revolucionado la arquitectura de microservicios en los últimos años. Las aplicaciones basadas en una arquitectura de microservicio y proporcionadas con Docker son inmensamente flexibles y escalables. Estas aplicaciones contienen más de un contenedor, cada uno de los cuales se ejecuta como un microservicio.
En este caso, necesitamos construir una red Docker en la que estos contenedores se comuniquen entre sí para cumplir con los requisitos funcionales y no funcionales de las aplicaciones.
Para tales aplicaciones usamos Red de puentes personalizados de Docker. De forma predeterminada, cada contenedor se ejecuta en una red, que también se denomina. denominado puente sin embargo, es diferente de una red de puente personalizada.
Incluso si ejecuta sus contenedores en la misma red, aumenta seguridad. Todos los puertos de contenedores que se ejecutan en la misma red están expuestos entre sí, pero no al mundo exterior.
Ejemplo: si su aplicación se ejecuta en 3 contenedores independientes Frontend, backend y base de datos entonces todo lo que tiene que hacer es compartir los puertos frontales con el mundo exterior. Solo se puede acceder al backend y la base de datos a través del frontend, y se puede acceder a ellos porque se ejecutan en la misma red sin exponerlos al mundo exterior.
Sigamos el ejemplo anterior para una demostración.
Cómo crear una red puente personalizada
Ejecute el siguiente comando para crear su propia red de puente llamada “my-net”.
$ sudo docker network create my-net
Ejecute el siguiente comando para confirmar que su red “my-net” se ha creado y aparece en la salida de todas las redes Docker actualmente existentes.
$ sudo docker network ls
Ejecute el siguiente comando para ver los detalles de su red “my-net”.
$ sudo docker network inspect my-net
Verá una salida similar.
[ { "Name": "my-net", "Id":"3b7e1ad19ee8bec9628b18f9f3691adecd2ea3395ec248f8fa57a2ec85aa71c1", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1/16" } ] }, "Internal": false, "Containers": {}, "Options": {}, "Labels": {} } ]
Actualmente no hay contenedores ejecutándose en esta red.
A continuación, se explica cómo ejecutar un contenedor en su propia red.
Ahora volvamos a nuestro ejemplo de una aplicación de 3 contenedores.
Ejecute el siguiente comando para ejecutar su contenedor “Frontend” en la red “my-net”.
$ sudo docker run --network=my-net frontend
Ejecute contenedores “Backend” y “Base de datos” de manera similar con la bandera –network = mi-red.
$ sudo docker run --network=my-net backend
$ sudo docker run --network=my-net database
Ahora ejecute el siguiente comando para ver los detalles de su red “my-net”. En la salida puede ver los tres contenedores que están conectados a su red “my-net”.
$ sudo docker network inspect my-net
Enhorabuena Todos sus contenedores se ejecutan en una red puente personalizada y pueden comunicarse entre sí.
Cómo conectar un contenedor que ya se está ejecutando a su red
También puede conectar un contenedor en ejecución a su red. Suponiendo que sus contenedores “Frontend” ya se estaban ejecutando antes de crear la red “my-net”, puede conectar “frontend” (nombre del contenedor) a “my-net” con el siguiente comando.
$ sudo docker network connect my-net frontend
Conclusión
Esto le permite conectar fácilmente sus contenedores independientes a la misma red, ya sea en el momento de la creación o después de que ya se hayan ejecutado. Siempre debe preferir las redes Docker en lugar de que los contenedores se comuniquen manualmente utilizando sus direcciones IP asignadas, lo cual es muy complicado y vulnerable.
También le brinda mucha flexibilidad, como usar los nombres de otros contenedores dentro de un contenedor que se ejecuta en la misma red en lugar de direcciones IP para la comunicación.