Docker网络模式

什么是 Docker Network

Docker Network 是 Docker 中用于管理容器(Docker Container)之间通信的功能。它允许在 Docker 主机上创建一个或多个网络,并将容器连接到这些网络中,从而使容器能够相互通信或者与外部网络通信。

Docker Network 解决的问题

  1. 容期间的互联通讯端口映射

  2. 容器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
            }
        }
    }
}