ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker网络

2021-10-27 19:02:16  阅读:153  来源: 互联网

标签:容器 bridge -- 网络 网卡 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个逻辑网络,彼此隔离.
在这里插入图片描述
在这里插入图片描述
实验:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

标签:容器,bridge,--,网络,网卡,docker
来源: https://blog.csdn.net/m0_49265034/article/details/120960850

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有