Redes en Docker
Redes en Docker
La red “bridge” es una red interna privada creada por Docker en el host. Todos los
contenedores se conectan a esta red de forma predeterminada y obtienen una dirección IP
interna, generalmente en el rango 172.17.0.*. Los contenedores pueden acceder entre sí
utilizando esta IP interna
Para este tutorial, vas a utilizar una imagen de alpine. Lo cierto es que tendrás que levantar
tantos contenedores como sean necesarios para ver como se relacionan unos con otros, y que
sentido tienen esto de las redes.
Antes de adentrarte en esto de las redes en Docker, te indico los comandos que tienes a tu
alcance para gestionar las redes,
Redes en Docker
1
TIPOS DE CONTROLADORES DE RED EN DOCKER
Primero ejecuta
docker network ls
docker run -i -t --name apache1 httpd
docker run -i -t --name nginx1 nginx
Redes en Docker
2
5. Haga ping al contenedor nginx usando la dirección IP que vimos arriba, desde dentro del
contenedor apache,
docker exec -it apache1 bash
root@8287b6b9583a:/usr/local/apache2# ping 172.17.0.2
Redes en Docker
3
contenedor / nodo que se encuentre dentro
de esta red.
Redes en Docker
4
Veamos esto en acción.
docker network create app
docker network create web
Redes en Docker
5
6. Inicie una sesión de bash dentro del contenedor de
apache de la red web
docker exec -it apacheapp bash
Redes en Docker
6
10. Ahora, intentemos hacer ping al contenedor webdb de
otra red. Descubra la dirección IP de la misma manera que
lo hicimos antes
docker inspect --format '{{json .NetworkSettings.Networks}}' mongoweb
docker exec -it apacheapp bash
Redes en Docker
7
Veamos cómo hacer esto.
docker run -it --name nginx2 -p 80:80 nginx
Redes en Docker
8
Nombres DNS
Redes en Docker
9
1. Entramos en el bash de apacheapp, haga ping al
contenedor mongoapp usando su nombre
docker exec -it apacheapp bash
docker inspect --format '{{json .NetworkSettings.Networks}}' mongo_temp
Redes en Docker
10
Notará que incluso cuando la ip del contenedor ha cambiado, podemos hacer ping usando el
Por supuesto, puedes tener un contenedor conectado a dos redes Docker. Para ello, crea una
nueva red con la definición que has visto anteriormente,
docker run -dit --rm --name alpine1 --network red1 alpine sh
docker run -dit --rm --name alpine2 --network red1 alpine sh
docker network create red2
docker run -dit --rm --name alpine3 --network red2 alpine sh
Y conecta este tercer contenedor alpine3 con la primera de las redes red1. Para hacer esto,
ejecuta la siguiente instrucción,
docker network connect red1 alpine3
Así tienes el contenedor alpine3 con una pata en cada una de las redes red1 y red2. De esta
manera desde este contendor puedes hacer ping a los otros dos contenedores. Pero, si
levantamos otro contenedor mas que esté en esta segunda red y que solo esté conectado
con alpine3, no verá a los otros contenedores, vamos allá,
docker run -dit --name alpine4 --network red2 alpine sh
Redes en Docker
11
Así si intentas hacer ping desde alpine3 a cualquier otro docker, ya sea directamente por su
nombre o por la IP, verás que tienes respuesta de cualquiera de ellos. Si por el contrario, lo
intentas hacer desde este último contenedor alpine4, verás que solo te responde alpine3, tanto
por IP como por nombre. Si intentas hacer ping desde alpine4 a alpine1 ó alpine2, verás que
ninguno de los dos te da respuesta, ni por IP ni por nombre.
Una vez hayas terminado de jugar con todos los contenedores, tan solo tienes que hacer docker
stop $(docker ps -q), y se detendrán y borrarán todos los contenedores. Y lo único que te
resta por hacer es borrar las redes. Esto último, es tan sencillo como ejecutar docker network
prune, que borrará todas las redes que no se estén utilizando excepto a las que están por
defecto.
Redes en Docker
12