1使用网桥实现跨主机容器连接。
2使用open vswitch虚礼的交换机实现跨主机容器连接。
3使用weave开源项目工具实现跨主机连接。 使用网桥实现跨主机容器连接:在同一个docker的主机中docker容器使用默认的docker0网桥来进行网络的通信,如果将连接容器的网桥也桥接到docker主机的网卡上,并且将网桥分配的ip地址与docker主机分配的ip地址设置为同一ip段,就相当于将容器与docker主机的网咯连接在了一起,就实现了跨主机的容器间的通信。

在不同的docker主机中分别创建网桥,并使用这个网桥来连接docker主机的物理网卡和docker容器,就意味着将不同docker主机中的容器都分配在了同一网段下。

环境准备:2台ubuntu虚拟机,在2个虚拟机中分别安装网桥管理工具(apt-get install bridge-utils),2台机器的ip地址分别是10.211.55.3,10.211.55.5

在虚拟机中配置网桥的连接:修改网络配置文件/etc/network/interfaces来实现网桥的配置和添加。这些命令指定了要建立网桥的名称,ip分配的方式,子网掩码,默认的网关,以及指明了将本地的物理网卡连接到新建的网桥上:
auto br0
iface br0 inet static
address 10.211.55.3
netmask 255.255.255.0
gateway 10.211.55.1
bridge_ports eth0 在docker端需要为docker的守护进程指定2个启动配置选项:
修改/etc/default/docker文件(这是docker守护进程启动配置文件)
-b指定自定义网桥的名字:-b=br0
--fixed-cidr指定的是自定义网桥为容器分配ip地址时使用的ip段,为了避免在2台主机中的容器的ip地址产生冲突,
HOST1 : 10.211.54.64/26
地址范围:10.211.55.65 ~ 10.211.55.126
HOST2 : 192.168.59.128/26
地址范围:10.211.55.129 ~ 10.211.55.190 $ ifconfig : 可以看到当前主机的ip地址分配情况,默认情况下在docker启动时会在主机中添加docker0的网桥,此次的配置中不在使用docker0网桥使用我们自定义的网桥,
$sudo vim /etc/network/interfaces
auto br0
iface br0 inet static
address 10.211.55.3
netmask 255.255.255.0
gateway 10.211.55.1
bridge_ports eth0 $sudo vim /etc/default/docker
DOCKER_OPTS=“-b=br0 --fixed-cidr=10.211.54.64/26” $sudo reboot : 重启系统 $ifconfig :
bro : 不在是docker0了,因为在docker中已经指定自定义的网桥,系统中就不再有docker0网桥,由于为网桥设置了原来物理网卡的ip地址,并且将物理网卡连接到网桥上,eth0(物理网卡)也不在有ip地址被指定给了br0(自定义网桥)
$ps -ef | grep docker(docker启动选项)
Root 1321 1 0 15:32 ? 00:00:00 /usr/bin/docker -d -b=br0 --fixed-cidr=’10.211.55.128/26’ : docker守护进程启动的时候已经使用了我们指定的选项。
$docker run -it ubuntu /bin/bash
#ifconfig : 容器的ip地址已经在定义的ip地址范围内了
#ping 10.211.55.3 : ping同一网络中的另一台虚拟机,可以ping通,pin外网ip也可以
另一台虚拟机也这样配置。2台机器的不同在于为容器ip地址做出的限定不一样,为2台不同的主机划分了相同的ip地址段,但是限定了不同的ip地址分配范围。 使用网桥实现跨主机容器连接总结:
优点:配置简单,不依赖第三方软件。缺点:与主机在同网段,需要小心划分ip地址。需要有网段控制权,在生产环境中不易实现。由于将物理机与容器在同一网段,不容易管理。兼容性不佳。 使用Open vSwitch实现跨主机容器连接 : Open vSwitch是一个虚礼的交换机软件,开源的,使用可移植的C语言开发。

