Prefacio
Durante el tiempo de front-end, mientras usaba Docker, entré en contacto con el conocimiento relevante que requiere la red Docker. Mi comprensión anterior era que puede satisfacer el uso diario. Esta vez, aproveché la oportunidad para aprender más al respecto. , para
el conocimiento de la red Una comprensión más profunda puede no ser tan buena como la de un grandullón que domina Internet.
Tipos de redes Docker y estructuras correspondientes
Se informa que Docker 1.7 y Docker 1.8 tienen 4 tipos de red predeterminados, que son: // None
( predeterminado)/ .Host
Bridge
Container
- viendo
docker network ls
_
Docker creará los siguientes tipos de redes de forma predeterminada. Host
/ /None
Bridge
- Ninguno
--net=none
No se crea ninguna red relacionada, es decir, solo se puede ejecutar dentro del contenedor, el contenedor no realiza virtualización de red y el contenedor no puede comunicarse con el exterior.
- anfitrión
--net=host
Modo host. El contenedor y el host usan la misma red. Por ejemplo, si un proceso en el contenedor usa 8080
un puerto, el host no puede usar este puerto. Viceversa, se aplica el mismo principio.
- puente (predeterminado)
--net=bridge
Cada contenedor realiza la virtualización de la red y se comunica con el host a través del mapeo de puertos.
- envase
--net=container:Name_or_Id
Cuando se inicia un contenedor, no necesita virtualizar su propia red, sino que utiliza la red de otros contenedores.
Modo Puente
Por ejemplo, generalmente Docker usará el segmento de red 172.17.0.0/16 y asignará 172.17.0.1/16 al puente docker0 (puede ver docker0 usando el comando ifconfig en el host, que puede considerarse como la interfaz de administración del puente), utilizado como tarjeta de red virtual en la máquina host). La topología de red en un entorno independiente es la siguiente y la dirección del host es 10.10.0.186/24.
Comandos de red Docker de uso común
- Crear red
docker network create --driver=bridge --subnet=192.168.88.0/24 demo
# driver 网络模式
# subnet 网段 默认网段为172.17.0.0/16
# demo 名称
- Cuando se inicia el contenedor, use la red.
#运行redis容器
docker run -itd --name redis --network mynet --network-alias redis -p 6379:6379 redis
#运行nginx容器
docker run -d --name nginx -p 80:80 --network mynet --network-alias nginx --privileged=true -v /home/wwwroot:/home/wwwroot -v /home/wwwlogs:/home/wwwlogs nginx
- Consultar la red del contenedor.
docker inspect <containerName_or_Id>
# 运行容器;
$ docker run --name=nginx_bridge --net=bridge -p 80:80 -d nginx
9582dbec7981085ab1f159edcc4bf35e2ee8d5a03984d214bce32a30eab4921a
# 查看容器;
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9582dbec7981 nginx "nginx -g 'daemon ..." 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp nginx_bridge
# 查看容器网络;
$ docker inspect 9582dbec7981
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "9e017f5d4724039f24acc8aec634c8d2af3a9024f67585fce0a0d2b3cb470059",
"EndpointID": "81b94c1b57de26f9c6690942cd78689041d6c27a564e079d7b1f603ecc104b3b",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02"
}
}
- Consulta toda la red de la red.
$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "9e017f5d4724039f24acc8aec634c8d2af3a9024f67585fce0a0d2b3cb470059",
"Created": "2017-08-09T23:20:28.061678042-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"Containers": {
"9582dbec7981085ab1f159edcc4bf35e2ee8d5a03984d214bce32a30eab4921a": {
"Name": "nginx_bridge",
"EndpointID": "81b94c1b57de26f9c6690942cd78689041d6c27a564e079d7b1f603ecc104b3b",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"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": {}
}
]
- vincular contenedores relacionados
#1. 运行nginx和docker容器
docker run -itd --name redis -p 6379:6379 redis
docker run -d --name nginx -p 80:80 --privileged=true -v /home/wwwroot:/home/wwwroot -v /home/wwwlogs:/home/wwwlogs nginx
# 2. 链接网络
#加入nginx到mynet网络
[root@localhost /]# docker network connect mynet nginx
#加入redis到mynet网络
[root@localhost /]# docker network connect mynet redis
#查看mynet网络包含的容器,会发现两个容器都加入当前网络了,后面使用ping命令是能够ping通容器名称的。
[root@localhost /]# docker network inspect mynet
# 3. 取消链接网络
#将nginx移除mynet局域网络
docker network disconnect mynet nginx
Referencia
[1] Docker: explicación detallada del modo de red
[2] Explicación detallada y tutorial de la red Docker
[3] Organización de la red Docker
Referencia de mando oficial
Comando padre
Dominio | Descripción |
---|---|
estibador | El comando base para Docker CLI. |
Comandos infantiles
Dominio | Descripción |
---|---|
conexión de red acoplable | Conectar un contenedor a una red |
crear red acoplable | crear una red |
desconexión de la red acoplable | Desconectar un contenedor de una red |
inspeccionar la red acoplable | Mostrar información detallada sobre una o más redes |
red acoplable ls | Listar redes |
poda de red acoplable | Eliminar todas las redes no utilizadas |
sala de red acoplable | Eliminar una o más redes |