Redes en Docker
Tipos de Redes en Docker
Docker proporciona varios tipos de redes predefinidas que se utilizan para conectar contenedores entre sí y con el mundo exterior. Los tipos de redes predefinidas en Docker incluyen:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
ec77cfd20583 bridge bridge local
69bb21378df5 host host local
089cc966eaeb none null local
Tipos de Redes Predefinidas
-
Bridge (Puente)
- Descripción: Es la red por defecto para los contenedores Docker. Los contenedores en esta red pueden comunicarse entre sí y exponer puertos al exterior.
- Dirección IP por defecto: 172.17.0.0/16
- Uso común: Aislar contenedores y permitir la comunicación entre ellos en un entorno local.
Ejemplo de uso:
Crear un contenedor interactivo usando la imagen
debian
en la redbridge
:$ docker run -it --name contenedor1 --rm debian bash
En otra pestaña, obtenemos la IP del contenedor:
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' contenedor1
172.17.0.2Verificar la configuración de la red
bridge
en el host:$ 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
...Verificar las reglas de
iptables
creadas por Docker:sudo iptables -L -n
sudo iptables -L -n -t nat -
Host
- Descripción: La red
host
elimina la capa de aislamiento entre el contenedor y el host. El contenedor utiliza la red del host y no tiene una IP propia. - Uso común: Cuando se necesita el máximo rendimiento de red y acceso directo a las interfaces del host.
Ejemplo de uso:
Ejecutar un contenedor en la red
host
:$ docker run -d --name mi_servidor --network host josedom24/aplicacionweb:v1
Verificar los contenedores en ejecución:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
135c742af1ff josedom24/aplicacionweb:v1 "/usr/sbin/apache2ct…" 3 seconds ago Up 2 seconds mi_servidorAcceder al puerto 80 del servidor desde el host para ver la página web directamente.
- Descripción: La red
-
None
- Descripción: La red
none
desactiva la configuración de red para el contenedor. El contenedor no tiene IP y no puede acceder a redes externas ni comunicarse con otros contenedores. - Uso común: Ejecución de trabajos aislados que no necesitan comunicación de red.
Ejemplo de uso:
Ejecutar un contenedor con red
none
:$ docker run -it --name contenedor-aislado --network none alpine
- Descripción: La red
Crear y Configurar Redes Personalizadas
Además de las redes predefinidas, Docker permite crear redes personalizadas con diferentes controladores. Esto es útil para aplicaciones que requieren redes específicas o que necesitan aislamiento adicional.
Crear una Red Personalizada
Para crear una red personalizada, usa el comando docker network create
. Aquí hay un ejemplo de cómo crear una red bridge
personalizada:
$ docker network create --driver bridge mi_red_personalizada
Conectar Contenedores a Redes Personalizadas
Para conectar contenedores a una red personalizada, usa la opción --network
al ejecutar el contenedor. Por ejemplo:
$ docker run -d --name contenedor1 --network mi_red_personalizada nginx
$ docker run -d --name contenedor2 --network mi_red_personalizada alpine ping contenedor1
En este ejemplo, contenedor2
puede hacer ping a contenedor1
porque ambos están en la misma red personalizada mi_red_personalizada
.
Ver Redes y Contenedores Conectados
Para listar todas las redes disponibles y ver los contenedores conectados a cada red:
$ docker network ls
$ docker network inspect mi_red_personalizada
Esto muestra detalles sobre la red, incluidos los contenedores conectados y la configuración de la red.
Consideraciones y Mejores Prácticas
- Seguridad: Usa redes personalizadas para aislar aplicaciones y servicios en entornos de producción. Esto proporciona un nivel adicional de seguridad y control.
- Rendimiento: La red
host
puede ofrecer un mejor rendimiento, pero ten en cuenta que el contenedor no estará aislado de la red del host. - Configuración de IP: Evita la configuración manual de IP en redes
bridge
personalizadas a menos que sea necesario, ya que Docker maneja la asignación de IP automáticamente.
Para obtener más información sobre redes en Docker, consulta la documentación oficial de Docker sobre redes.