虚拟化技术—docker容器—PIPEWORK解读与实践

本文通过3个样例 —— 将Docker容器配置到本地网络环境中、单主机Docker容器的VLAN划分、多主机Docker容器的VLAN划分,演示了如何使用pipework帮助我们进行复杂的网络设置,以及pipework是如何工作的。

1、pipework的使用以及源码分析

Docker自身的网络功能比较简单,不能满足很多复杂的应用场景。因此,有很多开源项目用来改善Docker的网络功能,如pipework、weave、flannel等。这里,就先介绍一下pipework的使用和工作原理。

pipework是由Docker的工程师Jérme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用。下面用三个场景来演示pipework的使用和工作原理。

1.1、将Docker容器配置到本地网络环境中

为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了。

下面我们来操作一下,我主机A地址为192.168.137.100/24,网关为192.168.137.1,需要给Docker容器的地址配置为192.168.137.150/24。在主机A上做如下操作:

#安装pipework

git clone https://github.com/jpetazzo/pipework

cp ~/pipework/pipework /usr/local/bin/

#启动Docker容器。

docker run -itd --name test1 centos /bin/bash

#配置容器网络,并连到网桥br0上。网关在IP地址后面加@指定。若主机环境中存在dhcp服务器,也可以通过dhcp的方式获取IP

#pipework br0 test1 dhcp

pipework br0 test1 192.168.137.150/[email protected]

#将主机eth0桥接到br0上,并把eth0的IP配置在br0上。这里由于是远程操作,中间网络会断掉,所以放在一条命令中执行。

ip addr add 192.168.137.100/24 dev br0; \

ip addr del 192.168.137.100/24 dev eth0; \

brctl addif br0 eth0; \

ip route del default; \

ip route add default gw 192.168.137.1 dev br0

这时可以ifconfig看一下:(截取不完,只截取需要的)

2.2、单主机Docker容器VLAN划分

pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分。为了演示隔离效果,我们将4个容器放在了同一个IP网段中。但实际他们是二层隔离的两个网络,有不同的广播域。

#在主机A上创建4个Docker容器,test1、test2、test3、test4

docker run -itd --name test1 centos /bin/bash

docker run -itd --name test2 centos /bin/bash

docker run -itd --name test3 centos /bin/bash

docker run -itd --name test4 centos /bin/bash

#将test1,test2划分到一个vlan中,vlan在mac地址后加@指定,此处mac地址省略。

pipework ovs0 test1 192.168.137.150/24 @100

pipework ovs0 test2 192.168.137.151/24 @100

#将test3,test4划分到另一个vlan中

pipework ovs0 test3 192.168.137.152/24 @200

pipework ovs0 test4 192.168.137.153/24 @200

完成上述操作后,使用docker attach连到容器中,然后用ping命令测试连通性,发现test1和test2可以相互通信,但与test3和test4隔离。这样,一个简单的VLAN隔离容器网络就已经完成。

2.3、多主机Docker容器的VLAN划分

为了实现这个目的,我们把宿主机上的网卡桥接到各自的OVS网桥上,然后再为容器配置IP和VLAN就可以了。我们实验环境如下,主机A和B各有一块网卡eth0,IP地址分别为192.168.137.100/24,192.168.137.101/24。在主机A上创建两个容器test1、test2,分别在VLAN 100和VLAN 200上。在主机B上创建test3、test4,分别在VLAN 100和VLAN 200 上。最终,test1可以和test3通信,test2可以和test4通信。

#在主机A上

#创建Docker容器

docker run -itd --name test1 centos /bin/bash

docker run -itd --name test2 centos /bin/bash

#划分VLAN

pipework ovs0 test1 192.168.137.150/24 @100

pipework ovs0 test2 192.168.137.151/24 @200

#将eth0桥接到ovs0上

ip addr add 192.168.137.100/24 dev ovs0; \

ip addr del 192.168.137.100/24 dev eth0; \

ovs-vsctl add-port ovs0 eth0;\

ip route del default; \

ip route add default gw 192.168.137.1dev ovs0

#在主机B上

#创建Docker容器

docker run -itd --name test3 centos /bin/bash

docker run -itd --name test4 centos /bin/bash

#划分VLAN

pipework ovs0 test3 192.168.137.152/24 @100

pipework ovs0 test4 192.168.137.153/24 @200

#将eth0桥接到ovs0上

ip addr add 192.168.137.101/24 dev ovs0; \

ip addr del 192.168.137.101/24 dev eth0; \

ovs-vsctl add-port ovs0 eth0;\

ip route del default; \

ip route add default gw 192.168.137.1 dev ovs0

完成上面的步骤后,主机A上的test1和主机B上的test3容器就划分到了一个VLAN中,并且与主机A上的test2和主机B上的test4隔离(主机eth0网卡需要设置为混杂模式,连接主机的交换机端口应设置为trunk模式,即允许VLAN 100和VLAN 200的包通过)。

