Docker网络基础---Docker跨主机容器访问通信

[日期:2016-10-25] 来源:Linux社区  作者:canot [字体:大 中 小]

在同一宿主机下的Docker的容器之间是默认互相联通的。通过docker inspect id或name可以查看到ip地址。在不通的容器中来执行ping是可以ping通的。

但我们通过观察发现,每一个启动容器的ip地址不是固定的,所以如果我们通过ip地址来实现互连明显是不靠谱的。但我们发现这些ip又处于同一网段中而且默认是127.0.0.X,这就是Docker容器默认跨主机之间的链接方法的第一种:网桥实现

在docker宿主机上运行ifconfig命令可以看的存在一个docker0的网桥。Docker容器通过docker0 网桥实现同一主机间中,容器的ip地址分配和访问,所以,如果希望Docker跨主机访问,最简单的方式就是将不同主机的docker0 设置为同一网段。

整体网络拓扑结构就是这样:

但是通过这种桥接,所有网卡都要在一个网段下,所以要对每个Docker守护进程对ip的分配做出限制:

下面,我们就来实现这个结构:

两台Ubuntu 的 ip:

Host1 : 10.211.55.3 网卡:eth0

Host2 :10.211.55.5 网卡 eth1

网关:10.211.55.1

对容器ip的划分:

Host1: 10.211.55.64/26

  地址范围: 10.211.55.65~10.211.55.126

Host2: 10.211.55.128/26

  地址范围: 10.211.55.129~10.211.55.190

需要的操作:

以下,以Host1 为例,Host2 上操作相似,只是网卡名字不一样,我在这里,没有我们不使用默认的docker0 网桥,而是自己新建一个网桥:

apt-get install bridge-utils 
  1. 分别在Docker主机上建立虚拟网桥:

       Host1: $ sudo brctl addbr br0

  2. 为网桥分配一个同网段ip

      Host1: $ sudo ifconfig br0 10.211.55.10 netmask 255.255.255.0

      Host2: $ sudo ifconfig br0 10.211.55.20 netmask 255.255.255.0

  3. 桥接本地网卡:

      Host1: $ sudo brctl addif br0 eth0

这里,我们就准备好了网桥设置

下面我们来修改Docker的配置,使用我们新建的网桥代替docker0:

  1. 修改 /etc/default/docker文件

      $sudo vim /etc/default/docker

  2. 添加守护进程的启动选项:

      Host1: DOCKER_OPTS=” -b=br0 –fixed-cidr=‘10.211.55.64/26‘ “

      Host2: DOCKER_OPTS=” -b=br1 –fixed-cidr=‘10.211.55.128/26‘ “ 
       
      这里,-b 用来指定容器连接的网桥名字

         –fixed-cidr用来限定为容器分配的IP地址范围

  3. 保存文件并重启Docker服务

      $ sudo service docker restart 
       
    下面,就可以来验证:

1.分别在两个Host上启动一个容器

  $ docker run -it ubuntu /bin/bash 
   
2.在容器中运行ping命令查看连接情况 发现是互通的。

Docker跨主机容器链接方法二:Open vSwitch 
简称OVS是一个虚拟交换软件.目的是让大规模网络自动化可以通过编程扩展。

先看一下实现这种方式的连接所具备的条件: 
1.双网卡,Host-Only & NAT 
2.安装Open vSwitch: apt-get install openvswitch-switch

操作步骤:

  • 1.在虚拟机中建立ovs网桥
  • 2.添加gre连接
  • 3.配置docker容器虚拟网桥
  • 4.为虚拟网桥添加ovs接口
  • 5.添加不同Docker容器网段路由

具体执行的一些命令如下: 
针对10.211.55.3设置

sudo ovs-vsctl show  #ovs状态
sudo ovs-vsctl add-br obr0  #增加ovs网桥名为obr0
sudo ovs-vsctl add-port obr0 gre0  # 增加gre接口名为obr0
sudo ovs-vsctl set interface gre0 type=gre
options:remote_ip=10.211.55.5 #设置接口指定链接类型为gre 并指定远程链接的ip
sudo ovs-vsctl show  #接下来设计本机docker网桥
sudo brctl addbr br0
sudo ifconfig br0 10.211.55.1 netmask 255.255.255.0
sudo brctl addif br0 obr0#为本机网桥设置ovs网桥链接
sudo brctl show  #最后设置为docker网桥br0#这样本机就可以链接10.211.55.5

对于10.211.55.5要联通10.221.55.3只需要对其设置路由表即可:

route
sudo ip route add 10.211.55.0/24 via 10.211.55.5 dev eth0  

Docker跨主机容器链接方法三:weave

建立一个虚拟的网络,用于将运行在不同主机的Docker容器连接起来. 
要实现这种方式所需要的条件如下: 
双网卡,Host-Only & NAT 
host1:10.0.2.6 
host2:10.0.2.8 
host1上应用容器1:192.168.0.2/24 
host2上应用容器1:192.168.0.3/24 
两台机器上均安装Docker以及weave,并均启动好weave路由容器 
在两台机器上均启动一个应用容器.可以直接使用weave run命令,也可以先使用docker run启动好容器,然后使用weave attach命令给容器绑定IP地址

安装好weava之后,便执行绑定: 
在10.0.2.6之中:

weava launch 10.0.2.8
#配置docker处于192.168.0.2/24的网段中
c2=$(weava run 192.168.0.2/24 -ti ubuntu /bin/bash)
docker attach $c2

