Docker(五)--Docker网络--源生网络、自定义网络


一、源生网络

我们先把server7上的harbor仓库down掉,然后查看网络,可以看到Docker 自带的三种网络模型
在这里插入图片描述

1.docker的网桥—bridge

默认使用桥接模式,桥接到docker0上
在这里插入图片描述
此时我们启动一个容器、安装网桥工具 :

[root@server7 ~]# docker run -d --name demo  nginx
[root@server7 ~]# yum install -y bridge-utils

[root@server7 ~]# brctl show                          ##可以查看容器的网络
bridge name     bridge id               STP enabled     interfaces
docker0         8000.0242ea04cb8d       no              veth6725905

在这里插入图片描述
根据下图:容器网络veth9b8f753以桥接的形式连接到了我们的宿主机网络docker0上。
在这里插入图片描述

从火墙策略可以看出172.17.0 是所有容器的地址,172.17.0.1是容器网关,所有容器的IP地址是在此网段内以递增的方式动态分配的。如果容器停止,那么占用的IP就会被释放出来分配给其他容器。由于此种机制,容器重启之后和原来的IP地址是不一样的
在这里插入图片描述
但是此种机制有一个问题:没有公有IP,即外部无法访问内部网络。 但是容器通过宿主机的NAT规则(网络地址转换)后可以访问外网。容器通过虚拟网卡将数据包传给docker0网桥,再由Linux内核,数据包路由到eth0出去。
在这里插入图片描述

2.host网络模型–共享宿主机网络栈

我们使用host网络模型再启动一个容器,使用此种模型不会新建网卡,我们在已经开启的容器的demo2中,开启一个交互式终端:
进入容器查看网络发现和宿主机一模一样, 所以现在直接访问宿主机的IP地址就能访问到这个容器。
可以ping通192.168.117.18主机
[root@server7 ~]# docker run -it --rm --network host --name demo2 busybox
在这里插入图片描述
host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
在这里插入图片描述
测试:
删掉多余容器,直接访问虚拟机IP即可访问到容器。(以前为实验有端口访问)
在这里插入图片描述

3.none 网络模型–只用回环接口

none禁用网络,只用回环接口,当没有必要连接外部网络时可以使用此网络模型。
[root@server7 ~]# docker run -it --rm --network none busybox
在这里插入图片描述

容器之间的隔离
所有开启的容器都有一个Pid,就相当于主机的一个进程。
在这里插入图片描述
容器的6个命名空间:
在这里插入图片描述
注意:不在这六个命名空间的进程或者变量是没有做隔离的,即各个容器包括宿主机之间是共享的。

二、自定义网络模型

自定义网络模式,docker提供了三种自定义网络驱动: bridge overlay macvlan

1.bridge驱动

[root@server7 ~]# docker network create my_net1
在这里插入图片描述
新建网络和原有bridge网络区别为自定义网络有DNS解析。我们发现容器之间ping IP能ping通,ping 主机名ping不通:
在这里插入图片描述
使用自定义网络新建容器:
在这里插入图片描述
用docker inspect demo查看详细IP信息:
在这里插入图片描述
使用自定义网络创建容器并开启终端:发现ping主机名能直接ping通
在这里插入图片描述
停掉demo,再创建nginx容器demo1:
在这里插入图片描述在这里插入图片描述
再将demo启动起来:
在这里插入图片描述
这么做的目的是为了释放原来demo的IP,原来的IP为172.18.0.2 ,将此IP释放出来同时启动demo1时,0.2的IP就会被分配给demo1,demo再次启动时会被分配给后面的地址。
在这里插入图片描述
可以看到demo变成了0.3,demo1变成了0.2。

2.指定网关和子网

使用bridge自定义网络时,我们也可以手动指定网关和子网,在创建时指定参数:–subnet 、–gateway

删除之前的环境:
在这里插入图片描述
指定子网以及网关:
在这里插入图片描述

3.相同网段的容器通信、自定义网络其中内嵌dns解析

再次创建my_net1用于实验
在这里插入图片描述
可以ping通容器名
在这里插入图片描述

4.不同网段的容器通信

web1
[root@server7 ~]# docker run -d --name web1 --network my_net1 nginx

在这里插入图片描述

不同网络之间是被隔离的,默认不能通信
在这里插入图片描述
不同网络之间的通信需要附加虚拟网卡
在这里插入图片描述
ctrl+pq 快捷键退出容器终端

并把demo接入到my_net1网络:相当于给容器加一块不同网段的网卡来连接不同的网络
[root@server7 ~]# docker network connect my_net1 demo
再进入容器,可ping通
[root@server7 ~]# docker attach demo
/ # ping web1
PING web1 (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.079 ms
在这里插入图片描述
就相当于给容器加一块不同网段的网卡来连接不同的网络:

在这里插入图片描述
查看容器的网关:
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值