除此之外,pipework还支持使用macvlan设备、设置网卡MAC地址等功能。不过,pipework有一个缺陷,就是配置的容器在关掉重启后,之前的设置会丢失。

时间: 2024-10-05 22:55:22

虚拟化技术—docker容器—PIPEWORK解读与实践的相关文章

虚拟化技术—docker容器—网络模式

Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.这里先介绍Docker自身的4种网络工作方式. 1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: § host模式,使用--net=host指定

虚拟化技术—docker容器—安装篇

核心概念 1. 镜像 是一个只读的模板类似于安装系统用到的那个iso文件我们通过镜像来完成各种应用的部署. 2. docker容器 镜像类似于操作系统而容器类似于虚拟机本身.它可以被启动.开始.停止.删除等操作每个容器都是相互隔离的. 3. docker仓库 存放镜像的一个场所仓库分为公开仓库和私有仓库. 最大的公开仓库是Docker hubhub.docker.com国内公开仓库http://dockerpool.com/ 一.安装 centos6 上安装(6.5之前版本需要升级一下 yum

虚拟化技术—docker容器—管理篇

一.我们怎么更方便的进去已经start的容器呢? nsenter:可以通过这个命令进去docker的images里 首先获取一个容器的id: docker inspect --format " {{.State.Pid}}" centos_with_nettools 获取一个id 10592 nsenter --target 10592 --mount --yts --ipc --net 这样就进去了,当然这样很麻烦,所以可以写一个脚本: cat in.sh CNAME=$1 CPID

虚拟化技术—docker容器—Dockerfile篇

什么是Dockerfile? 按照平时,我们都需要先让一个容器跑起来,然后进去搭建制定自己的服务,那有没有更简洁的方法呢?Dockerfile就是为了更方便的制定容器的. 首先先看Dockerfile里的一些定义,这里从网上截了个图,比较形象: 创建目录: 要先把需要的软件包放在同一个目录下 编写Dockerfile,这里要特别提醒,Dockerfile编写需要非常注意空格!!! vim Dockerfile 添加: # This is My first Dockerfile # Version

虚拟化技术—docker容器—web UI篇

docker官方提供了一个web UI界面管理容器和镜像,名为:shipyard 先修改一下配置文件 vim /etc/sysconfig/docker 添加: other_args="-H tcp://0.0.0.0:235 -H unix:///var/run/docker.sock" 注:centos7使用OPTIONS="-H tcp://0.0.0.0:235 -H unix:///var/run/docker.sock" 重启: /etc/init.d/

Docker容器的原理与实践 (下)

欢迎访问网易云社区,了解更多网易技术产品运营经验. Docker原理分析 Docker架构 镜像原理 镜像是一个只读的容器模板,含有启动docker容器所需的文件系统结构及内容Docker以镜像和在镜像基础上构建的容器为基础,以容器开发.测试.发布的单元将应用相关的所有组件和环境进行封装,避免了应用在不同平台间迁移所带来的依赖问题,确保了应用在生产环境的各阶段达到高度一致的实际效果. 主要特点 分层     镜像采用分层构建,每个镜像由一系列的镜像层组成, 当需要修改容器内的某个文件时,只对处于

容器技术Docker 容器操作大总结

Docker实战之容器操作: 新建容器: docker create创建的容器处于停止状态,可以使用docker start命令启动Docker容器. 使用docker run命令,可以创建一个运行中的容器. create命令与容器运行模式相关的选项: -a,--attach=[]                                      是否绑定到标准输出.输入和错误 -a,--detach=true|false                              是否在

Docker容器虚拟化技术

Docker是近十年软件工程领域最大的革命.Docker的技术可以完全存驻整个软件的开发.测试.部署和运维等软件生产的方方面面的环节. 提到Docker,也不得不提虚拟化,因为大家谈云计算的时候,也不得不提虚拟化技术.Docker所代表的虚拟化技术和我们以前谈的云计算的虚拟化技术怎么区别呢?以前我们谈云计算的虚拟化技术都是一些譬如Vmware或者是openstack,这些为代表的虚拟化技术都是比较重量级的虚拟化.以vmware举例,vmware大家都知道,他虚拟化的时候是将传统的一台计算机抽象成

内核虚拟化技术——LXC初体验

一.Cgroups 1.1 介绍 Cgroup是Control group的简称.最初由由Google的工程师(主要是Paul Menage和Rohit Seth)在2006年以"process containers(进程容器)"的名字开始的, 在2007年的晚些时候被重命名为"控制组"并被合并到了2.6.24版的内核中,现已成为Linux内核中的一个功能,是Linux内核提供一种可限制.记录.隔离进程组所使用的物理资源(如:CPU.Memory.I/O等)的机制.