需求

在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求。要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了。

下面我们就使用pipework工具来实现这一需求。

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划分。

 1 #主机A的IP地址为:192.168.187.147
2 #在主机A上创建4个Docker容器,test1、test2、test3、test4
3
4 docker run -itd --name test1 --net=none busybox sh
5 docker run -itd --name test2 --net=none busybox sh
6 docker run -itd --name test3 --net=none busybox sh
7 docker run -itd --name test4 --net=none busybox sh
8
9 #将test1,test2划分到一个vlan中,vlan在mac地址后加@指定,此处mac地址省略
10 pipework ovs0 test1 192.168.0.1/24 @100
11 pipework ovs0 test2 192.168.0.2/24 @100
12
13 #将test3,test4划分到另一个vlan中
14 pipework ovs0 test3 192.168.0.3/24 @200
15 pipework ovs0 test4 192.168.0.4/24 @200
16
17 #此时进入容器test1
18 ping 10.0.0.2 #可以通信
19 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划分

 1 #主机A:192.168.187.147
2 #主机B:192.168.187.148
3
4 #主机A上
5 docker run -itd --net=none --name con1 busybox sh
6 docker run -itd --net=none --name con2 busybox sh
7
8 #划分vlan
9 pipework ovs con1 10.0.0.1/24 @100
10 pipework ovs con2 10.0.0.2/24 @200
11
12 #将eth0连接到ovs上
13 ovs-vsctl add-port ovs eth0
14
15 #同理在主机B上进行操作
16 docker run -itd --net=none --name con3 busybox sh
17 docker run -itd --net=none --name con4 busybox sh
18
19 #划分vlan
20 pipework ovs con3 10.0.0.3/24 @100
21 pipework ovs con4 10.0.0.4/24 @200
22
23 #将eth0连接到ovs上
24 ovs-vsctl add-port ovs eth0

遇到问题:

1)进入容器con3,我们期望的结果是可以ping通con1,但是不能ping通con2.但是实验发现都不能ping通。感觉跨主机划分vlan还是存在问题。

注:看到将eth0连接到ovs上另一种实现方式如下,但是试过了还是不能ping通

1 #主机A的IP地址为:192.168.187.147
2 ip addr add 192.168.187.147/24 dev ovs0
3 ip addr del 192.168.187.147/24 dev eth0
4 ovs-vsctl add-port ovs0 eth0
5 route del default
6 route add default gw 192.168.187.254 dev ovs0

2)如果不划分vlan的话,是可以跨主机通信的。

Docker(二十三)-Docker使用pipework配置本地网络的更多相关文章

  1. Docker使用pipework配置本地网络

    需求 在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了. 下 ...

  2. Redhat6.4 配置本地网络的FTP YUM源

    Redhat6.4 配置本地网络的FTP YUM源 如果本机IP: 192.168.8.47 (一) 配置本机的yum源 使用以下的方法能够配置本机的yum源: 1) scp命令上传ISO文件到: / ...

  3. 进击的docker 二 : docker 快速入门

    1.安装docker 1.1.安装环境 [root@docker ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@docke ...

  4. Docker(二十一)-Docker Swarm集群部署

    介绍 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm ...

  5. Docker(二十七)-Docker 清理占用的磁盘空间

    1. docker system命令 docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况: docker system dfTYPE TOTAL A ...

  6. Docker(二):Docker入门教程

    前言 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 ...

  7. Docker(二):Docker镜像仓库Harbor搭建

    安装docker-compose 因为docker-compose下载容易失败, 所以选择从github下载方式安装. [root@harbor ~]# mv docker-compose-Linux ...

  8. Oracle配置本地网络服务名

    Oracle安装完成后,可以使用客户端自带的的网络配置向导(Net Configuration Assistant)进行配置 1.启动Net Configuration Assistant.选择&qu ...

  9. Docker(二十)-Docker容器CPU、memory资源限制

    背景 在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不 ...

随机推荐

  1. RedHat Enterprise Linux 6.4使用Centos 6的yum源问题

    RedHat Enterprise Linux 6.4使用Centos 6的yum源问题 作为一名新手,学习Linux已经一个月了,其间遇到了不少问题,而今天笔者遇到的问题是 #yum install ...

  2. XML 读写(XmlDocument、XPathNavigator、XDocument)

    内存中的 XML 处理 基于流的 XML 处理提供了最小的负载,但也只提供了最小的灵活性.在很多 XML 处理场景里,你不会在这么低的层次下工作. 对内存中的 XML 的处理则更加方便,但没有单一.标 ...

  3. UART, SPI, IIC的详解及三者的区别和联系

    UART.SPI.IIC是经常用到的几个数据传输标准,下面分别总结一下: UART(Universal Asynchronous Receive Transmitter):也就是我们经常所说的串口,基 ...

  4. html5获取地理位置信息API

    html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...

  5. P3195 [HNOI2008]玩具装箱TOY

    列出DP方程式:设f[i]表示分组完前i件物品的最小花费,为方便计算,设sum[i]表示是前i件物品的长度和. f[i]=min(f[j]+(sum[i]-sum[j]+i-j-L-1)^2) [0& ...

  6. P1726 上白泽慧音

    题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间 ...

  7. 【C/C++】1~20的阶乘之和

    一. 前情   能点进这篇文章的,想必也已经知道了C语言和C++语言,以及阶乘的定义,所以在此不赘述了.SUM(1!~20!)这个问题是我在大一学C语言时的一个小题,最近又要把编译器装回来,所以装完之 ...

  8. 基于TLS证书手动部署kubernetes集群(下)

    一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已经部署好了etcd集群.flannel网络以及每个节点的docker,接下来部署master节 ...

  9. vue 打包后,后缀名为.woff等字体问题不能用解决办法

    1.打开 build / webpack.prod.conf.js ,找到 module: { rules: utils.styleLoaders({ sourceMap: config.build. ...

  10. Spark(Python) 从内存中建立 RDD 的例子

    Spark(Python) 从内存中建立 RDD 的例子: myData = ["Alice","Carlos","Frank"," ...