Docker使用pipework配置本地网络
需求
在使用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使用pipework配置本地网络的更多相关文章
- Docker(二十三)-Docker使用pipework配置本地网络
需求 在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了. 下 ...
- Redhat6.4 配置本地网络的FTP YUM源
Redhat6.4 配置本地网络的FTP YUM源 如果本机IP: 192.168.8.47 (一) 配置本机的yum源 使用以下的方法能够配置本机的yum源: 1) scp命令上传ISO文件到: / ...
- 使用pipework将Docker容器桥接到本地网络环境中
在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipew ...
- Oracle配置本地网络服务名
Oracle安装完成后,可以使用客户端自带的的网络配置向导(Net Configuration Assistant)进行配置 1.启动Net Configuration Assistant.选择&qu ...
- OCA读书笔记(6) - 配置Oracle网络环境
6.Configuring the Oracle Network Environment su - grid装grid时自动创建了监听netca--创建新的监听 vi $ORACLE_HOME/net ...
- 使用pipework将Docker容器配置到本地网络环境中
使用pipework将Docker容器配置到本地网络环境中 需求 在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主 ...
- docker 配置桥接网络
2.5 docker配置桥接网络(上): 为了使本地网络中的机器和Docker 容器更方便的通信,我们经常会有将Docker容器 配置到和主机同一网段的需求. 这个需求其实很容器实现, 我们只需要将D ...
- Docker学习(六): 网络使用与配置
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- linux配置oracle11G监听及本地网络服务 及 数据库建库
配置监听及本地网络服务 在oracle用户的图形界面oracle用户中,新开启一个终端,输入命令netca 会弹出如下界面. 数据库建库 在oracle用户的图形界面oracle用户中,新开启一个终端 ...
随机推荐
- Web应用中的缓存一致性问题
上篇总结了缓存中出现频率比较高的一些问题,今天详细说说web应用中的缓存一致性问题. 主要说以下三个方面 数据库与缓存中数据不一致出现的情形 发生不一致时的优化思路 如何保证数据库与缓存的一致性 先来 ...
- Windows启动报错:无效的分区表 解决方法,哈哈
Windows系统启动时出现Invalid Partition Table错误 2018-07-27 16:32 今天KB小网管跟大家分享一个在重装Windows系统时会出现的一个问题Invalid ...
- jmeter接口测试-使用rsa加密解密算法
本篇介绍jmeter 使用rsa算法进行加密参数 如果测试过程中,部分接口采用了rsa加密算法,我们的jmeter 也是可以直接拿来调用的,不需要开发配合去掉加密代码! 直接上代码 import or ...
- SIGAI深度学习第五集 自动编码器
深度学习模型-自动编码器(AE),就是一个神经网络的映射函数,f(x)——>y,把输入的一个原始信号,如图像.声音转换为特征. 大纲: 自动编码器的基本思想 网络结构 损失函数与训练算法 实际使 ...
- 06_检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用子串对比版本)
#!/bin/bashif [ $USER == "root" ];then #或者 if [ $UID -eq 0 ];then yum -y install vsftpd ...
- 8月清北学堂培训 Day 7
当天走得太兴奋了,忘记保存就关电脑了o(╥﹏╥)o,现在补上( p′︵‵.) 今天是杨思祺老师的讲授~ 练习题 首先求出最短路: 如果选择的边不是最短路上的边,那么毫无影响: 对于最短路径上的边,我们 ...
- SQL SERVER可重复执行建表、建字段语句
/*问题:type in (N'U') 中的N和U是什么意思? 答案:N是指Unicode编码,防止乱码:U是指用户表*/IF NOT EXISTS (SELECT * FROM sys.object ...
- 三十、CentOS 7之systemd
一.系统启动流程 POST --> bootloader --> MBR工作 --> kernel(initramfs/initrd) --> ro rootfs --> ...
- Python学习日记(十)—— 杂货铺(全局变量补充、Python参数传递、字符串格式化、迭代器、生成器)
全局变量补充 python自己添加了些全局变量 print(vars()) """结果: {'__name__': '__main__', '__doc__': None ...
- springboot+mybatis+druid+sqlite/mysql/oracle
搭建springboot+mybatis+druid+sqlite/mysql/oracle附带测试 1.版本 springboot2.1.6 jdk1.8 2.最简springboot环境 http ...