Introducción a las redes en docker
Aunque hasta ahora no lo hemos tenido en cuenta, cada vez que creamos un contenedor, esté se conecta a una red virtual y docker hace una configuración del sistema (usando bridges e iptables) para que la máquina tenga una ip interna, tenga acceso al exterior, podamos mapear (DNAT) puertos,…
Vamos a crear un contenedor interactivos con la imagen debian
:
$ docker run -it --name contenedor1 --rm debian bash
Nota: Hemos usado la opción --rm
para al finalizar de ejecutar el proceso, el contenedor se elimina.
En otra pestaña, podemos ejecutar esta instrucción para obtener la ip que se le ha asignado:
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' contenedor1
172.17.0.2
Obtenemos información del contenedor filtrando el json de salida para obtener la IPv4 que se le ha asignado.
Observamos que el contenedor tiene una ip en la red 172.17.0.0/16
. Además podemos comprobar que se ha creado un bridge
en el host, al que se conectan los contenedores:
$ ip a
...
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:be:71:11:9e brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:beff:fe71:119e/64 scope link
valid_lft forever preferred_lft forever
...
Además podemos comprobar que se han creado distintas cadenas en el cortafuegos para gestionar la comunicación de los contenedores. Podemos ejecutar como administrador: iptables -L -n
y iptables -L -n - t nat
y comprobarlo.