GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Explicación de los conceptos de red de Docker

Redes de Docker se utiliza básicamente para establecer la comunicación entre los contenedores docker y el mundo exterior a través de la máquina host o se puede decir que es un pasaje de comunicación a través del cual todos los contenedores aislados se comunican entre sí en diversas situaciones para realizar las acciones requeridas. En esta guía, explicaremos los conceptos básicos de red de Docker con ejemplos prácticos en Ubuntu.

Si aún no ha instalado Docker, consulte la siguiente guía.

  • Cómo instalar Docker en el servidor Ubuntu 18.04 LTS

Conceptos básicos del uso de Docker:

  • Primeros pasos con Docker

Explicación de los conceptos de red de Docker

Todos los comandos enumerados a continuación se prueban con root privilegios en Ubuntu .

Para administrar operaciones de red, como crear una nueva red, conectar un contenedor a una red, desconectar un contenedor de la red, enumerar las redes disponibles y eliminar redes, etc., usamos el siguiente comando:

# docker network

Tipos de controladores de red docker

Para enumerar todas sus redes, ejecute:

# docker network ls

Hagamos una breve introducción sobre todos ellos.

  1. Red puente: Cuando inicia Docker, se crea automáticamente una red de puente predeterminada. Los contenedores recién iniciados se conectarán automáticamente a él. También puede crear redes puente personalizadas definidas por el usuario. Las redes puente definidas por el usuario son superiores a la red puente predeterminada.
  2. Red de alojamiento: Elimina el aislamiento de la red entre el contenedor y el host Docker, y usa la red del host directamente. Si ejecuta un contenedor que se une al puerto 80 y utiliza una red de host, la aplicación del contenedor está disponible en el puerto 80 en la dirección IP del host. Significa que no podrá ejecutar varios contenedores web en el mismo host, en el mismo puerto, ya que el puerto ahora es común para todos los contenedores en la red del host.
  3. Ninguna red: En este tipo de red, los contenedores no están conectados a ninguna red y no tienen acceso a la red externa ni a otros contenedores. Por lo tanto, esta red se usa cuando desea deshabilitar completamente la pila de redes en un contenedor.
  4. Red superpuesta: Crea una red privada interna que abarca todos los nodos que participan en el clúster de enjambre. Por lo tanto, las redes de superposición facilitan la comunicación entre un servicio Docker Swarm y un contenedor independiente, o entre dos contenedores independientes en diferentes Docker Daemons.
  5. Red Macvlan: Algunas aplicaciones, especialmente las aplicaciones heredadas o las aplicaciones que monitorean el tráfico de la red, esperan conectarse directamente a la red física. En este tipo de situación, puede usar el controlador de red Macvlan para asignar una dirección MAC a la interfaz de red virtual de cada contenedor, haciendo que parezca una interfaz de red física conectada directamente a la red física.

Permítame mostrarle ejercicios prácticos para redes Bridge y Host.

1. Puente de red

Usaré dos contenedores Alpine para explicar este tipo de red.

Ahora, voy a ejecutar dos contenedores Alpine, a saber, C1 y C2 usando comandos:

# docker run -it -d --name c1 alpine ash
# docker run -it -d --name c2 alpine ash

A continuación, averigüemos la dirección IP de esos contenedores en ejecución. Para hacerlo, ejecute:

# docker exec -it c1 sh –c “ip a”
# docker exec -it c2 sh –c “ip a”

Como puede ver, la dirección IP del contenedor C1 es 172.17.0.2 y la dirección IP de C2 es 172.17.0.3 .

Ahora sigamos adelante e intentemos hacer ping entre nosotros para asegurarnos de que puedan comunicarse.

Primero, conéctese al contenedor C1 en ejecución e intente hacer ping al contenedor C2:

# docker attach c1
# Ping –c 2 172.17.0.3

Del mismo modo, adjunte al contenedor C2 e intente hacer ping al contenedor C1.

# docker attach c2
# Ping –c 2 172.17.0.2

