Docker pasa de la comprensión de la práctica a los principios subyacentes (8) | Docker Network

Insertar descripción de la imagen aquí

Prefacio

¡Así que el blogger aquí tiene algunas columnas llenas de información útil!

El primero es un resumen de los blogs de alta calidad del blogger. Los blogs de esta columna están todos escritos por el blogger con el mayor cuidado. Están llenos de información útil. Espero que sea útil para todos.

Luego está la columna a la que el blogger dedica más tiempo recientemente, "Docker desde la realización hasta la práctica y los principios subyacentes", ¡espero que todos le presten más atención!


Capítulo 8 - Red

1. ¿Por qué Docker necesita la red?

Referencia: clase de empleo de bits

La red del contenedor está aislada del host y de otros contenedores de forma predeterminada, pero al mismo tiempo también debemos considerar los siguientes problemas, como

  • Cómo se comunican varios contenedores entre sí
  • ¿Cómo se comunican los contenedores y los hosts?
  • ¿Cómo se comunican los contenedores con los hosts externos?
  • Algunas aplicaciones de red (como nginx, aplicaciones web, bases de datos, etc.) deben ejecutarse en el contenedor ¿Cómo se debe acceder desde el exterior a las aplicaciones de red que se ejecutan en estos contenedores?
  • ¿Cómo debería un contenedor no querer que su red esté aislada del host y de otros contenedores?
  • Cómo implementar esto cuando el contenedor no necesita ninguna red
  • ¿Cómo deberían los contenedores requerir redes más personalizadas (como personalizar redes de clústeres especiales y personalizar LAN entre contenedores)?

Todos los problemas anteriores requieren una gestión razonable de la red de contenedores para resolverlos, lo que refleja la importancia de la gestión de la red de contenedores.

2. Modelo de arquitectura de red Docker

CNM

Insertar descripción de la imagen aquí

La especificación de diseño adoptada por la arquitectura de red Docker es CNM (Container Network Model). CNM especifica los componentes básicos de la red Docker: Sandbox, Endpoint y Network.

3. Tipos de redes Docker comunes

3.1 red puente

El controlador del puente creará un puente de Linux en el host administrado por Docker. De forma predeterminada, los contenedores en el puente pueden comunicarse entre sí. El acceso a contenedores externos también se puede lograr mediante la configuración del controlador de puente. El controlador de red predeterminado para contenedores Docker. La red puenteada es la mejor opción cuando necesitamos que varios contenedores se comuniquen en el mismo host Docker.

3.2 red anfitriona

Para contenedores independientes, elimine el aislamiento de red entre el contenedor y el host Docker y use la red del host directamente. La red de host es la mejor opción cuando la pila de red no debe estar aislada del host de Docker, pero desea que los demás recursos del contenedor estén aislados.

3.3 red de contenedores

Este modo especifica que el contenedor recién creado comparte una red con un contenedor existente, en lugar de con el host. El contenedor recién creado no creará su propia tarjeta de red ni configurará su propia IP, sino que compartirá la IP, el puerto, etc. con un contenedor específico. Además de la red, los dos contenedores todavía están aislados de otros aspectos como el sistema de archivos y lista de procesos. Los procesos de los dos contenedores pueden comunicarse a través del dispositivo de tarjeta de red lo.

3.4 ninguna red

El contenedor Docker tiene su propio espacio de nombres de red, pero no se realiza ninguna configuración de red para el contenedor Docker. En otras palabras, este contenedor Docker no tiene tarjeta de red, IP, enrutamiento y otra información. Los contenedores están completamente aislados de la red.

3.5 red superpuesta

Una red entre Docker Daemon construida con la ayuda del módulo de clúster Docker Docker Swarm. Conecte varios demonios Docker entre sí para permitir que los servicios del clúster se comuniquen entre sí. Las redes superpuestas son la mejor opción cuando necesitamos que los contenedores se ejecuten en diferentes hosts Docker para comunicarse, o cuando varias aplicaciones trabajan juntas mediante servicios de clúster.

4. Explicación detallada de los comandos.

4.1 Lista de comandos

Orden Función
docker network create Crear red
docker network connect Conectar red
docker network disconnect Desconectarse de la red
docker network ls listar redes
docker network prune Eliminar redes no utilizadas
docker network inspect Ver detalles de la red
docker network rm Eliminar 1 o más redes

4.2docker network create

Insertar descripción de la imagen aquí

Viene con tres redes tan pronto como se crea.

docker network create [OPTIONS] NETWORK

parámetro clave.

-d, --driver : 网络驱动
--gateway : 网关地址
--subnet : 表示网段的 CIDR 格式的子网
--ipv6 : 启用 ipv6

Insertar descripción de la imagen aquí

El valor predeterminado es bridgeel controlador.

4.3docker network inspect

docker network inspect [OPTIONS] NETWORK [NETWORK...]

parámetro

-f, --format : 指定格式

Insertar descripción de la imagen aquí

