1. 程式人生 > >docker容器的跨主機訪問

docker容器的跨主機訪問

docker 容器 跨主機 通信 訪問

在同一宿主機下的Docker的容器之間是默認互相聯通的。通過docker inspect id或name可以查看到ip地址。在不同的容器中來執行ping是可以ping通的,然而跨容器則行不通,於是總結了以下3種方法

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

1)以下,以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

這裏,我們就準備好了網橋設置

2)下面我們來修改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

3) 驗證

1.分別在兩個Host上啟動一個容器

  $ docker run -it ubuntu /bin/bash
  
2.在容器中運行ping命令查看連接情況 發現是互通的。

第二種: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網橋名為obr0sudo ovs-vsctl add-port obr0 gre0  # 增加gre接口名為obr0sudo ovs-vsctl set interface gre0 type=gre
options:remote_ip=10.211.55.5 
 #設置接口指定鏈接類型為gre 並指定遠程鏈接的ipsudo 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

第三種方法: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


本文出自 “Dr小白” 博客,請務必保留此出處http://1213503.blog.51cto.com/1203503/1945275

docker容器的跨主機訪問