蓝色部分是虚礼网桥,容器通过虚礼网桥来实现同主机之间的连接,虚礼网桥的上一层黄色部分就是使用Open vSwitch创建的OVS网桥,OVS网桥通过gre隧道协议接口实现跨主机的网络连接,
Gre : 通用路由协议封装,使用了一种隧道技术,隧道技术:使用隧道传递的数据可以是不同协议的数据帧或包,隧道协议将其他协议的数据帧或包重新封装然后通过隧道发送。新的桢头提供路由信息。隧道协议提供的是一种点对点的再封装技术。 利用隧道技术可以使不同主机的不同网段的ip地址的容器间的通信。 实验环境:
1.2台ubuntu虚拟机。
2.网络连接使用的是双网卡,一块是Host-Only模式提供虚拟机之间的连接,另一块是NAT模式,提供的是外部网络的连接。
3. 2台虚拟机上分别安装openvswitch和网桥管理工具:apt-get install openvswitch-switch apt-get install bridge-utils
4.2台虚拟机的ip地址分别是192.168.59.103 192.168.59.104 使用open vswitch实现跨主机容器连接操作:
1.建立ovs网桥
2.为新建的ovs网桥添加gre连接
3.配置docker容器的虚礼网桥
4.将ovs网桥连接到虚拟网桥上
5.为docke容器的网段添加路由表
$ ifconfig:有docker0网桥,eth0是使用内网连接的网卡(需要操作的网卡),eth1不用管,因为这时用来做NAT转发的。
$ sudo ovs-vsctl show : 查看ovs的版本
$ 建立ovs网桥:sudo ovs-vsctl add-br obr0 : 建立obr0的网桥
$ 添加gre接口 sudo ovs-vsctl add-port obr0 gre0
$ 设置gre0接口 sudo ovs-vsctl set interface gre0 type=gre options:remote_ip=192.168.59.104 另一台ubuntu虚拟机的地址192.168.59.104
$ sudo ovs-vsctl show : 查看ovs的状态
配置docker容器的虚礼网桥:
$sudo brctl addbr bro 新建虚礼网桥叫br0
$ 为br0设置网络地址 sudo ifconfig br0 192.168.1.1 netmask 255.255.255.0
$ 为br0网桥添加ovs网桥的连接 sudo brctl addif br0 obr0
$ sudo brctl show : 查看当前网桥的连接状态,可以看到br0已经连接到ovs网桥上了
配置docker,用新建的网桥代替docker0
$ sudo vim /etc/default/docker
DOCKER_OPTS = “obr0 ”
$sudo service docker restart : 重启docker服务
$docker run -it ubuntu /bin/bash : 建立一个容器
#ifcinfig : 已经使用了刚刚确定的网络地址
#ping 另一台主机的ip(不使用gre协议是ping不通的)
以同样的方式设置另一台机器。
$route : 查看当前的路由表
$ 添加路由表信息 sudo ip route add 192.168.2.0/24 via 192.168.59.104 dev eth0
$ route 再次查看路由信息 $启动一个交互式容器 docker run -it ubuntu /bin/bash
#ping 192.168.2.4 : 可以ping通了,成功连接上了主机2上的容器。 open vswitch配置过程复杂,可以使用shell脚本或者现成的工具简化过程。 Weave:建立一个虚礼网络,将不同主机的docker容器连接起来。Weave是github上的一个开源项目,通过weave可以忽略容器的所在位置,直接通过配置的网络进行连接。

环境准备:
2台ubuntu虚拟机,双网卡:host-only 和 NAT,IP地址:Host1:192.168.59.103 和 192.168.59.104
操作:
1.安装weave
2.在安装weave的docker主机上启动weave,$weave launch
3.通过weave连接不同的主机
4.通过weave指定ip地址从而启动容器 $下载weave,并且保存在user/bin/weave文件夹下, sudo wget -0 /usr/bin/weave http://raw.githubsercontent.com/zetttto/weave/master/weave(host1上)
$更改weave文件夹的格式,是他可以执行,sudo chmod a+x /usr/bin/weave(host1上)
$weave launch 启动weave,会在docker中运行一个docker的容器,(host1上)
$docker ps -l 可以看到刚刚运行的docker容器(host1上)
以同样的方式,在另一台机器上操作。不过启动weave时使用host1的ip地址,$weave launch 192.168.59.104,这是为了使2个host正确的连在一起。(host2上)
$(host2上)启动一个容器 c2=$(weave run 192.168.1.2/24 -it ubuntu /bin/bash),192.168.1.2/24这个ip地址是我们在启动的容器中分配的ip地址,这个ip地址由weave来维护。将weave这条命令的返回值赋值给了c2这个变量,c2实际上就是启动容器的容器id,
$echo $c2 返回的就是运行的容器id
$docker attach $c2 进入这个容器,也可以在run命令里面指定name选项,后面根据这个name来进入容器
# ifconfig 现在已经进入容器中了,查看容器的网络设置,容器中多了一个网络设备ethwe,这个设备的ip地址就是运行weave中指定的ip地址,原有的docker0网桥分配的ip地址依然在容器中
$(host1上)启动一个容器,$ weave run 192.168.1.10/24 -it --name wc1 ubuntu /bin/bash,以name方式,192.168.10/24是与host2中运行的容器相同网段的ip地址,
$ docker attach wc1 进入容器
#ifconfig
#ping 192.168.1.2,可以ping通 使用weave工具可以非常容易的给docker容器指定一个任意希望分配的ip地址。并且非常方便的划分ip地址段,从而将不同主机的容器划分在不同的网段中。

