[Docker网络]模拟一台交换机的拓扑

本例主要对Docker网络进行实际运用。

背景介绍

一台虚拟机如何模拟成一台多端口交换机分别连接多台虚拟机?

bridge网桥技术

实验准备

  • docker

    docker安装教程

  • busybox镜像

    $ docker pull busybox

  • bridge-utils

    $ apt-get install bridge-utils

实验拓扑

两台主机:h1,h2,一台交换机:s1。

h1 <---> S1 <---> h2

实验步骤

<1> 创建docker网桥

$ docker network create --driver bridge --subnet 10.0.0.0/24 --gateway 10.0.0.1 mybr

说明:
--driver bridge:通过bridge驱动类创建bridge网络。
--subnet 10.0.0.0/24:指定子网段。
--gateway 10.0.0.1:指定网关。
mybr:网桥名称。

<2> 启动h1和h2

#终端1
$ docker run -it --rm --network mybr --ip 10.0.0.2 busybox
$ ip a

#终端2
$ docker run -it --rm --network mybr --ip 10.0.0.3 busybox
$ ip a

<3> 启动s1

#终端3
$ docker run -it --rm --network host busybox
$ ip a



测试

#终端1
$ ping 10.0.0.3

#终端2
$ ping 10.0.0.2

#终端3
$ ping 10.0.0.2
$ ping 10.0.0.3

原理解释

在bridge网桥技术中,veth pair 是一种成对出现的特殊网络设备,可以把它们想象成由一根虚拟网线连接起来的一对网卡,比如h1中网卡的一头(eth0@if90)在容器中,另一头(veth0b95f4f@if89)挂在网桥mybr上,其效果就是将 eth0@if90也挂在了mybr上。

交换机S1 是利用容器中的host网络,因此S1和host宿主机的网络配置相同,即可视为通过veth0b95f4f@if89网卡和veth4850d3c@if91网卡分别与h1(eth0@if90)和h2(eth0@if92)相连。

实际拓扑如下:

扩展思考

1、如何模拟多台交换机?
2、如何模拟路由器?

[Docker网络]模拟一台交换机的拓扑的更多相关文章

  1. Docker网络解决方案 - Calico部署记录

    简单来说,实现docker跨主机容器间通信,常用的第三方网络方案是Flannel,Weave,Calico:Flannel会为每个host分配一个subnet,容器从这个subnet中分配ip,这些i ...

  2. Docker网络解决方案 - Weave部署记录

    前面说到了Flannel的部署,今天这里说下Docker跨主机容器间网络通信的另一个工具Weave的使用.当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的 ...

  3. Docker 网络原理

    引言 学习docker网络,可以带着下面两个问题来探讨 容器之间可以相互访问的原理 容器暴露端口后,通过宿主机访问到容器内应用,并且对于访问端而言不用感知容器存在的原理 Docker 本身的技术依赖L ...

  4. 【转】Docker网络详解及pipework源码解读与实践

    好文必转 原文地址: http://www.infoq.com/cn/articles/docker-network-and-pipework-open-source-explanation-prac ...

  5. Docker 网络之理解 bridge 驱动

    笔者在前文<Docker 网络之进阶篇>中介绍了 CNM(Container Network Model),并演示了 bridge 驱动下的 CNM 使用方式.为了深入理解 CNM 及最常 ...

  6. Docker网络和容器的通信

    Docker的本地网络实现其实就是利用了Linux上的网络命名空间和虚拟网络设备(特别是veth pair). 基本原理 直观上看,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)与外界 ...

  7. Docker网络及命令

    Docker常用命令 docker version #查看版本 docker search centos #搜索可用docker镜像 docker images 查看当前docker所有镜像 dock ...

  8. docker网络之macvlan

    macvlan接口类型简单说类似于子接口,但相比子接口来说,macvlan接口拥有自己独立的mac地址,因此使用macvlan接口可以允许更多的二层操作.macvlan有四种模式:VEPA,bridg ...

  9. Docker网络 Weave

    当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的是自己的私有IP地址,不同主机的容器之间进行通讯需要将主机的端口映射到容器的端口上,而且IP地址需要使用主 ...

随机推荐

  1. 使用Java 8中的Stream

    Stream是Java 8 提供的高效操作集合类(Collection)数据的API. 1. 从Iterator到Stream 有一个字符串的list,要统计其中长度大于7的字符串的数量,用迭代来实现 ...

  2. .Net Core程序的部署(FDD与SCD)

    最近打算做一个公司的代码走查工具,思前想后觉得正好可以当作一个Core的实践机会,于是上官网看了下资料,顺便作了一下笔记方便以后查阅. 注1:这里的Core程序部署指的是.Net Core而非Asp. ...

  3. Keras学习环境配置-GPU加速版(Ubuntu 16.04 + CUDA8.0 + cuDNN6.0 + Tensorflow)

    本文是个人对Keras深度学习框架配置的总结,不周之处请指出,谢谢! 1. 首先,我们需要安装Ubuntu操作系统(Windows下也行),这里使用Ubuntu16.04版本: 2. 安装好Ubunt ...

  4. asp中日志方法

    代码文件log.asp中内容如下: <% Function getPath() getPath = request.servervariables("APPL_PHYSICAL_PAT ...

  5. 值得学习的C/C++开源框架(转)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

  6. C++ new 解析重载

    C++ new 解析重载 new的三种形式: (1)operator new(运算符new) (2)new operator(new 操作) (3)placement new(特殊的new操作)(不分 ...

  7. 【Aladdin Unity3D Shader编程】之一 基本入门

    OpenGL.DirectX以及GLSL.HLSL.CG OpenGL和DirectX是图像应用编程接口,用于渲染二维或者三维图形. GLSL着色语言是用来在OpenGL中着色编程的语言,有点在于跨平 ...

  8. AngularJS学习篇(九)

    AngularJS XMLHttpRequest $http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据. $http.get('someUrl',config).then(s ...

  9. js foreach、map函数

    语法:forEach和map都支持2个参数:一个是回调函数(item,index,input)和上下文: •forEach:用来遍历数组中的每一项:这个方法执行是没有返回值的,对原来数组也没有影响: ...

  10. 关于缓存问题:js清除缓存

    css并行加载,js串行加载(会阻塞页面) 清除缓存的问题: 1.一般手动清除,浏览器缓存 2.js代码清除缓存(原理:增加了一个参数,且该参数是一个随机数,每次都不一样,所以每次的请求参数都不一样, ...