栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Docker(五)--Docker网络--源生网络和定义网络

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker(五)--Docker网络--源生网络和定义网络

 一、源生网络

我们先把server1上的harbor仓库down掉,然后查看网络:

1.1 Docker 自带的三种网络模型

 

1.1.1 docker 的网桥---bridge

先安装网桥工具:

 此时我们启动一个容器:

 可以查看容器的网络:

容器网络veth1c... 以桥接的形式连接到了我们的宿主机网络docker0上。 

从火墙策略可以看出172.17.0 时所有容器的地址,172.17.0.1是容器网关,所有容器的IP地址是在此网段内以递增的方式动态分配的。如果容器停止,那么占用的IP就会被释放出来分配给其他容器。由于此种机制,容器重启之后和原来的IP地址是不一样的,

但是此种机制有一个问题:没有公有IP,即外部无法访问内部网络。 但是容器通过宿主机的NAT规则后可以访问外网。容器通过虚拟网卡将数据包传给docker0网桥,再由Linux内核,数据包路由到eth0出去。

1.1.2 host网络模型

我们使用host网络模型再启动一个容器:

使用此种模型不会新建网卡,我们在已经开启的容器的demo2中,开启一个交互式终端:

进入容器查看网络发现和宿主机一模一样: 

 所以现在直接访问宿主机的IP地址就能访问到这个容器。

host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

删掉容器:

测试:

直接访问虚拟机IP即可访问到容器。

1.1.3 none 网络模型

利用none网络启一个容器:

当没有必要连接外部网络时可以使用此网络模型。

容器之间的隔离

所有开启的容器都有一个Pid,就相当于主机的一个进程。

 容器的6个命名空间:

不在这六个命名空间的进程或者变量是没有做隔离的,即各个容器包括宿主机之间是共享的。 

二、 自定义网络模型

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

2.2.1 bridge驱动

新建网络和原有bridge网络区别为自定义网络有DNS解析。我们发现容器之间ping IP能ping通,ping 主机名ping不同:

 

使用自定义网络新建容器:

 使用docker inspect 查看详细IP信息:

使用自定义网络创建容器并开启终端:

发现ping主机名能直接ping通。

停掉demo1,再创建nginx容器demo2:

再将demo1启动起来:

这么做的目的是为了释放原来demo1的IP,原来的IP为172.18.0.2 ,将此IP释放出来同时启动demo2时,0.2的IP就会被分配给demo2,demo1再次启动时会被分配给后面的地址。

 可以看到demo1变成了0.3,demo2变成了0.2。

2.2.2 指定网关和子网

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

删除之前的环境:
 

指定子网以及网关:

 

此时我们创建容器就可以指定IP了:

2.2.3 不同网段的容器通信

 在此之上,我们再创建一个网络和相应的容器:

注:此种情况下,这两个不同网段的容器之间是不相通的。使用iptables -L 也可以看到所有的请求是被DROP掉的。 

 

怎么使两个不同网段下的容器互通呢?

给我们刚刚开的终端加一块网卡:

 此时再ping就能ping通了:

 就相当于给容器加一块不同网段的网卡来连接不同的网络:

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号