Saltar la navegación

5.2 Gestionando redes

En el apartado anterior comentamos que para usar docker para el desarrollo vamos a tener más que suficiente con la creación de redes con el driver bridge. Sin embargo, vamos a tener que hacer una diferenciación entre dos tipos de redes "bridged": la red creada por defecto por docker para que funcionen todos los contenedores y aquellas redes "bridged" definidas por el usuario, es decir, por nosotros. Esta red por defecto se llama bridge  y podemos comprobrar que se ha creado ejecutando la siguiente orden que nos muestra todas las redes docker que tengamos:

# Mostrar todas las redes docker creadas

> docker network ls

Como resultado obtendremos una salida similar a la siguiente, en la que se destaca mediante un recuadro la red bridge por defecto.

Red bridge docker por defecto
Juan Diego Pérez Jiménez. Red bridge docker por defecto (Dominio público)

Esta salida, además del nombre de cada una de las redes creadas recoge la siguiente información:

  • El NETWORK ID que me sirve para identificar una red y que se puede usar indistintamente con el nombre para cualquiera de las operaciones de gestión de redes (crear, borrar, obtener información etc...)
  • El DRIVER, que como ya dijimos en el apartado anterior me define el tipo de red que voy a "conectar" a los contenedores. Podía tomar los valores bridge, none, host,macvlan y overlay.
  • El SCOPE que nos indica el ámbito de nuestras redes y que en este caso son redes locales dentro de nuestra propia máquina.

Esta red "bridged" por defecto, que es la usada por defecto por los contenedores, se diferencia en varios aspectos de las redes "bridged" que creamos nosotros. Estos aspectos son los siguientes:

  • Las redes que nosotros definamos proporcionan resolución DNS entre los contenedores cosa que la red por defecto no hace a  no ser que usemos opciones que ya se consideran "deprectated".
  • Puedo conectar en caliente a los contenedores redes "bridged" definidas por el usuario. Si uso la red por defecto tengo que parar previamente el contenedor.
  • Me permite gestionar de manera más segura el aislamiento de los contenedores ,ya que si no indico una red al arrancar un contenedor éste se incluye en la red por defecto donde pueden convivir servicios que no tengan nada que ver.
  • Tengo más control sobre la configuración de las redes si las defino yo. Los contenedores de la red por defecto comparten todos la misma configuración de red (MTU, reglas ip tables etc...).
  • Los contenedores dentro de la  red "bridge" comparten todos ciertas variables de entorno lo que puede provocar ciertos conflictos.

Una vez nos hemos situado vamos a ver cómo realizamos las operaciones más comunes para gestionar y trabajar con redes en docker. Estas operaciones son:

  • Listado de las redes (ya visto, docker network ls)
  • Creación de las redes. (docker network create)
  • Borrado de las redes. (docker network rm / docker network prune)

Una descripción más detallada de lo todas las opciones la podemos ver en la referencia completa de redes en docker pero, tal y como acostumbramos en este curso, vamos a ilustrar su funcionamiento con distintos ejemplos.

EJEMPLOS DE CREACIÓN DE REDES

# Crear una red. Al no poner nada más coge las opciones por defecto, red bridge local y el mismo docker elige la dirección de red y la máscara

> docker network create red1

# Crear una red (la red2) dándole explícitamente el driver bridge (-d) , una dirección y una máscara de red (--subnet) y una gateway (--gateway)

> docker network create -d bridge --subnet 172.24.0.0./16 --gateway 172.24.0.1 red2

La orden docker network create tiene más opciones para las redes de tipo bridge y muchas más para redes de otro tipo. Pero como estamos en un curso de docker aplicado al desarrollo estas opciones son más que suficientes para poder montar nuestros entornos y los de nuestros alumnos.

NOTA: CADA RED DOCKER QUE CREO CREA UN PUENTE DE RED ESPECÍFICO PARA CADA RED QUE PODEMOS VER CON ifconfig / ip a

ELIMINACIÓN DE REDES

# Eliminar la red red1

> docker network rm red1

# Eliminar una red con un determinado ID

> docker network rm 3cb4100fe2dc

# Eliminar todas la redes que no tengan contenedores asociados

> docker network prune

# Eliminar todas las redes que no tengas contenedores asociados sin preguntar confirmación (-f o --force)

> docker netowkr prune -f

# Eliminar todas las redes que no tengan contenedores asociados y que fueron creadas hace más de 1 hora (--filter)

> docker network prune  --filter until=60m

NOTA: NO PUEDO BORRAR UNA RED QUE TENGA CONTENEDORES QUE LA ESTÉN USANDO. DEBERÉ PRIMERO BORRAR LOS CONTENEDORES O DESCONECTAR LA RED.

Creado con eXeLearning (Ventana nueva)