docker网络

docker网络

原理

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

四种网络模式

host模式

host容器和另一个容器共享network namespace,也不会虚拟出自己的网卡,配置ip等,

host容器是直接使用宿主机的ip地址与外界通信,容器的服务端口也是使用宿主机的端口。这样可以让容器的网络性能较好,但host上已使用的端口无法再使用,网络隔离性较差。

container模式

这个模式中新创的容器会和已经存在的容器共享一个network namespace。新创建的容器也不会创建自己的网卡,配置自己的ip,而是和指定容器共享ip,端口范围等。两个容器通过lo网卡设备通信

none模式

这个模式的容器拥有自己的network namespace,但是并不为容器进行网络配置,即没有网卡、IP、路由等信息,但可以自己为其添加。这种容器只有lo网卡,无法联网,封闭的网络环境可以很好的保证容器的安全性。

bridge模式

ocker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,docker将veth pair设备的一端放在新创建的容器中,并命名eth0(容器的网卡),另一端放在主机中,以veth xxx这类名字命名,并将这个网络设备加入docker0网桥中。

bridge模式是docker的默认网络模式,不指定时默认选择该模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能,可以使用iptables -t nat -vnL查看

查看现有的网络类型

docker network ls
在这里插入图片描述

创建新的网络

docker network create --subnet=172.18.0.0/16 mybridge1
在这里插入图片描述

创建容器时的网络

docker run -it --name ph1 --net mybridge1 --ip 172.18.0.10 centos /bin/bash #名称为ph1,使用mybridge1网桥,指定地址172.18.0.10

yum install -y net-tools

ifconfig
在这里插入图片描述

docker run -it --name ph4 --ip 172.168.0.10 centos /bin/bash #不指定网络类型,默认使用bridge,使用默认的网桥的容器ip地址,无法自己指定

tos /bin/bash #不指定网络类型,默认使用bridge,使用默认的网桥的容器ip地址,无法自己指定
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值