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
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
Viene con tres redes tan pronto como se crea.
docker network create [OPTIONS] NETWORK
parámetro clave.
-d, --driver : 网络驱动
--gateway : 网关地址
--subnet : 表示网段的 CIDR 格式的子网
--ipv6 : 启用 ipv6
El valor predeterminado es bridge
el controlador.
4.3docker network inspect
docker network inspect [OPTIONS] NETWORK [NETWORK...]
parámetro
-f, --format : 指定格式
[
{
"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.
Conéctate a Internet ifconfig
y podrás verlo.
4.5docker network disconnect
docker network disconnect [OPTIONS] NETWORK CONTAINER
parámetro.
-f : 强制退出
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.
Segundo en el primer contenedor , primero ping
en el segundo contenedor .ping
Estas dos son las direcciones IP de los dos contenedores.
El primero hizo ping al segundo y el ping fue exitoso.
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 docker0
este bridge
. bridge
Pero también podemos comunicarnos usando nuestros propios personalizados .
Primero crea una red.
Echa un vistazo a la información sobre este puente.
Inicie dos contenedores.
Puede hacer ping.
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.
6. Red de host Docker
6.1 ¿Qué es una red host?
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.
Vea las diferencias entre estas dos redes de contenedores por separado.
Vemos la información de estas dos redes por separado.
En el primer contenedor sólo se encontraron dos.
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
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.
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?
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.