CodeGym /Cursos /Docker SELF /Conexión entre contenedores

Conexión entre contenedores

Docker SELF
Nivel 17 , Lección 2
Disponible

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.

Terminal

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.

Terminal

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.

Terminal

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:

Terminal

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:

Terminal

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:

Terminal

docker network create --driver bridge my_bridge_network 
    

2. Ejecutar contenedores en la red personalizada:

Terminal

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:

Terminal

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:

Yaml

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:

Terminal


docker compose up -d 

Verifica la conexión entre contenedores:

Terminal


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:

Yaml

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:

Terminal

        
docker compose up -d 

Verifica la conexión entre contenedores:

Terminal

docker compose exec backend ping -c 4 db

docker compose exec frontend ping -c 4 backend 
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION