Docker ofrece múltiples posibilidades para gestionar redes dentro de nuestros contenedores, permitiendo personalizar la interacción y accesibilidad entre ellos. Conocer cómo configurar correctamente las redes facilita la comunicación interna y externa, además de mejorar significativamente la seguridad mediante mínimos accesos necesarios.
¿Qué son las redes en Docker y para qué sirven?
Las redes en Docker permiten conectar contenedores entre sí y con el entorno externo, otorgando flexibilidad en la comunicación. Cuando ejecutamos el comando docker inspect, podemos acceder a la configuración detallada, donde observamos:
La IP asignada a cada contenedor.
Los puertos especificados.
El tipo de red utilizada, siendo común la opción denominada bridge o puente.
¿Cómo asignar una IP específica a un contenedor?
Para asignar una dirección IP específica al contenedor, incluimos esta IP entre el parámetro -p y el puerto al ejecutar el comando docker run. Por ejemplo:
docker run -p 127.0.0.1:8080:80 nombre_contenedor
Al hacerlo, Docker utilizará la IP indicada (en este caso, localhost). Este proceso es esencial para una correcta orquestación de contenedores y evitar conflictos en la administración de redes.
¿Qué tipos de redes se pueden utilizar en Docker?
Docker ofrece diferentes categorías de redes para atender distintos requisitos:
Bridge: Red por defecto usada en la mayoría de los casos, permite la interacción entre contenedores y el entorno local.
Host: Facilita una comunicación exclusiva entre contenedores específicos, aislándolos del resto.
None: Garantiza el máximo aislamiento donde el contenedor no puede comunicarse con otros vía red.
Además, podemos crear redes personalizadas según las necesidades del proyecto.
¿Cómo crear redes personalizadas en Docker?
Generar redes específicas adaptadas a nuestras necesidades es sencillo mediante comandos básicos:
docker network create nombre_red
Luego verificamos que la red se creó correctamente al usar:
docker network ls
Esto nos permite organizar y segmentar los contenedores bajo nuestras propias configuraciones de red, facilitando un acceso específico y seguro.
¿Por qué las redes mejoran la seguridad en Docker?
Segmentar redes en Docker establece un principio conocido como "mínimo acceso", asignando únicamente los permisos estrictamente necesarios a cada contenedor. Esto previene riesgos de seguridad, limitando la comunicación únicamente a aquellos contenedores requeridos y restringiendo accesos potenciales no autorizados.
¿Ya habías explorado estas posibilidades con redes en Docker?, ¡comparte tu experiencia en comentarios!
-p 8080:80 Asigna el puerto 8080 del host Docker al puerto TCP 80 del contenedor.
-p 192.168.1.100:8080:80 Asigna el puerto 8080 en el host Docker IP 192.168.1.100 al puerto TCP 80 en el contenedor.
-p 8080:80/udp Asigna el puerto 8080 del host Docker al puerto UDP 80 del contenedor.
-p 8080:80/tcp -p 8080:80/udp Asigna el puerto TCP 8080 en el host Docker al puerto TCP 80 en el contenedor, y asigna el puerto UDP 8080 en el host Docker al puerto UDP 80 en el contenedor.
Al final ya no entendi nada :(
Hola Octavio, son conceptos de redes de computadoras a grande rasgos te permite modificar individualmente las direcciones que le puedes asignar a cada contenedor para acomodarlo a tus necesidades.
De manera general te puedo ayudar dar una noción de algunos conceptos que se pueden ver al inspeccionar un contenedor.
Al comunicarte con otra computadora es realizado primordialmente mediante una serie de protocolos o reglas que son todos los valores que puedes observar como IPv4, IPv6, Gateway, Subnet Mask, Mac Adress, etc. Son usados para asignar una dirección única a cada dispositivo en el intercambio de información donde son adecuados otros protocolos de seguridad o formato como lo son UDP y TCP.
En el ejemplo que detalla el compañero hace uso del puerto 8080 para redireccionar el trafico al puerto 80 correspondiente con al trafico de HTTP para páginas. Los números de dichos puertos son usados por convención y en internet puedes consultar el de otros servicios, posteriormente especifica el tipo de protocolo para el envió de datos.
Otros conceptos que pueden ayudarte a comprender los elementos que son mostrados al inspeccionar un contenedor reincide en la existencia de dos tipos de redes acorde su acceso, Local Area Network (LAN) para dispositivos que están ubicados en tu misma red y Wide Area Network (WAN) para aquellos alojados en redes diferentes.
Acorde su localización hacen uso de los diferentes protocolos y reglas como por ejemplo:
IPv4 y IPv6: Ambas son las direcciones que dispone tu equipo la diferencia radica en el rango de direcciones que puede abarcar cada versión.
- IPv4: Es un número de 32 bits segmentado en cuatro cuartetos de 8 bits, por ende el máximo número que puedes representar es 255.255.255.255 permitiendo asignar 4,294,967,296 direcciones distintas, no obstante en tiempos actuales la cantidad de dispositivos supera al número de direcciones únicas siendo un problema ya que es indispensable que cada aparato tenga un identificador único, para lo cual fue creado nuevos protocolos como NaT y la adecuación de direcciones públicas y privadas donde se introduce los conceptos de subnet mask, gateway, direcciones MAC, etc.
Subnet Mask, Gateway, MAC: Son direcciones o mecanismos para redistribuir el trafico dentro de una red local y permitir la conexión con redes externas.
IPv6: Hace uso del sistema numérico hexadecimal y contiene 128 bits teniendo un total de 3.4 * 10 ^ 38 siendo ampliamente superior a las 4.2 * 10 ^ 9 redes diferentes de IPv4.
Si deseas saber más al respecto puedes consultar el sistema OSI de Cisco donde desmenuza todos los conceptos y etapas que transcurre en la transmisión y comunicación de dos computadoras desde los elementos físicos como los cables hasta el arribo del mensaje al usuario.
Espero no haberte confundido hace tiempo que no refuerzo dichos conocimientos, invito a los demás a hacer observaciones y corregir información.
Controladores de Red en Docker
bridge (puente):
Descripción: El controlador de red predeterminado.
Explicación: Cuando creas un contenedor y no especificas un controlador de red, Docker usa el controlador de red bridge por defecto. Este tipo de red crea una red de puente privado dentro de Docker. Los contenedores en esta red pueden comunicarse entre sí, y puedes exponer puertos específicos para permitir la comunicación con el mundo exterior.
host (anfitrión):
Descripción: Elimina el aislamiento de red entre el contenedor y el host de Docker.
Explicación: Utilizar el controlador de red host permite que un contenedor comparta directamente la pila de red del host. Esto significa que el contenedor tendrá acceso directo a la red del host, sin aislamiento. Es útil para aplicaciones que necesitan el máximo rendimiento de red y no requieren aislamiento.
none (ninguno):
Descripción: Aislar completamente un contenedor del host y otros contenedores.
Explicación: El controlador de red none crea un contenedor sin ninguna red. Esto significa que el contenedor no tendrá acceso a ninguna red y no podrá comunicarse con el host ni con otros contenedores. Es útil para casos donde se desea un aislamiento completo.
overlay (superposición):
Descripción: Las redes de superposición conectan varios demonios de Docker juntos.
Explicación: El controlador de red overlay se utiliza para conectar contenedores que están en diferentes hosts de Docker, creando una red distribuida. Es útil en configuraciones de clúster, como Docker Swarm, donde los contenedores pueden necesitar comunicarse entre múltiples nodos.
ipvlan:
Descripción: Las redes IPvlan proporcionan control total sobre la dirección tanto IPv4 como IPv6.
Explicación: El controlador de red ipvlan permite a los usuarios configurar las direcciones IP directamente en los contenedores. Proporciona un control más preciso sobre el direccionamiento de red IPv4 e IPv6 y puede ser útil en entornos donde se requiere una administración avanzada de direcciones IP.
macvlan:
Descripción: Asignar una dirección MAC a un contenedor.
Explicación: El controlador de red macvlan permite asignar una dirección MAC a un contenedor, haciendo que el contenedor aparezca como un dispositivo de red físico en la red. Esto es útil en entornos donde se necesita una separación completa de la red, similar a dispositivos físicos separados.
Resumen
Estos controladores de red ofrecen diferentes niveles de aislamiento y conectividad para los contenedores de Docker, desde una red privada simple (bridge) hasta redes más avanzadas que permiten configuraciones distribuidas y administración avanzada de direcciones IP (overlay, ipvlan, macvlan). La elección del controlador de red depende de los requisitos específicos de la aplicación y del entorno en el que se ejecutan los contenedores.
Veo que varios dicen que no entienden o esta complicado, me gusta mucho esta frase:
"Si siempre hacemos lo mismo no seremos mas de lo que ya somos hoy."
Por eso chicos si no entienden algo vuelvan a ver la clase, busquen mas información, mas explicaciones y significados, casos de uso... Hasta que les quede claro, no se trata de entender todo a la primera si no que con la practica y constancia lo logramos, vamos! No paremos de aprender.
Tipos de Redes en Docker
Docker ofrece varios tipos de redes predeterminadas:
bridge (puente): Es la red predeterminada en la que se ejecutan los contenedores cuando no se especifica una red. Ideal para comunicaciones entre contenedores en un mismo host.
host: Hace que el contenedor comparta la misma pila de red que el sistema host, eliminando el aislamiento de red entre el host y el contenedor. Es útil para aplicaciones que necesitan acceso completo a la red del host.
none: Ejecuta el contenedor sin ninguna interfaz de red conectada. Puede ser útil si deseas un entorno completamente aislado para pruebas.
overlay: Permite la comunicación entre contenedores que están en diferentes hosts en un entorno de Docker Swarm. Es utilizada principalmente en configuraciones de orquestación.
Estas son las verdaderas definiciones, creo que el profesor se equivocó en la definición de una red host.
Me preguntaba como podría integrar varias APIs en un mismo proyecto y ya todo va dando forma, aunque tengo algunas dudas de como integrar varias redes para distintos usos... pero hay que tener unas consideraciones en cuenta si se va a usar bridge.
Usar un bridge network:
Ventajas:
Facilita la comunicación entre las diferentes APIs, ya que todos los contenedores están en la misma red y pueden comunicarse entre sí utilizando los nombres de los contenedores.
Simplifica la gestión de red, ya que todos los contenedores comparten la misma configuración de red.
Desventajas:
Si una de las APIs tiene un problema de seguridad, todos los contenedores en la red pueden estar en riesgo.
Puede haber conflictos de puertos si varias APIs intentan utilizar el mismo puerto en el host.
Consideraciones adicionales:
Seguridad: Si la seguridad es una preocupación, puedes considerar la segmentación de red utilizando redes virtuales separadas para diferentes grupos de APIs. Por ejemplo, puedes crear una red para APIs relacionadas con la autenticación y otra red para APIs relacionadas con el manejo de productos.
Escalabilidad: Si esperas un alto tráfico en alguna de tus APIs, puede ser útil escalarla independientemente de las demás. En este caso, puedes considerar la separación de las APIs en diferentes entornos o clústeres de Docker.
Gestión de recursos: Dependiendo de los recursos disponibles en tu infraestructura y de los requisitos de cada API, puede ser útil asignar recursos específicos (CPU, memoria) a cada contenedor. Esto puede ser más fácil de gestionar si las APIs están en redes separadas.
Monitorización y gestión: Si necesitas monitorizar y gestionar el rendimiento de cada API por separado, puede ser útil tenerlas en redes separadas para facilitar la monitorización y la gestión.
En resumen, utilizar un bridge network para desplegar varias APIs en Docker puede ser una opción viable, especialmente si las APIs están estrechamente relacionadas y comparten recursos. Sin embargo, es importante considerar otros factores como la seguridad, la escalabilidad y la gestión de recursos al decidir cómo organizar tus APIs en contenedores Docker.
Fuente de ChatGPT
Me imagino que al usar diferentes contenedores con diferentes apis es como si montaras un app basada en microservicios asi que es una buena forma de probar la aplicación con docker.
Niveles de Aislamiento
Bridge (Default)
🚧 Medio
El contenedor tiene su propia IP privada. Para salir, necesita un "puente" (NAT). Es como vivir en una urbanización cerrada: seguro, pero necesitas permiso para entrar visitas.
Host
🔓 Nulo
El contenedor secuestra la red de tu máquina. Si tu PC tiene la IP 192.168.1.5, el contenedor también. Rendimiento brutal, seguridad cuestionable.
None
🛑 Total
Sin red. El contenedor es un ermitaño digital. Útil solo para tareas que requieren máxima paranoia o procesos batch offline.
Overlay
☁️ Mágico
Conecta contenedores en diferentes máquinas físicas. (Esto es territorio de Docker Swarm/Kubernetes, pero bueno saber que existe).
En Docker, hay varios tipos de redes, cada una con características únicas:
Bridge: Es la red predeterminada. Permite la comunicación de contenedores dentro de la misma red, y se usa comúnmente para la mayoría de los contenedores.
Host: Utiliza la red del host directamente, lo que permite que el contenedor comparta la pila de red con el host. Esto es útil para aplicaciones que requieren un alto rendimiento.
None: Aísla completamente el contenedor de la red, es decir, no puede comunicarse con otros contenedores ni con el host.
Custom Bridge: Permite crear redes personalizadas que facilitan la segmentación y comunicación entre contenedores según las necesidades del proyecto.
Estos tipos de red permiten gestionar la comunicación y el acceso entre contenedores de manera eficiente, mejorando la seguridad y la organización de los servicios en Docker.
🌐 Redes y Volúmenes en Docker: Explorando su Poder
El aprendizaje de Docker trae consigo conceptos clave que cambian la manera en que diseñamos y operamos aplicaciones. Dos de los más importantes son volúmenes y redes. A continuación, se desarrolla un recorrido práctico y conceptual sobre cómo funcionan, cómo se configuran y cómo pueden potenciar la seguridad y la orquestación de contenedores.
📦 El Encanto de los Volúmenes
El primer acercamiento a Docker suele estar marcado por los volúmenes, un recurso que permite persistir datos más allá del ciclo de vida efímero de los contenedores.
Con ellos, se logra que bases de datos, archivos de configuración o cualquier tipo de información crítica sobreviva incluso si el contenedor es eliminado.
Ejemplo práctico: Un contenedor de MySQL puede perderse al reiniciar, pero si está montado en un volumen, la base de datos seguirá intacta.
🌉 Redes en Docker: Del Misterio a la Flexibilidad
El concepto de redes suele resultar confuso al inicio, pero se convierte rápidamente en un campo fértil de posibilidades.
Gracias a ellas, los contenedores pueden interactuar entre sí y con el mundo exterior de manera controlada y personalizable.
Inspeccionando un contenedor
El comando docker inspect revela un archivo JSON con información valiosa como:
La configuración de red (Networks).
La IP interna asignada al contenedor.
Los puertos mapeados (ejemplo: 8080:80).
Modificar la configuración al incluir 127.0.0.1 en la ejecución (docker run -p 127.0.0.1:8080:80 ...) permite forzar la comunicación solo desde localhost, reforzando el control de acceso.
🔌 Tipos de Redes en Docker
Docker ofrece varias categorías de redes que cubren diferentes escenarios de despliegue:
Bridge (por defecto)
Es la red más utilizada (90% de los casos).
Conecta contenedores entre sí dentro de un entorno aislado, mientras mantiene comunicación con el host.
Host
El contenedor comparte directamente la red del host.
Útil para contenedores que requieren acceso completo sin capas intermedias.
None
El contenedor queda totalmente aislado sin acceso a ninguna red.
Ideal para pruebas de seguridad o contenedores que no deben comunicarse.
Redes personalizadas (ej. PlatziNet)
Permiten crear una red virtual dedicada para un grupo de contenedores.
Ejemplo: una aplicación web, su API y su base de datos interactuando solo entre sí.
🛠️ Creando Redes Personalizadas
La creación de una red propia es sencilla con el comando:
docker network create NombreDeLaRed
Ejemplo:
docker network create PlatziNet-2
Luego, al listar con docker network ls, se observa la nueva red lista para integrar múltiples contenedores. Esto ofrece segmentación lógica y un control granular sobre las comunicaciones.
🔒 Seguridad y Principio de Mínimo Acceso
El diseño de redes no solo organiza mejor los servicios, también aporta seguridad.
Al aplicar segmentación mediante redes:
Los contenedores solo se comunican con quienes lo necesitan.
Se reduce la superficie de ataque, bloqueando interacciones innecesarias.
Se refuerza el principio de mínimo acceso, clave en arquitecturas modernas.
Ejemplo:
Un contenedor de frontend puede hablar con el backend, pero no con la base de datos directamente, evitando accesos indebidos.
📝 Conclusiones
Los volúmenes son la herramienta esencial para mantener datos persistentes.
Las redes en Docker son mucho más que puentes: permiten diseñar arquitecturas seguras, aisladas y flexibles.
Tipos de red como bridge, host, none y redes personalizadas dan forma a entornos que se ajustan a cada necesidad.
Una estrategia de redes bien diseñada potencia la seguridad, la orquestación y la escalabilidad de cualquier plataforma de contenedores.
El verdadero poder de Docker no está solo en correr contenedores, sino en cómo se comunican entre ellos y cómo se protegen los datos y accesos. Con estas bases, se abre la puerta a arquitecturas más robustas y seguras. 🚀
¿Para qué se usan redes en Docker?
Comunicación entre contenedores.
Comunicación entre contenedores y el host.
Exposición de servicios a redes externas. (ejemplo una API o un sitio web)
Aislamiento de redes. (limitar el acceso y mejorar la seguridad)
mmm y como le digo que utilice mi nuevo puente?
Con el comando 'docker network create', seguido por el nombre que quieras para tu red, por ejemplo 'PlatziNet 2'. Luego, para conectar contenedores a esta red, usa la opción '--network' al ejecutar o crear contenedores.
no me quedo claro este tema
en clase y en el resumen se menciona que: docker run -p 127.0.0.1:8080:80 nombre_contenedor asigna una IP al contenedor no cual no es exacto, lo que se hace es asignar un HostIp a ese contenedor, lo cual es diferente porque el contenedor aparte tiene otro número de IP
Principio de mínimo acceso, aplicando ciberseguridad en esta clase y con esta configuración
Esta clase fue más teórica, sin embargo, entendible
Nice!
docker network create --driver <tipo de controladores><nombre que se le quiere dar>```este comando es con el que puedes crear un controlador de red y decir el tipo que quieres
Conectividad
Podrias explicar la imagen? la verdad no la entendi
Comandos para administrar las redes:
docker network COMMAND
COMMANDS:
connect Conectar un contenedor a una red
create Crear una red
disconnect Desconectar un contenedor de una red
inspect Muestra información detallada de una o mas redes