Como puede ver en las capturas de pantalla anteriores, la comunicación se produce entre los contenedores en la misma red.

También podemos verificarlo inspeccionando la red del puente usando el comando:

# docker network inspect bridge

El comando anterior mostrará toda la información sobre la red, como el tipo de red, la subred, la puerta de enlace, el nombre de los contenedores y las direcciones iip, etc.

1.1 Creación de una red puente definida por el usuario

Como ya dije, cuando inicia Docker, se crea automáticamente una red de puente predeterminada . Todos los contenedores recién iniciados se conectarán automáticamente a él. Sin embargo, también puede crear redes puente personalizadas definidas por el usuario.

Para crear un nuevo controlador de red, simplemente ejecute:

# docker network create my_net

O,

# docker network create --driver bridge dhruv_net

Ambos comandos harán el mismo trabajo. Si no especifica el nombre del controlador, se creará en el controlador de red predeterminado, es decir, puente .

En redes definidas por el usuario como dhruv_net, los contenedores no solo pueden comunicarse por dirección IP, sino que también pueden resolver un nombre de contenedor en una dirección IP. Esta capacidad se llama descubrimiento automático de servicios .

Para asegurarnos de que los contenedores puedan comunicarse entre sí, ejecutemos tres contenedores alpinos, a saber, A1 , A2 y A3 en dhruv_net red que creamos anteriormente.

# docker run -it -d --name A1 --network dhruv_net alpine ash
# docker run -it -d --name A2 --network dhruv_net alpine ash
# docker run -it -d --name A3 --network dhruv_net alpine ash

Ahora intente conectarse a cualquiera de los contenedores y haga ping a los otros dos usando el nombre del contenedor.

A partir de las capturas de pantalla anteriores, se demuestra que los contenedores pueden comunicarse entre sí.

2. Red anfitriona

Estamos ejecutando un contenedor que se une al puerto 80 mediante la red de host, la aplicación del contenedor está disponible en el puerto 80 en la dirección IP del host.

La red host solo es necesaria cuando ejecuta programas con una red muy específica. La aplicación que se ejecuta dentro del contenedor Docker parece que se está ejecutando en el propio host, desde la perspectiva de la red. Le permite al contenedor un mayor acceso a la red de lo que normalmente puede obtener.

Aquí, usamos netstat -ntlp Comando para mostrar el puerto de escucha en el servidor. Para encontrar qué servicio está escuchando en un puerto en particular, esta guía .

Solo hemos cubierto los conceptos básicos de los conceptos de red de Docker. Para obtener más detalles, le sugiero que consulte la guía de red de Docker que se adjunta a continuación.

  • Redes de contenedores Docker

Lectura sugerida:

  • Explicación de los volúmenes de Docker
  • Cómo actualizar automáticamente los contenedores de Docker en ejecución
  • ctop:una herramienta de supervisión de línea de comandos para contenedores de Linux
  • Portainer:la forma más sencilla de administrar Docker
  • PiCluster:una sencilla aplicación de gestión de Docker basada en web
  • Dockly:administrar contenedores Docker desde la terminal

Sobre el autor:

Dhruv Tiwari es un ingeniero de DevOps al que le encanta automatizar cosas, trabajar con Linux a escala y sueña con el día en que los sistemas sean lo suficientemente inteligentes como para no tener que iniciar sesión en una caja de Linux. Viaje de CI/CD desde el código fuente hasta la implementación del código y la producción.


Docker
  1. Obtenga nuestra hoja de trucos de red de Linux

  2. Cómo reiniciar la red en Ubuntu

  3. Instalación de Docker (Ubuntu)

  4. Introducción a Docker

  5. Sin conectividad de red hacia/desde el contenedor Docker CE en CentOS 8

Redes definidas por software (SDN) explicadas para principiantes

Explicación de los volúmenes de Docker con ejemplos

Aprenda diferentes opciones de red en VirtualBox

Poniendo una Lupa a Docker con Docker Inspect

Cómo obtener la dirección IP del contenedor Docker

Cómo configurar espacios de nombres de red en contenedores Docker