Docker网络

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

1.原生网络
查看原生网络docker network ls
在这里插入图片描述

自动生成桥接docker0 ip addr show docker0在这里插入图片描述

安装查看桥街工具yum install -y bridge-utilsbrctl show在这里插入图片描述

查看docker0桥接brctl show docker0
在这里插入图片描述

启动容器会生成虚拟网卡,自动分配ip

在这里插入图片描述

删除容器,虚拟网卡释放

在这里插入图片描述

–network host 表示虚拟机与宿主机同时使用IP和端口。不会生成虚拟网卡。
在这里插入图片描述

查看已经启动的nginx80端口
在这里插入图片描述

–network none指定关闭容器的网路功能,只留下回环接口。
在这里插入图片描述

当容器停掉时,资源会释放,重新启动按照启动顺序分配动态ip
docker run -d --name demo1 nginx
docker run -d --name demo2 nginx
在这里插入图片描述

docker inspect demo1

在这里插入图片描述

docker inspect demo2

在这里插入图片描述

2.自定义网络
自定义网络网桥mynet1

docker network create net1

在这里插入图片描述

使用自定义桥接拉起容器demo1,镜像为nginx,查看配置IP
docker run -d --name demo1 --network net1 nginx

再次使用自定义桥接拉起容器centos,docker run -it --rm --network net1 centos在这里插入图片描述

自定义网段和ip

docker network create --subnet 172.10.0.0/24 --gateway 172.10.0.1 mynet1
docker inspect mynet1
在这里插入图片描述

容器添加双网卡实现彼此不同网段通信

按照之前的操作,不同网桥分配的IP网段是不同的,所以彼此之间也不能通信。
创建两个网卡mynet1、mynet2

docker network create --subnet 172.18.0.0/24 --gateway 172.18.0.1 net1
docker network create --subnet 172.19.0.0/24 --gateway 172.19.0.1 net2

使用net1网卡,拉起容器nginx
docker run -d --name nginx --network net1 --ip 172.18.0.10 nginx

使用net2拉起容器centos,查看分配的ip
docker run -it --rm --network mynet1 busybox在这里插入图片描述

为添加第二个网卡
docker network connect net2 nginx
再次打开后台的容器,发现可以ping通nginx在这里插入图片描述

3.容器通信
从docker1.10版本开始,内嵌了DNS server,自带DNS解析功能。
在容器创建时使用–network=container:v1指定
处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。
在这里插入图片描述

外网访问容器用到了docker-proxy和iptables DNAT
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器或容器之间的访问是docker-proxy实现
在这里插入图片描述

4.跨主机容器网络–macvlan

docker原生的overlay和macvlan
第三方的flannel、weave、calico
众多网络方案是如何与docker集成在一起的
libnetwork docker容器网络库
CNM (Container Network Model)这个模型对容器网络进行了抽象
CNM分三类组件
Sandbox:容器网络栈,包含容器接口、dns、路由表。(namespace)
Endpoint:作用是将sandbox接入network (veth pair)
Network:包含一组endpoint,同一network的endpoint可以通信
在这里插入图片描述

Linux kernel提供的一种网卡虚拟化技术。无需Linux bridge,直接使用物理接口,性能极好。

打开网卡混杂模式在这里插入图片描述

使用macvlan 创建网卡net3,-o指定物理网卡
docker network create -d macvlan --subnet 172.30.0.0/24 --gateway 172.30.0.1 -o parent=eth0 net1

查看net3信息docker network inspect net3
在这里插入图片描述

使用net3拉起busybox容器,指定ipdocker run -it --rm --network macvlan1 --ip 172.30.0.10 centos

server2虚拟机与server1操作相同

在这里插入图片描述

docker network create -d macvlan --subnet 172.30.0.0/24 --gateway 172.30.0.1 -o parent=eth1 net3
docker run -it --rm --name centos --network net3 --ip 172.30.0.11 centos
server1中可以ping通。
在这里插入图片描述

macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
vlan可以将物理二层网络划分为4096个逻辑网络,彼此隔离.
使用vlan子接口,-o parent=eth1.1

docker network create -d macvlan --subnet 172.21.0.0/24 --gateway 172.21.0.1 -o parent=eth1.1 net4在这里插入图片描述

server2操作与server1相同,分别打开一个终端,可以ping通。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值