ICode9

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

Docker(六)--docker网络--单机与跨主机(macvlan)容器通信

2022-01-12 19:02:03  阅读:349  来源: 互联网

标签:容器 -- 网络 macvlan link Docker docker


1.单机容器通信

1.1 DNS 

 

容器之间除了使用ip通信外,还可以使用容器名称通信。
docker 1.10开始,内嵌了一个DNS server。
dns解析功能必须在自定义网络中使用。
启动容器时使用 --name 参数指定容器名称。

 1.2 Joined容器(类似于host模式) 

 

- Joined容器一种较为特别的网络模式。
- 在容器创建时使用--network=container:vm1指定。(vm1指定的是运行的容器名)
- 处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。

 

 

 

 

 

处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。

 

 1.3 link

 

-   --link 可以用来链接2个容器。
	--link的格式:
	--link <name or id>:alias
	name和id是源容器的name和id,alias是源容器在link下的别名。
[root@server2 ~]# docker run -d --name demo nginx
[root@server2 ~]# docker run -it --link demo:nginx busybox  ##使用link可以查看demo上的数据,也会自动做解析。为busybox自动分配ip

查看hosts解析 

 

 

有环境变量 

 

 

1.4  容器如何访问外网是通过iptables的SNAT实现的 

 

 

- 需要打开内核路由功能,即forward=1
容器通过真机内核进行地址伪装通信

 

 

1.5 外网如何访问容器 

 

- 外网如何访问容器
	- 端口映射
	- -p 选项指定映射端口
 
- 外网访问容器用到了docker-proxy和iptables DNAT
	宿主机访问本机容器使用的是iptables DNAT
	外部主机访问容器或容器之间的访问是docker-proxy实现(删除docker-proxy只能通过直接访问ip)
 
- proxy和DNAT只要存在一种就可以进行通讯,是一种双冗余设置,localhost使用docker-proxy转发

 

[root@server2 ~]# docker run -d --rm -p 80:80 nginx  ##端口映射
[root@server2 ~]# netstat -antlp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6394/docker-proxy 

 

 

  

1.5.1 删除链DOCKER 

 

删除iptables那么就通过proxy来访问 

 

1.5.2 删除docker-proxy 

同时关闭无法通信

 

 

iptables开着,杀掉proyx也可以访问。 

 

 

2.跨主机容器网络(macvlan) 

2.1 理论

 

- 跨主机网络解决方案
	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可以通信。

2.2 macvlan网络方案实现

- Linux kernel提供的一种网卡虚拟化技术。(内核自带)
	无需Linux bridge,直接使用物理接口,性能极好。
- 下面步骤的操作在截图中
	- 在两台docker主机上各添加一块网卡,打开网卡混杂模式:
	- 
	- 在两台docker主机上各创建macvlan网络:
	- 
	- macvlan网络结构分析:
		没有新建linux bridge
		容器的接口直接与主机网卡连接,无需NAT或端口映射。
		[root@server2 ~]# brctl show
			bridge name	bridge id		STP enabled	interfaces
			br-283cf1fc96c1		8000.02426d0e4f33	no		
			docker0		8000.024257e101e8	no		
 
 
	- macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
	- vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094。
 
	- macvlan网络间的隔离和连通
		macvlan网络在二层上是隔离的,所以不同macvlan网络的容器是不能通信的。
		可以在三层上通过网关将macvlan网络连通起来。
		docker本身不做任何限制,像传统vlan网络那样管理即可。

2.2.1 前期设置,设置俩个网卡 

      server1和server2都添加成俩个网卡 

 

 

 

 

 2.2.2 实现不同主机之间通信 

##server1和server2同样的操作
 
[root@server1 ~]# ip link set up eth1
[root@server1 ~]# ip link set eth1 promisc on  ##打开混杂模式PROMISC
[root@server1 ~]# ip addr show  eth1  
36: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:64:dd:fd brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5054:ff:fe64:ddfd/64 scope link 
       valid_lft forever preferred_lft forever
 
[root@server1 ~]# docker network  create -d macvlan --subnet 10.0.0.0/24 --gateway=10.0.0.1 -o parent=eth1 macvlan1
 ##使用eth1网卡
[root@server1 ~]# docker inspect  mac_net1 | grep "parent"
            "parent": "eth1"  
 
[root@server1 ~]# docker run -it --rm --network macvlan1 --ip 10.0.0.10 busybox

 

 

不设定IP时容器会自动获得ip会冲突 

 

 

设定IP 

 

 

2.2.3 两不同网段的容器之间相互通信 

 

 

 

设定IP为192网段 

 

 

demo1位192网段 

 

demo2为10网段  

 

给含有192网段的demo3添加一个10的network  

 

3.docker network子命令 

- docker network子命令
	connect		连接容器到指定网络
	create			创建网络
	disconnect	断开容器与指定网络的连接
	inspect		显示指定网络的详细信息
	ls			显示所有网络
	rm			删除网络

标签:容器,--,网络,macvlan,link,Docker,docker
来源: https://blog.csdn.net/uikotygiug/article/details/122459385

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

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

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

ICode9版权所有