Docker网络

Docker 网络

当你开始在项目中使用Docker时,你会发现需要了解很多关于网络的知识。安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

网络模式简介
Host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
Bridge此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
None该模式关闭了容器的网络功能。
Container创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

我们还可以自定义网络

Docker network介绍

Docker 网络命令介绍

在这里插入图片描述

connect           # 命令是用于将docker容器连接到某个网络中,或者与其他容器建联,容器可以使用容器名或者容器ID。

create            # 不指定网络驱动时默认创建的bridge网络

disconnect        # 命令用于断开容器的网络。容器必须运行才能将其与网络断开连接。

inspect			  # 查看网络内部信息

ls				  # 列出所有的网络

prune			  # 命令用于删除所有未使用的网络。未使用的网络是不被任何容器引用的网络。

rm				  # 命令用于删除一个或多个网络。按名称或标识符删除一个或多个网络。 要删除网络,必须要先断开连接到它的任何容器的网络。

在这里插入图片描述

列出Docker 的所有的网络信息

在这里插入图片描述

Bridge 模式

当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。一般Docker会使用172.17.0.0/16这个网段,并将172.17.0.1/16分配给docker0网桥

启动Nginx服务

docker run -d -p 80:80 --name mynginx nginx

查看窗口网络服务

docker inspect mynginx

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "b3bd9726a5e739a3a1b904862c25d3dde91ada092e1b1518881e5e6993d62d18",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "80"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/b3bd9726a5e7",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "d79b21bca9e89d71b3a029d3b2d699653fe4116b82467650e6ad5bf4af4ad234",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "616cfb54870fa17070f2199b1a6764936f3cc28e61d4f8cece629af9c324cf80",
                    "EndpointID": "d79b21bca9e89d71b3a029d3b2d699653fe4116b82467650e6ad5bf4af4ad234",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }

在centos下ping容器内的ip地址

在这里插入图片描述

Docker完成以上网络配置的过程大致是这样的:

(1)在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。

(2)Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0。另一端放在主机中,以veth65f9这样类似的名字命名,并将这个网络设备加入到docker0网桥中,可以通过brctl show命令查看。

(3)从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。

自定义网络

自定义网络命令:docker network create
docker network create --driver bridge --subnet 172.28.0.0/16 --gateway 172.28.0.1 mynet
# 解析:
--driver bridge  # 表示使用桥接模式
--subnet 172.28.0.0/16  # 表示子网ip 可以分配 172.28.0.2 到 172.28.254.254
--gateway 172.28.0.1 # 表示网关
mynet # 表示网络名

在这里插入图片描述

查看自定义网络信息
docker network inspect mynet

在这里插入图片描述

使用自定义网络创建容器
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat

在这里插入图片描述

再次查看,发现自定义网络中已经维护好网络关系

网络测试

在这里插入图片描述

  • 使用自定义网络 ping 容器的 ip 地址和名称都能 ping 通(不使用–link也可以ping通名字)
  • 我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络
  • 好处:不同的集群使用不同的网络,保证集群是安全和健康的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值