Docker:使用pipework配置docker网络
2015-11-30 20:30
711 查看
1、pipework的安装
Pipework是一个Docker配置工具,是一个开源项目,由200多行shell实现。Pipework是一个集成工具,需要配合使用的两个工具是OpenvSwitch和Bridge-utils。
$ git clone https://github.com/jpetazzo/pipework.git $ sudo cp pipework/pipework /usr/local/bin/
2、pipework配置Docker的三个简单场景
2.1 pipework+linux bridge:配置Docker单主机容器
#主机A:192.168.187.143 #主机A上创建两个容器con1、con2 docker run -itd --name con1 --net=none ubuntu:14.04 bash docker run -itd --name con2 --net=none ubuntu:14.04 bash #使用pipework建立网桥br0,为容器con1和con2添加新的网卡,并将它们连接到br0上 pipework br0 con1 10.0.0.2/24 pipework br0 con2 10.0.0.3/24 #在容器con1和con2内部可以看到有一个网卡地址分别如上,可以ping通
2.2 pipework+OVS:单主机Docker容器VLAN划分
pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分。#主机A的IP地址为:192.168.187.147 #在主机A上创建4个Docker容器,test1、test2、test3、test4 docker run -itd --name test1 --net=none busybox sh docker run -itd --name test2 --net=none busybox sh docker run -itd --name test3 --net=none busybox sh docker run -itd --name test4 --net=none busybox sh #将test1,test2划分到一个vlan中,vlan在mac地址后加@指定,此处mac地址省略 pipework ovs0 test1 192.168.0.1/24 @100 pipework ovs0 test2 192.168.0.2/24 @100 #将test3,test4划分到另一个vlan中 pipework ovs0 test3 192.168.0.3/24 @200 pipework ovs0 test4 192.168.0.4/24 @200 #此时进入容器test1 ping 10.0.0.2 #可以通信 ping 10.0.0.3 #不可以通信
这个功能其实是由于OpenVSwitch本身支持VLAN功能,在将veth pair的一端加入ovs0网桥时,指定了tag。底层的操作是
ovs-vsctl add-port ovs0 veth* tag=100
2.3 pipework+OVS:多主机Docker容器VLAN划分
#主机A:192.168.187.147 #主机B:192.168.187.148 #主机A上 docker run -itd --net=none --name con1 busybox sh docker run -itd --net=none --name con2 busybox sh #划分vlan pipework ovs con1 10.0.0.1/24 @100 pipework ovs con2 10.0.0.2/24 @200 #将eth0连接到ovs上 ovs-vsctl add-port ovs eth0 #同理在主机B上进行操作 docker run -itd --net=none --name con3 busybox sh docker run -itd --net=none --name con4 busybox sh #划分vlan pipework ovs con3 10.0.0.3/24 @100 pipework ovs con4 10.0.0.4/24 @200 #将eth0连接到ovs上 ovs-vsctl add-port ovs eth0
遇到问题:
1)进入容器con3,我们期望的结果是可以ping通con1,但是不能ping通con2.但是实验发现都不能ping通。感觉跨主机划分vlan还是存在问题。
注:看到将eth0连接到ovs上另一种实现方式如下,但是试过了还是不能ping通
#主机A的IP地址为:192.168.187.147 ip addr add 192.168.187.147/24 dev ovs0 ip addr del 192.168.187.147/24 dev eth0 ovs-vsctl add-port ovs0 eth0 route del default route add default gw 192.168.187.254 dev ovs0
2)如果不划分vlan的话,是可以跨主机通信的。
相关文章推荐
- 《Docker入门》:和我一起写Dockerfile
- ubuntu docker redis
- Docker系列(五)OVS+Docker网络打通示例
- Debian 8.2 安装docker
- ubuntu docker redis
- 使用国内 docker 加速器来下载镜像文件
- docker 容器故障导致无法启动解决办法
- 微服务的「扩展立方」与 Docker 化实践
- 用浏览器管理 Docker
- Dockerfile创建支持ssh服务自启动的容器
- docker 中 NGINX+PHP+MYSQL+REDIS+Elasticsearch 环境搭建 (linux系统)
- docker强制批量删除none的image镜像
- DockerCon 欧洲大会14款最热应用程序容器产品
- docker 批量删除 <none> 镜像命令
- Docker镜像
- Docker架构
- Docker 网络基础配置
- [Docker]Docker1.9后的network
- Docker 监控实战
- 如何创建属于你自己的 docker 镜像库