5.1 Tipos principales de redes personalizadas
Las redes personalizadas en Docker ofrecen opciones flexibles para configurar y gestionar la interacción de red entre contenedores. Estas permiten aislar los contenedores, organizar su interacción y crear topologías de red complejas. En esta lección vamos a revisar cómo crear y configurar redes personalizadas en Docker, así como ejemplos de su uso.
Tipos principales de redes personalizadas
Docker soporta varios tipos de redes personalizadas, cada una con sus propias características y destinada a diferentes escenarios de uso:
-
Bridge (redes puente)
: proporcionan aislamiento y conexión entre contenedores en un mismo host. Este tipo de red se usa de forma predeterminada para aplicaciones locales que no necesitan interacción fuera del host. -
Overlay (redes overlay)
: están diseñadas para conectar contenedores que operan en diferentes hosts dentro de un clúster de Docker Swarm o Kubernetes. Ofrecen alta escalabilidad y seguridad para aplicaciones distribuidas. -
Macvlan
: permiten que los contenedores usen directamente la interfaz de red física del host. Esto es útil para aplicaciones de red con altos requisitos de rendimiento, así como para casos en los que se necesita un enlace a direcciones MAC específicas. Los contenedores en una red Macvlan pueden interactuar con otros dispositivos en la red física como si fueran nodos independientes. -
Host (redes host)
: los contenedores utilizan el stack de red del host, lo que elimina el sobrecoste de la virtualización de la red pero reduce el aislamiento. Este tipo de red es adecuado para aplicaciones que requieren el máximo rendimiento de red.
5.2 Creación y uso de redes bridge
Las redes bridge son el tipo más común de redes personalizadas y se utilizan para aislar contenedores en un mismo host. Los contenedores conectados a la misma red bridge pueden interactuar entre ellos mediante direcciones IP y nombres de host.
Creación de una red bridge
personalizada
Para crear una red bridge
personalizada usa el comando docker network create
:
docker network create --driver bridge my_bridge_network
Iniciar contenedores en una red personalizada
Inicia los contenedores conectándolos a la red creada:
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network busybox sleep 1000
Comprobación de conexión entre contenedores
Puedes usar el comando ping
para comprobar la conexión entre los contenedores:
docker exec container2 ping -c 4 container1
Si los contenedores están correctamente conectados a la red my_bridge_network
, el comando ping
será exitoso.
5.3 Redes personalizadas en Docker Compose
Ejemplos de uso de redes personalizadas en Docker Compose
Docker Compose facilita la creación y gestión de redes para aplicaciones multicontenedor. Puedes definir redes personalizadas en el archivo docker-compose.yml
.
Ejemplo del archivo docker-compose.yml
:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
app:
image: myapp:latest
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Ejecuta Docker Compose:
docker compose up -d
En este ejemplo, ambos servicios (web
y app
) están conectados a la red personalizada my_bridge_network
.
5.4 Configuración y uso de redes macvlan
Las redes macvlan
permiten a los contenedores usar directamente la interfaz de red física del host, lo que puede ser útil para aplicaciones con altos requisitos de rendimiento de red. Los contenedores en esta red obtienen sus propias direcciones IP dentro de la subred especificada, lo que los hace visibles en la misma red que el host.
Crear una red macvlan
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my_macvlan_network
En este comando:
--subnet
: define la subred en la que estarán los contenedores.--gateway
: establece la puerta de enlace para los contenedores.-o parent
: especifica la interfaz de red del host a la que se conecta la red.
Ejecutar contenedores en una red macvlan
docker run -d --name container1 --network my_macvlan_network nginx
docker run -d --name container2 --network my_macvlan_network busybox sleep 1000
En este ejemplo, ambos contenedores están conectados a la red my_macvlan_network
y tienen acceso a la red externa a través de la interfaz física eth0
.
5.5 Ejemplos de uso en Docker Compose
También puedes usar redes macvlan
en Docker Compose
. Por ejemplo:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_macvlan_network
networks:
my_macvlan_network:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
Inicia Docker Compose
:
docker compose up -d
En este ejemplo, la red my_macvlan_network
permite al servicio web
interactuar con los dispositivos en la subred 192.168.1.0/24
, incluyendo el host.
Recomendaciones prácticas:
- Configuración del acceso: Asegúrate de que tu router o el administrador de red permita el uso de la subred especificada en la configuración de
macvlan
. - Aislamiento: Si la seguridad es importante, usa VLAN para segmentar la red, de modo que los contenedores tengan acceso solo a los recursos necesarios.
- Pruebas: Después de la configuración, verifica la comunicación entre los contenedores y la red externa usando comandos como
ping
ocurl
.
5.6 Ejemplo de uso de redes para microservicios
Vamos a ver un ejemplo, donde tenemos frontend, backend y una base de datos, que están aislados en redes diferentes, pero al mismo tiempo interactúan a través de la intersección de redes.
Archivo docker-compose.yml
version: '3.8'
services:
frontend:
image: myfrontend:latest
networks:
- front-tier
- back-tier
backend:
image: mybackend:latest
networks:
- back-tier
- db-tier
database:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- db-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
db-tier:
driver: bridge
Ejecuta Docker Compose
:
docker compose up -d
En este ejemplo:
- El servicio
frontend
está conectado a las redesfront-tier
yback-tier
, lo que le permite interactuar tanto con clientes externos como con el backend. - El servicio
backend
está conectado a las redesback-tier
ydb-tier
, lo que le permite interactuar tanto con el frontend como con la base de datos. - El servicio
database
está conectado solo a la reddb-tier
, lo que garantiza el aislamiento de la base de datos del acceso exterior.
Recomendaciones prácticas:
- Usa aislamiento: La separación de redes ayuda a restringir el acceso de los servicios a bases de datos u otros recursos críticos.
- Verificación de conexión: Asegúrate de que los servicios puedan interactuar entre sí a través de redes compartidas usando comandos como
ping
ocurl
. - Optimización: Usa una red
overlay
si tu proyecto implica trabajar en un clúster o en múltiples hosts.
Este ejemplo muestra cómo crear aislamiento de red y al mismo tiempo garantizar la interacción entre diferentes niveles de una aplicación.
GO TO FULL VERSION