3.1 Fundamentos de la red bridge
La red bridge
es el controlador de red predeterminado en Docker y se utiliza para crear una red aislada en la cual los contenedores pueden interactuar entre sí. Esta red permite que los contenedores se comuniquen mediante direcciones IP y nombres de host, proporcionando una manera conveniente de organizar la interacción entre diferentes componentes de aplicaciones multicontenidos.
La red bridge
crea una red interna privada a nivel del host que está aislada de la red externa del host. Los contenedores conectados a esta red pueden comunicarse entre sí, pero no pueden ser directamente accesibles desde el exterior sin configurar el reenrutamiento de puertos.
Creación automática de la red bridge
De manera predeterminada, Docker crea la red bridge
durante la instalación, y los contenedores que se ejecutan sin especificar una red concreta se conectan automáticamente a esta red.
Ejemplo de creación y uso de contenedores en la red bridge
1. Lanzar contenedores en la red bridge
:
En este ejemplo, lanzamos dos contenedores: container1 con Nginx y container2 con Busybox. Ambos contenedores están conectados a la red bridge predeterminada.
docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000
2. Verificar las direcciones IP de los contenedores:
Para verificar las direcciones IP de los contenedores, utiliza el comando docker inspect.
Estos comandos mostrarán las direcciones IP de los contenedores, que se pueden usar para la comunicación entre ellos.
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2
3. Comunicación entre los contenedores por dirección IP:
Para verificar la comunicación entre los contenedores, utiliza el comando ping
desde el contenedor container2
para hacer ping al container1
.
Si los contenedores están correctamente conectados a la red bridge
, el comando ping
tendrá éxito.
docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>
Explicación: La red bridge
proporciona una solución simple para aplicaciones locales donde los contenedores necesitan interactuar entre sí permaneciendo aislados de la red externa. Hacer ping a través de la dirección IP es una forma básica de verificar la conexión de red, aunque para aplicaciones más complejas puede ser necesario configurar DNS o controladores de red adicionales.
3.2 Uso de nombres de host
Uso de nombres de host para conectar contenedores
Además de usar direcciones IP, Docker también permite usar los nombres de los contenedores para conectar entre ellos. Esto facilita la configuración, ya que los nombres de los contenedores permanecen constantes, a diferencia de las direcciones IP, que pueden cambiar al reiniciar los contenedores.
Ejemplo de conexión utilizando un nombre de host
1. Ejecutar contenedores especificando la red bridge
:
docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
2. Verificar la conexión utilizando un nombre de host:
Usa el comando ping
desde el contenedor appserver
para hacer ping a webserver
:
docker exec appserver ping -c 4 webserver
Creación de una red bridge
personalizada
En lugar de usar la red bridge
predeterminada, puedes crear una red bridge
personalizada para tener un mejor control sobre la interacción entre los contenedores.
Ejemplo de creación de una red personalizada
1. Crear una red personalizada:
docker network create --driver bridge my_bridge_network
2. Ejecutar contenedores en la red personalizada:
docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000
3. Verificar la conexión utilizando un nombre de host:
docker exec appserver ping -c 4 webserver
3.3 Ejemplos de múltiples hosts
Ejemplos de uso práctico
Ejemplo 1: Servidor web y base de datos
Crea el archivo docker-compose.yml
para el servidor web y la base de datos:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Inicia Docker Compose:
docker compose up -d
Verifica la conexión entre contenedores:
docker compose exec web ping -c 4 db
Ejemplo 2: Arquitectura de microservicios
Crea el archivo docker-compose.yml
para la aplicación de microservicios:
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- my_bridge_network
backend:
image: mybackend:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Inicia Docker Compose
:
docker compose up -d
Verifica la conexión entre contenedores:
docker compose exec backend ping -c 4 db
docker compose exec frontend ping -c 4 backend
GO TO FULL VERSION