[
    {
    
    
        "Name": "bridge",
        "Id": "c628e2b0d777ee8674106b75d24bc0ba856047abced6d2ad84e101611461092a",
        "Created": "2023-09-01T20:57:06.849887313+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
    
    
            "Driver": "default",
            "Options": null,
            "Config": [
                {
    
    
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
    
    
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
    
    },
        "Options": {
    
    
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {
    
    }
    }
]

4.4docker network connect

para conectar el contenedor a la red. Los contenedores se pueden conectar por nombre o ID. Una vez conectados, los contenedores pueden comunicarse con otros contenedores en la misma red.

docker network connect [OPTIONS] NETWORK CONTAINER

parámetro clave.

--ip : 指定 IP 地址
--ip6 : 指定 IPv6 地址

Práctica.

Inicie un contenedor y verifique su IP.

Insertar descripción de la imagen aquí

Conéctate a Internet ifconfigy podrás verlo.

Insertar descripción de la imagen aquí

4.5docker network disconnect

docker network disconnect [OPTIONS] NETWORK CONTAINER

parámetro.

-f : 强制退出

Insertar descripción de la imagen aquí

4.6docker network prune

Eliminar redes no utilizadas.

docker network prune [OPTIONS]

parámetro.

-f , --force : 不提示

4.7docker network rm

Eliminar una o más redes.

docker network rm NETWORK [NETWORK...]

parámetro.

-f : 强制退出

4.8docker network ls

Atraviesa todas las redes.

-f, --filter : 指定过滤条件
--format : 指定格式
--no-trunc : 不截断
-q, --quiet : 仅仅显示 id

5. Red de puente Docker

5.1 Explicación detallada de la red puente

5.1.1 ¿Qué es la red puente?

La red Docker Bridge utiliza un controlador de puente integrado, y el controlador de puente subyacente utiliza la tecnología de puente de Linux en el kernel de Linux. En lo que respecta a la red, la red puente es un dispositivo de capa de enlace que reenvía tráfico entre segmentos de red, y el puente puede ser un dispositivo de hardware o un dispositivo de software que se ejecuta en el kernel del host; en lo que respecta a Docker, el puente La red utiliza el software bridge docker0, que permite que los contenedores conectados a la misma red puente se comuniquen mientras proporciona aislamiento de los contenedores que no están conectados a esa red puente.

5.1.2 Caso de operación uno

Inicie ambas imágenes.

Insertar descripción de la imagen aquí

Segundo en el primer contenedor , primero pingen el segundo contenedor .ping

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Estas dos son las direcciones IP de los dos contenedores.

Insertar descripción de la imagen aquí

El primero hizo ping al segundo y el ping fue exitoso.

Insertar descripción de la imagen aquí

El segundo hizo ping al primero, y éste también hizo ping.

5.1.3 Caso de operación 2

De forma predeterminada, como se muestra en el caso de operación uno. Los contenedores que creemos por defecto estarán conectados a docker0este bridge. bridgePero también podemos comunicarnos usando nuestros propios personalizados .

Primero crea una red.

Insertar descripción de la imagen aquí

Echa un vistazo a la información sobre este puente.

Insertar descripción de la imagen aquí

Inicie dos contenedores.

Insertar descripción de la imagen aquí

Puede hacer ping.

Insertar descripción de la imagen aquí

5.2 resolución DNS

La red puente personalizada de Docker admite la resolución de nombres de dominio a través del servicio DNS de Docker, lo que significa que podemos usar directamente los nombres de los contenedores para comunicarnos porque el servicio DNS puede resolver la asignación de nombres de contenedores a direcciones IP, pero la red puente predeterminada no admite DNS. .

El experimento es muy simple, solo use el nombre del contenedor ping, los demás pasos son los mismos que en el punto 5.1.

en conclusión:

  • El puente predeterminado no admite este DNS
  • Los puentes personalizados admiten DNS

5.3 Exposición y reenvío de puertos

Primero inicie un contenedor nginx.

Insertar descripción de la imagen aquí

6. Red de host Docker

6.1 ¿Qué es una red host?

Insertar descripción de la imagen aquí

Esto significa que no se necesita ninguna tarjeta de red virtual, se puede conectar directamente a la tarjeta de red del host y utilizarla directamente.

6.2 Casos de operación

Cree dos contenedores, cada uno con diferentes tipos de red.

docker run -itd --name b1 busybox:1.36.0

Esto utiliza la red puente de forma predeterminada.

docker run -itd --name b2 --network host busybox:1.36.0 

Esto especifica la red del host.

Insertar descripción de la imagen aquí

Vea las diferencias entre estas dos redes de contenedores por separado.

Vemos la información de estas dos redes por separado.

Insertar descripción de la imagen aquí

En el primer contenedor sólo se encontraron dos.

Insertar descripción de la imagen aquí

Se pueden encontrar muchos en el segundo contenedor, después de todo, el segundo contenedor está conectado directamente a la tarjeta de red del host.

7. Red de contenedores Docker

Insertar descripción de la imagen aquí

Este tipo de red también utiliza la tarjeta de red de otra persona, pero utiliza la tarjeta de red de otro contenedor (virtual) en lugar de la tarjeta de red del host.

7.2 Casos de operación

docker run -itd --name b2 --network container:b1 busybox:1.36.0

b1 es el mismo que el anterior y b2 se crea de esta manera.

Insertar descripción de la imagen aquí

Se descubrió que las direcciones IP privadas de los dos son las mismas.

Si b1 se detiene directamente en este momento, ¿qué pasará con b2?

Insertar descripción de la imagen aquí

Descubrí que la dirección IP externa había desaparecido por completo en este momento.

8. Docker Ninguna red

8.1 ninguna introducción a la red

Ninguna red significa que no hay red. El contenedor colgado en esta red no tiene ninguna otra tarjeta de red excepto lo (bucle invertido local).

De todos modos, no hay red.

8.2 Casos de operación

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/Yu_Cblog/article/details/133460662
Recomendado
Clasificación