需求

在使用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的话,是可以跨主机通信的。

转载于:https://www.cnblogs.com/zhuochong/p/10071687.html

Docker(二十三)-Docker使用pipework配置本地网络相关推荐

  1. docker 安装 nacos/nacos-server 镜像并配置本地数据库

    docker pull nacos/nacos-server 启动镜像 这里启动容器的时候参数配置我就不在详解了,不明白的话,评论区留言,有不会的问题一定要及时询问,期待你的评论呦! docker r ...

  2. docker数据卷备份恢复以及配置桥接网络

    25.9 数据卷备份恢复 备份: 如果数据卷容器的共享目录已经挂载到了本地宿主机的磁盘上,那么就无需进行数据卷备份.没有进行挂载到本地,而是作为共享目录的数据卷容器,就得定期将数据卷进行一个备份,不然 ...

  3. Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】

    一.前言 [查看完整视频教程(免费),请拉直文尾] 在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署.在本文中,我们将继 ...

  4. Docker(二):Docker 容器使用

    在上文的学习中,我们简单地讲解了 Docker 的基本架构.了解到了 Docker 使用的是 C/S 结构,即客户端/服务器体系结构. 明白了 Docker 客户端与 Docker 服务器进行交互时, ...

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

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

  6. 【全】Docker(二)-在Docker中部署Nginx实现负载均衡视频教程

    一.前言 在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署.在本文中,我们将继续介绍利用Docker部署Nginx服务实 ...

  7. Docker(二)-在Docker中部署Nginx实现负载均衡(视频)

    一.前言 在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署.在本文中,我们将继续介绍利用Docker部署Nginx服务实 ...

  8. Docker(二十)--Docker k8s--Kubernetes存储--Volumes配置管理

    目录 1. 简介 2. emptyDir卷 2.1 简介 2.2 示例 2.2.1 正常使用 2.2.2 文件超过sizelimit 3. hostPath 卷 3.1 简介 3.2 示例 4 NFS ...

  9. Docker(二十一)--Docker k8s--Kubernetes存储--Volumes配置管理--持久卷--动态静态分配

    目录 1. 简介 2. NFS PV示例(静态分配) 2.1.保证环境的干净 2.2 创建所需资源 2.3 书写pv,pvc,pod文件并进行测试 2.3.1 创建pv 2.3.2 创建pvc和pod ...

最新文章

  1. java param request_SpringMvc之@RequestParam详解
  2. liblapack.so.3: undefined symbol: gotoblas错误及解决办法
  3. SAP Spartacus Storefront页面的page layout config
  4. ASP.NET Core Web 应用程序系列(四)- ASP.NET Core 异步编程之async await
  5. php 运算器,运算器的功能是什么
  6. 前端学习(2237):react实现疫情数据
  7. Python基础:常用知识点汇总
  8. 微信棋牌游戏开发 h5游戏平台制作教程linux系统
  9. 笔记本电脑换内存条流程
  10. 1.JsDroid命令行调试命令
  11. Last packet sent to the server was 2 ms ago 解决办法
  12. 百度网盘web登录页-原生js实现
  13. iphone模拟器上模拟内存警告
  14. 再见华为!一位嵌入式大佬的8年励志总结
  15. 汽车行业如何借助微信小程序引流
  16. 什么是安拆网?安拆网有什么作用?
  17. vue整合uniapp_uni-app仿微信App界面|vue+uniapp聊天室|仿微信朋友圈
  18. springboot中ElasticSearch入门与进阶:组合查询、聚合查询
  19. 申不害之术,一种官僚制度
  20. 讲解如何为AD 添加多个UPN后缀

热门文章

  1. Html5 web本地存储
  2. rubymongo_mapper
  3. 把CNN里的乘法全部去掉会怎样?华为提出移动端部署神经网络新方法
  4. CV Code | 本周新出计算机视觉开源代码汇总(南理SGE 和Intel的实时动作识别很吸引人)...
  5. 2d游戏地图编辑器_从零开始的unity(3)——2d背景的制作和使用
  6. 脑洞大开!拿Transformer和CNN比较!犯错都像人类
  7. 带你详细了解机器视觉竞赛—ILSVRC竞赛
  8. php com(),php|luosimao.com文档中心
  9. 土是独体字结构吗_毛笔楷书基础练习独体字部首的写法(左部)4
  10. NVIDIA DLI 深度学习培训 | 北京站年后即将开班