En los tres apartados anteriores hemos hablado de aspectos relativos a las redes docker pero no hemos dicho nada de cómo "conectamos" esas redes a nuestros contenedores que es el paso fundamental para que dichos contenedores puedan conectarse entre ellos , puedan ofrecer servicios al exterior y puedan conectarse a Internet para poder actualizarse y/o instalar cualquier dependencia que necesitemos. Para realizar esta "conexión" debemos de tener en cuenta los siguientes aspectos:
- Al arrancar un contenedor podemos especificar a qué red está conectado inicialmente usando el flag --network seguido del nombre de la red a la que queremos conectarlo.
- Si al arrancar un contenedor no especificamos una red, el contenedor se conectará a la red por defecto, la red "bridge" que usa el driver "bridge".
- Al arrancar un contenedor no puedo "conectarlo" inicialmente a más de una red.
- Tras crear el contenedor puedo conectarlo a más redes o desconectarlo de alguna red. Dependiendo de si he elegido la red por defecto o no, podré o no podré hacer esa conexión o desconexión en caliente (con el contenedor funcionando).
Para ilustrar todas estar afirmaciones vamos a realizar distintos ejemplos:.
# Arrancar un contenedor de Apache sin especificar red y habilitando la conexión desde el exterior a través del puerto 80. Se conectará por defecto a la red bridge. > docker run -d --name web -p 80:80 httpd # Arrancar un contenedor de Apache conectándose a la red red1 que es una red bridge definida por el usuario y habilitando la conexión desde el exterior a través del puerto 8080 > docker run -d --name web2 --network red1 -p 8080:80 httpd # Arrancar un contenedor de Apache conectándose a la red red1 dándole una ip (que debe pertenecer a esa red) > docker run -d --name web2 --network red1 --ip 172.18.0.5 -p 8181:80 httpd # Conectar una nueva red, la red2 al contenedor web2. > docker network connect red2 web2 # Conectar una red, la red2 al contenedor web y darle una ip (que debe pertenecer a esa red) > docker network connect --ip 172.28.0.3 red2 web # Desconectar la red1 del contenedor web2. Debe estar funcionando para poder desconectarse > docker network disconnect red1 web2 |
Por supuesto la orden docker connect tienen más opciones que podemos consultar en la referencia y , adicionalmente, hay varios flags de la orden docker run que están relacionados con redes y que pueden resultar de interés:
- --dns para establecer unos servidores DNS predeterminados.
- --ip6 para establecer la dirección de red ipv6
- --hostname o -h para establecer el nombre de host del contenedor. Si no lo establezco será el ID del mismo.