Docker的部署比较麻烦的地方就是网络, 容器虽然极大的节约了资源,提高了安全性,但是由于每一个容器都是一个独立的环境,其网络也是独立的网络,和其他容器进行通信成了一个难题.
还好针对这个问题,各个公司提出的解决方案也比较多, 比如Pipework、Flannel、Weave、Open vSwitch 都是Docker的网络解决方案.
下面我们学习一下weave 的使用方法, 然后下一篇文章使用weave做一个简单的部署
weave项目地址: https://github.com/weaveworks/weave
weave原理: Weave通过创建虚拟网络使Docker容器能够跨主机通信并能够自动相互发现。
通过weave网络,由多个容器构成的基于微服务架构的应用可以运行在任何地方:主机,多主机,云上或者数据中心。
应用程序使用网络就好像容器是插在同一个网络交换机上一样,不需要配置端口映射,连接等。
在weave网络中,使用应用容器提供的服务可以暴露给外部,而不用管它们运行在何处。类似地,现存的内部系统也可以接受来自于应用容器的请求,而不管容器运行于何处。
简单地说,就是weave创建了一个虚拟网络, 我们只需要把所有的Docer容器加入到该虚拟网络中,各个容器就处于相同的网段, 容器之间就可以自由的相互通信了, 即使真实的容器处于不同的主机或网络.
下面我们就来自己实现一下整个部署过程: 1.安装:
curl -L git.io/weave -o /usr/local/bin/weave #下载
chmod a+x /usr/local/bin/weave #赋予执行权限
2.检查:
weave version #查看weave版本
weave status #查看weave状态
weave 网络默认为10.32.0网段
每个地址由4*8=32个比特构成 , /12表示 子网掩码位是12个bit 也就是子网可以有 2的(32-12)次方个ip 3.启动
weave launch #启动weave
weave launch ip | hostName #节点启动的时候连接到master (创建weave网络的主机叫master)
4.检查是否启动成功
docker ps # 如果有一个weaveworks/weave容器在运行就表示启动成功,后边两个检查并非必须!
brctl show #检查网桥, weave启动还会生成一个名叫weave的网桥, (docker0网桥是docker默认生成的)
docker network ls #检查docker中的网络配置, 发现其中也生成了一个Name为weave的网络
5.启动容器1.weave run 镜像ID(此方式2.0版本以后已经废除)
2.eval $(weave env) 将docker命令代理给weave 执行,(如果先执行这个, docker命令启动的容器就会被自动加入weave网络,并自动分配IP)
3.docker run xxx (正常启动容器) —>
然后执行 - weave attach ContainerId IP #将容器加入到weave网络并分配指定IP
- weave attach ContainerId #将容器加入到weave网络并自动分配IP
6.测试
docker exec -it ContainerId /bin/bash 进入某一容器
ping xxx #ping 另一个weave网络内的容器ip, 如果能够ping 通说明网络已经连接OK
weave 的使用还是比较简单的,下一篇文章我们
下面总结一下常用的命令
物理机之间容器互通:weave connect $OTHER_HOST #可以把一台主机连接到weave网络
动态添加网络:对于不是通过weave启动的容器,可以通过weave attach 10.0.1.1/24 $id来添加网络(weave detach删除网络)
与宿主机网络通信:weave expose ip/24 或者weave expose,这个命令会把宿主机加入到weave 网络中, 宿主机就可以和容器之间自由通信了
安全性:可以通过weave launch -password wEaVe设置一个密码用于weave peers之间加密通信
查看weave路由状态:weave ps
|