按如上的方法做了后所以主机内的容器通常是全部可以链接成功的,但一般情况下这样很不安全:

我们会使用在/etc/default/docker中配置-icc=false (拒绝容器的所有链接)以及–iptables=true (启动宿主机防火墙规则)而对于需要互连的则使用–link来制定。–link 容器名称:自己定义的别名

Docker网络基础---Docker跨主机容器访问通信相关推荐

  1. docker 绑定固定ip 跨主机容器互访

    之前使用pipework 分配静态ip是暂时的,重启之后就会失效,并且使用pipework绑定的ip 物理机,虚拟机,docker容器的ip都在同一网段,这在生产环境是很困难的,下面使用docker自 ...

  2. Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络

    Docker原生网络.自定义网络.Docker容器通信.跨主机容器网络 Docker原生网络 bridge Host none Docker自定义网络 自定义bridge overlay macvia ...

  3. Docker 跨主机容器网络通信 -- Flannel 实现

    一.简介 Flannel 是一种基于 overlay 网络的跨主机容器网络解决方案,也就是将 TCP 数据包封装在另一种网络包里面进行路由转发和通信,Flannel 是 CoreOS 开发,专门用于 ...

  4. docker 容器之间通信_四、Docker 网络原理、分类及容器互联配置

    本文是<Docker必知必会系列>第四篇,原文发布于个人博客:悟尘纪. 上一篇:Docker必知必会系列(三):基于 Docker-registry/Nexus3 搭建本地仓库 Docke ...

  5. 【狂神说】Docker网络基础笔记整理+重点详解

    目录 前言 容器互联(Docker网络) 1.1 Docker的网卡--docker0 1.2 容器互联的方法 1.2.1 使用 --link命令: 1.2.2 自定义docker网络解决 --lin ...

  6. Docker 学习笔记 - 进阶四 Docker网络和 Docker compose

    Docker 学习笔记 - 进阶四 Docker网络和 Docker compose 4. docker 网络 4.1 docker network是什么 4.1.1 docker不启动,默认网络情况 ...

  7. Docker实现跨主机容器实例网络通信(2)——利用OpenVSwitch构建多主机Docker网络

    题记 前面我们已经针对Docker容器进行了简单介绍,相信感兴趣的朋友已经能在相关帮助下部署一个docker环境感受了容器带给我们的另一种技术进步. 当然,如果你慢慢深入容器的技术研究,你会发现,尽管 ...

  8. Docker的网络模式和跨主机通信

    文章转载自:http://www.a-site.cn/article/169899.html Docker的四种网络模式Bridge模式 当Docker进程启动时,会在主机上创建一个名为docker0 ...

  9. docker webdav_跨主机容器共享数据卷(webdav 双向同步)

    在校内搭建的 Git 仓库,有时候需要在校外访问操作.因为使用的是 Gogs 搭建,所以只需要同步 data 文件夹即可,网上关于双向同步的方案有很多,但是都很麻烦,而且经常会"打架&quo ...

  10. docker(5、网络2) 1、容器间通信的三种方式 2、 容器如何访问外部 3、 外部如何访问容器

    1.容器之间可通过 IP,Docker DNS Server 或 joined 容器三种方式通信 自定义网络 根据业务需要可通过 bridge 驱动创建类似前面默认的 bridge 网络 1.自定义网 ...

最新文章

  1. 哈尔滨工业大学计算机改专业课,哈尔滨工业大学计算机专业课 复试 2013HITCS
  2. mongodb内置角色
  3. 【BZOJ 1486】 [HNOI2009]最小圈
  4. windows 环境下python 安装 pypcap 并用pyinstaller打包到exe,解决DLL 加载失败。
  5. [spfa][差分约束] 洛谷 P3084 照片Photo
  6. 2016年第七届蓝桥杯C/C++ B组国赛 —— 第一题:一步之遥
  7. getlab如何编辑提交时显示的用户名_GitHub 如何让你的提交显示被校验
  8. IOS选中按钮状态的记录
  9. 2015年网页设计最佳颜色搭配的9种选择
  10. 微软BUG Bounty悬赏项目扩展至.NET Core和ASP.NET Core
  11. css渲染(二) 文本
  12. android 获取网卡mac_android 获取MAC地址
  13. python机器学习案例系列教程——算法总结
  14. php 使用PayPal 支付
  15. 【error】error: failed to push some refs to ‘远程仓库地址‘ git报错解决
  16. 作业2:健身类软件调研
  17. 以太坊+IPFS+WEB 电商平台开发讲解
  18. luogu P2852 [USACO06DEC]牛奶模式Milk Patterns
  19. 无法启动此应用因为计算机丢失,开机无法启动此程序因为计算机中丢失怎么回事...
  20. 开发票服务器返回信息为空,使用 getinvoicebatch 批量接口获取发票信息,返回成功,但数据是空的...

热门文章

  1. 管理感悟:开会为什么坐到后面
  2. 介绍一些预言性质的梦
  3. 管理感悟:不能放任下属,必须定时检查工作
  4. 完全二叉树的节点数量
  5. nginx代理php不能跳转页面,nginx 解决首页跳转问题详解
  6. 怎么下载linux历史文件,快速学习Linux-Linux历史
  7. android studio约束布局,在Android Android Studio的上下文菜单中添加约束布局障碍
  8. oracle 列出asm磁盘,如何列出ASM磁盘组的所有磁盘
  9. 更改Linux Shell的提示符
  10. NGN学习笔记7——NGN的服务质量