【Docker】网络通信

                              🎉🎉欢迎来到我的CSDN主页!🎉🎉

                    🏅我是平顶山大师,一个在CSDN分享笔记的博主。📚📚

    🌟推荐给大家我的博客专栏《【Docker】在容器中管理数据》。🎯🎯

                    🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁

一,网络通信介绍:

容器间网络通信是指在同一主机上运行的不同容器之间进行通信。容器可以通过共享同一个网络命名空间(network namespace)来实现直接的网络通信。,或与非 Docker 工作负载通信。

默认情况下,容器启用了网络,它们可以发出 连接。容器没有关于它是哪种网络的信息 附加到,或者它们的对等节点是否也是 Docker 工作负载。一个 容器只能看到一个具有 IP 地址、网关、 路由表、DNS 服务和其他网络详细信息。也就是说,除非 容器使用网络驱动程序。none

安装 Docker 以后,会默认创建三种网络,可以通过 docker network ls 查看

二,网络通信组成

Docker网络模式配置说明表格:

网络模式说明
host容器和宿主机共享Network namespace。容器使用宿主机的IP和端口。
container容器和另外一个容器共享Network namespace。Kubernetes中的Pod就是多个容器共享一个Network namespace。创建的容器不会创建自己的网卡,配置自己的IP,而是与指定的容器共享IP和端口范围。
none容器拥有独立的Network namespace,没有对其进行任何网络设置,如分配veth pair和网桥连接,配置IP等。该模式关闭了容器的网络功能。
bridge默认模式。此模式为每个容器分配和设置IP,并将容器连接到一个名为docker0的虚拟网桥,通过docker0网桥和Iptable nat表配置与宿主机通信。
macvlan无(覆盖网络)。容器没有自己的MAC地址,显示为网络上的物理设备。利用VXLAN实现桥接模式。
overlay无(覆盖网络)。利用VXLAN实现的bridge模式。

2.1bridge模式【桥接网络】

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连 接到这个虚拟网桥上。 虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。 从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。 在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名 为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入 到docker0网桥中。 bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。

查看bridge信息 打开容器 查看docker0网桥 查看容器网络 docker0就像是一个路由器,容器就像是路由器下的设备,它们在同一个网段内,可以互相ping通。

查看bridge信息

docker inspect bridge

打开容器 

docker run -itd --net=bridge --name cname iname

查看docker0网桥 查看容器网络,两种方式:

ip addr

ifconfig

绑定多个端口号(外部访问 设置端口映射 -p参数可以出现多次)

docker run -itd --name bridge05 -p 8082:8080 -p 8083:8080 spring:1.0

容器通信模式:

查看bridge信息

2.2host模式【主机网络】

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

docker run -itd \
--name t2 \
--net host \
tomcat:8.5.20

2.3创建自定义网络(自定义IP)

docker run -it \
--name c2 \
-d centos

c2 ping c3

这个ping成功了

CTRL+c终止

部署一个项目:

1.放入war包

2.建立网络

docker network create --subnet=172.20.0.0/16 mynet

3.建立容器

docker run -it \
--name t1 \
-p 8080:8080 \
-v /soft:/usr/local/tomcat/webapps \
--net mynet \
--ip 172.20.0.100 \
tomcat:8.5.20
 

在mysql中创建一个名为xl的用户,可以进行远程访问命令:grant all on *.* to xl@'%' identified by '123456';

mkdir -p /mysql {conf,data} 创建多级文件夹

重新启动mysql容器

命令:docker restart m1

访问:

三,IP 子网掩码 网关 DNS 端口号

子网掩码:

互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。 IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于 IP地址的寻址操作。 子网掩码是“255.255.255.0”的网络: 最后面一个数字可以在0~255范围内任意变化,因此可以提供256个IP地址。但是实际可用的IP地 址数量是256-2,即254个,因为主机号不能全是“0”或全是“1”。 子网掩码是“255.255.0.0”的网络: 后面两个数字可以在0~255范围内任意变化,可以提供255²个IP地址。但是实际可用的IP地址数量 是255²-2,即65023个。 IP地址的子网掩码设置不是任意的。如果将子网掩码设置过大,也就是说子网范围扩大,那么,根 据子网寻径规则,很可能发往和本地主机不在同一子网内的目标主机的数据,会因为错误的判断而 认为目标主机是在同一子网内,那么,数据包将在本子网内循环,直到超时并抛弃,使数据不能正 确到达目标主机,导致网络传输错误;如果将子网掩码设置得过小,那么就会将本来属于同一子网 内的机器之间的通信当做是跨子网传输,数据包都交给缺省网关处理,这样势必增加缺省网关的负 担,造成网络效率下降。 因此,子网掩码应该根据网络的规模进行设置。如果一个网络的规模不超过254台电脑,采用 “255.255.255.0”作为子网掩码就可以了,现在大多数局域网都不会超过这个数字,因此 “255.255.255.0”是最常用的IP地址子网掩码;假如在一所大学具有1500多台电脑,这种规模的局域网可以使用“255.255.0.0”。

网关:

网关实质上是一个网络通向其他网络的IP地址。 路由器(Windows下叫默认网关,网关就是路由,路由就是网关不要蒙)

计算机的IP地址由两部分组成,一部分为网络标识,一部分为主机标识,同一网段内的计算机网络部分 相同,主机部分不同同时重复出现。 路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。通过设置网 络地址和主机地址,在互相连接的整个网络中保证每台主机的IP地址不会互相重叠,即IP地址具有了唯 一性。

总结:

docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过-p或-P参数来启用,访问容器的时候就通过宿主机IP:容器端口访问容器。网关实质上是一个网络通向其他网络的IP地址。

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值