Networking en docker
3 tipos de redes:
- Bridge (driver bridge). Red por defecto. Interfaz puente
- Host (driver overlay). Para enlazar diferentes tipos de contenedores
- none. Para aislar un contenedor sin red.
Con docker network ls podemos ver las redes que tenemos
ifconfig tendremos la red bridge con la interfaz docker0. Es un segmento de red
Comandos networking
- Docker network connect/disconnect
- docker network create
- docker network inspect
- docker network ls
- docker network rm
Redes bridge
- Aislar segmentos de red
- Se añaden o quitan contenedores en cada segmento
- Los contenedores se comunican sólo dentro de la red pero no entre redes
- Un contenedor añadido a dos redes se comunica con los miembros de ambas redes.
- Un contenedor con varias redes tiene salida externa con la primera red no interna, en orden léxico
Links
Bridge es una red especial que permiten link entre contenedores. No es necesario exponer puertos, descubren los servicios y transfiere información de forma segura. Importante el uso de nombres. Utiliza variables de entorno para almacenar datos.
Práctica de networking
Lanzamos un contenedor
docker run -d -P --name training/webapp python app.py
Comprobamos que está en procesos
docker ps
Inspeccionamos con
docker inspect web
vemos que coinciden las ip de las interfaces
ifconfig docker0
Paramos el contenedor
docker stop web
y borramos
docker rm web
Con esto veremos las redes
docker network ls
Y vemos que la red que da es por defecto.
Podemos inspeccionar alguna red con
docker network inspect id-Red
Y podremos ver los container conectados a esa red.
Vamos a crear una red propia con
docker network create -d bridge redlocal
Ahora la veremos en la lista
docker network ls
Si le hacemos una inspect veremos que tiene una ip diferente. Si consultamos las interfaces con ifconfig veremos que se ha creado un nuevo bridge con esa ip
Podemos lanzar un contenedor con la red creada
docker run -d --network=redlocal --name web1 eboraas/apache-php
Podemos verlo en procesos
docker ps
Y podemos inspeccionarlo
docker inspect id-contenedor
Creamos otro contenedor igual con la red original
docker run -d --name web2 eboraas/apache-php
Vamos a añadir otra capa a la web1
docker exec -ti web1 /bin/bash
Una vez dentro hacemos ping a la ip de web2
ping ip-web2
Para hacerlo tendremos que instala el paquete para hacer ping
apt update && apt install iputils-ping
Después ya podrá hacerlo, pero no responderá al ping porque no se ven.
Vamos a conectar las ip de los containers:
docker network connect redlocal web2
Ahora en inspeccionar veremos dos redes
docker inspect web2
Y ahora ya se comunican con el ping.
1 comentario. Dejar nuevo
Que interesante!! Lo guardo que quiero hacerlo algún día.