docker网络

一、Docker原生网络

docker安装后会自动创建3种网络:bridge、host、none
在这里插入图片描述
docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。
在这里插入图片描述
bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。
容器通过宿主机的NAT规则后可以访问外网。
在这里插入图片描述
host网络模式需要在容器创建时指定 --network=host

docker run -d --name demo --network host nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
在这里插入图片描述
none模式是指禁用网络功能,只有lo接口,在容器创建时使用
–network=none指定。

docker run -d --network none nginx

在这里插入图片描述
访问本机被拒绝
在这里插入图片描述

二、Docker自定义网络

自定义网络模式,docker提供了三种自定义网络驱动:
bridge
overlay
macvlan
bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,
overlay和macvlan是用于创建跨主机网络。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。
创建自定义网桥:

docker network create -d bridge mynet1

在这里插入图片描述

docker network inspect mynet1

在这里插入图片描述
在这里插入图片描述
也可以自定义网段

docker network create -d bridge --subnet 10.0.0.1/24 --gateway 10.0.0.1 mynet1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
清空docker ps
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用–ip参数可以指定容器ip地址,但必须是在自定义网桥上,默认的bridge模式不支持,同一网桥上的容器是可以互通的。
在这里插入图片描述

ip a

在这里插入图片描述
那么如何使两个不同网桥的容器通信呢:
使用 docker network connect命令为vm1添加一块my_net2 的网卡。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Docker容器通信

容器之间除了使用ip通信外,还可以使用容器名称通信。

  • docker 1.10开始,内嵌了一个DNS server。
  • dns解析功能必须在自定义网络中使用。
  • 启动容器时使用 --name 参数指定容器名称。
    在这里插入图片描述
    在这里插入图片描述
    Joined容器一种较为特别的网络模式。
    在容器创建时使用–network=container:web1指定。(web1指定的是运行的容器名)
    在这里插入图片描述
    –link 可以用来链接2个容器。
--link的格式:
--link <name or id>:alias

name和id是源容器的name和id,alias是源容器在link下的别名。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
外网如何访问容器:
通过端口映射外网可以访问到容器

-p 选项指定映射端口

在这里插入图片描述

iptables -t nat -nL

在这里插入图片描述
外网访问server11主机,访问成功。
在这里插入图片描述
外网访问容器用到了docker-proxy和iptables DNAT
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器或容器之间的访问是docker-proxy实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时POSTROUTING中还有172.17.0.0/16的路由在这里插入图片描述
真机联网,进入任一容器ping外网,发现可以通信
在这里插入图片描述
删除172.17.0.0/16的路由

iptables -t nat -D POSTROUTING 1	#删除路由POSTROUTING的第一条
iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -j MASQUERADE	#添加路由到POSTROUTING中
iptables -t nat -nL	#查看

在这里插入图片描述
再次再容器中ping外网,发现网络不通
在这里插入图片描述
将删除的路由添加回来并检查
在这里插入图片描述
再次进入容器ping外网,发现可以通信
在这里插入图片描述

四、跨主机容器网络

跨主机网络解决方案
docker原生的overlay和macvlan
第三方的flannel、weave、calico
众多网络方案是如何与docker集成在一起的
libnetwork docker容器网络库
CNM (Container Network Model)这个模型对容器网络进行了抽象
准备第二台主机,安装docker-ce并配置好docker专属的软件仓库

实验准备:

server101:
cd /etc/yum.repos.d
scp docker.repo server102:/etc/yum.repos.d
cd /etc/sysctl.d
scp docker.conf server102:/etc/sysctl.d
server102:
yum install -y docker-ce等众多软件\
systemctl start docker 
docker info
sysctl --systemd
systemctl enable --now docker 

为server101和server102添加一块网卡,同时需要修改网卡配置文件,之后检查

virt-manager
关闭server101,添加网卡后重启
cd /etc/sysconfig/network-scripts
cp ifcfg-eth0 icfg-eth1
ip addr show eth1

macvlan网络方案实现

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

在两台docker主机上各添加一块网卡,打开网卡混杂模式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在两台docker主机上各创建macvlan网络:
在这里插入图片描述
在这里插入图片描述

macvlan网络结构分析
没有新建linux bridge
容器的接口直接与主机网卡连接,无需NAT或端口映射。
在这里插入图片描述
macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
vlan可以将物理二层网络划分为4096个逻辑网络,彼此隔离.
在这里插入图片描述
在这里插入图片描述
实验:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值