Docker的跨主机连接:的更多相关文章

  1. docker实现跨主机连接

    实验环境: centos7系统 host1:192.168.42.128 host2:192.168.42.129 dokcer容器跨主机连接 1.使用网桥实现跨主机容器连接 2.使用Open vSw ...

  2. Docker容器的跨主机连接

    Docker容器的跨主机连接 Docker容器的跨主机连接 使用网桥实现跨主机容器连接 网络拓扑 网络连接使用的是Bridge 操作 修改/etc/network/interfaces文件,分配静态I ...

  3. Docker学习(15) Docker容器的跨主机连接

    Docker容器的跨主机连接 Docker使用网桥跨主机容器连接 Docker使用Open cSwitch实现跨主机容器连接 Docker使用weave实现跨主机容器连接

  4. Docker 容器的跨主机连接

    使用网桥实现跨主枳容器连接 不推荐 使用OpenvSwitch实现跨主机容器连接 OpenvSwitch: OpenvSwitch是一个高质量的.多层虚拟交换枳,使用开源Apache2.0许可协议,由 ...

  5. docker swarm模式跨主机连接

    一.前言 当我们开发好微服务之后,考虑到灵活快速持续部署的需要,通常会考虑将其Docker镜像化并在Docker环境下运行.由于微服务个数通常会较多,把所有微服务部署在一台docker主机上是不现实的 ...

  6. Docker容器跨主机通信--overlay网络

    一.Docker主机间容器通信的解决方案 Docker网络驱动 Overlay: 基于VXLAN封装实现Docker原生Overlay网络 Macvlan: Docker主机网卡接口逻辑上分为多个子接 ...

  7. Docker容器跨主机通信之:直接路由方式

    一.Docker网络基本原理 直观上看,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)与外界相通,并可以收发数据包:此外,如果不同子网之间要进行通信,需要额外的路由机制. Docker ...

  8. 9.1docker容器 跨主机连接

    open vswitch 实现跨主机容器连接          准备条件   将本地的网卡 与新建的网桥建立连接   配置 docker 启动项       weave实现跨主机容器连接   null

  9. Docker容器跨主机通信之:OVS+GRE

    一.概述 由于docker自身还未支持跨主机容器通信,需要借助docker网络开源解决方案 OVS OpenVSwich即开放式虚拟交换机实现,简称OVS,OVS在云计算领域应用广泛,值得我们去学习使 ...

随机推荐

  1. 使用TypeDescriptor给类动态添加Attribute【转】

    源文 : http://www.cnblogs.com/bicker/p/3326763.html 给类动态添加Attribute一直是我想要解决的问题,从msdn里找了很久,到Stack Overf ...

  2. 【零基础学习iOS开发】【01-前言】02-准备

    一.程序设计语言 上一讲已经说到:要想开发一款软件,首先得学习一些对应的程序设计语言. 至于iOS开发,须要学习的语言主要有:C.C++.Objective-C. 回到顶部 二.是否须要计算机专业知识 ...

  3. iterm2 配色

    http://blog.csdn.net/sanwuhai/article/details/48729561

  4. error MSB8011: 未能注冊输出。请尝试启用“逐用户重定向”

    初试MFC就遇到困难了.vs2010创建一个MFC ActiveX控件项目. 什么都还没做呢,就出现故障了? 郁闷呀.! ! 1>C:\Program Files\MSBuild\Microso ...

  5. 【Android Studio探索之路系列】之十:Gradle项目构建系统(四):Android Studio项目多渠道打包

    作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.co ...

  6. jvm基础(2)

    7.类装载器 (1)class装载验证流程: A加载.这是装载类的第一个阶段,执行的动作包括:取得类的二进制流,转为方法区数据结构,在java堆中生成对应的java.lang.Class对象. B链接 ...

  7. Spark 性能相关參数配置具体解释-shuffle篇

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 随着Spark的逐渐成熟完好, ...

  8. Kubernetes对象之Service

    系列目录 通过ReplicaSet来创建一组Pod来提供具有高可用性的服务.虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题: Pod IP仅仅是集群内可见的虚拟IP,外部无法访问. ...

  9. 利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了

    前几天,修电脑主析就捣鼓刷BIOS,结果刷完黑屏开不了机,立刻意识到完了,BIOS刷错了.就从网上查资料,各种方法试了个遍,什么用处都没有.终于功夫不负有心人,找到了编码器,知道了怎么用.下面看看具体 ...

  10. Spring Boot外部化配置实战解析

    一.流程分析 1.1 入口程序 在 SpringApplication#run(String... args) 方法中,外部化配置关键流程分为以下四步 public ConfigurableAppli ...