Docker网络模式
什么是 Docker Network
Docker Network 是 Docker 中用于管理容器(Docker Container)之间通信的功能。它允许在 Docker 主机上创建一个或多个网络,并将容器连接到这些网络中,从而使容器能够相互通信或者与外部网络通信。
Docker Network 解决的问题
-
容期间的互联、通讯、端口映射。
-
容器IP变动,可通过服务名通信而不受到影响。
容器的IP会随着容器销毁、服务的崩溃等情况发生变化,可以通过create创建新的网络,指定对应的容器活动,加固网络。
Docker Network 常用模式
- 🌉 桥接模式(Bridge)默认模式
Docker 容器连接到名为 docker0 的虚拟网络桥接设备,Docker 在容器和主机之间创建了一个 NAT 网络。容器之间可以通过容器名称直接进行通信,但容器不直接与主机通信,需要通过端口映射将容器端口暴露到主机上。
- 🖥️ 主机模式(Host)
Docker 容器与主机共享网络命名空间,容器中的网络接口与主机上的网络接口相同。这意味着容器可以访问主机上的所有网络接口,包括 localhost,但可能导致端口冲突的问题。
- 🍵 容器模式(Container)
Docker 容器与指定的另一个容器共享网络命名空间,这意味着这两个容器可以直接相互通信,而不需要通过 Docker 网络进行路由。
- 🍵 无网络模式(None)
容器没有网络接口,只能通过进入容器手动的方式来操作,没有网卡、IP、路由。
常用的 Docker Network 命令
1:🙋♂️ Docker已注的册网络模式列表
docker network ls NETWORK ID NAME DRIVER SCOPE d27a7c5ac47e bridge bridge local d0b554868434 host host local 9446678ce6df none null local
2:🙋♂️ 创建新的网络
# 创建一个名为b_xxx的网络,默认bridge模式 docker network create b_xxx # 启动容器 docker run -d -p 8081:8080 --network=b_xxx --name=t1 b_xxx docker run -d -p 8082:8080 --network=b_xxx --name=t2 b_xxx
3:🙋♂️ 容器连接到指定网络
docker network connect <network_name> <container_name_or_id>
4:🙋♂️ 删除已经创建的网络模式
# 9446678ce6df 是已创建的网络模式ID docker network rm 9446678ce6df
5:🙋♂️ 容器从指定网络断开
docker network disconnect my_network my_container
6:🙋♂️ 查看容器所使用网络模式
# 641a0ed40504 是容器ID,Networks字段下,罗列了网络相关信息 docker inspect 641a0ed40504 { "Id": "641a0ed4050434b2864b3ea83ca11444fbf1592f424514e8072052f52bb50b17", "NetworkSettings": { "Ports": { "3000/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "1000" } ] }, "Networks": { "mysql": { "IPAMConfig": null, "Links": null, "Aliases": [ "641a0ed40504" ], "NetworkID": "bd1fc035a76cc9509ad5a9f24300a8d2fdd9226dc80f160e54208a94dad45440", "EndpointID": "94c37b361447c661c30bc9a61e19bc7010dcdb5199a37f1e7a5647b54a811c7c", "Gateway": "172.19.0.1", "IPAddress": "172.19.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:13:00:03", "DriverOpts": null } } } }