1. 程式人生 > >基於consul的Docker-overlay跨多宿主機容器網路

基於consul的Docker-overlay跨多宿主機容器網路

環境限制

  • 必須安裝key-value儲存服務,如consul
  • 宿主機已經安裝docker engine
  • 宿主機的hostname必須不同
  • 核心大於3.16

環境準備及角色分配

  • 兩臺ubuntu的server
主機名ip核心啟動docker容器名稱docker engine版本consul服務
server1192.168.1.754.2.0-27-genericserver1(centOS7)1.10.2server
server2192.168.1.764.2.0-27-genericserver2(centOS7)1.10.2client

下載分散式發現服務協調軟體:consul

  • 下載consul軟體並解壓,實際就是一個二進位制檔案放到$PATH下面即可

[email protected]:~$ wget https://releases.hashicorp.com/consul/0.6.3/consul_0.6.3_linux_amd64.zip

[email protected]:~$ unzip consul_0.6.3_linux_amd64.zip;

[email protected]:~$ sudo mv consul /bin

  • 啟動consul

[email protected]:~$ nohup sudo consul agent -server -bootstrap -data-dir /home/hanxt/workspace/data/consul -bind=192.168.1.75 &

[email protected]:~$ nohup sudo consul agent -data-dir /home/hanxt/workspace/data/consul -bind=192.168.1.76 &

[email protected]:~$ consul join 192.168.1.75

可以啟動一個server和多個agent(此處是一個),然後讓agent,join到consul叢集中

配置Docker並重啟

  • 在每一臺docker宿主機上做如下配置,並重啟docker

 sudo vi /etc/default/docker

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://localhost:8500 --cluster-advertise eth0:2375"



sudo service docker restart

  • 叢集配置

–cluster-store= 引數指向docker daemon所使用key value service的地址(本例中即consul的服務地址)
–cluster-advertise= 引數決定了所使用網絡卡以及docker daemon埠資訊

  • 宿主機配置

上面的-H 的引數分別指定了docker demon服務的地址和協議

建立overlay網路

  • 建立

[email protected]:~$ sudo docker network create -d overlay  multihost

  • 驗證

在server1上建立的multihost網路,會通過consul服務同步到server2上面


[email protected]:~$ docker network ls

NETWORK ID          NAME                DRIVER

4956314037af        multihost           overlay             

e17295058b38        bridge              bridge              

e4ef9ba16838        none                null                

f3312e582310        host                host                

建立容器


docker run -d --net=multihost --name=host1 hanxt/centos:7

docker run -d --net=multihost --name=host2 hanxt/centos:7

驗證網路互通


[email protected]:~$ docker exec -it host2 bash

[[email protected] /]# ifconfig eth0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450

        inet 10.0.0.3  netmask 255.255.255.0  broadcast 0.0.0.0

        inet6 fe80::42:aff:fe00:3  prefixlen 64  scopeid 0x20<link>

        ether 02:42:0a:00:00:03  txqueuelen 0  (Ethernet)

        RX packets 29  bytes 2522 (2.4 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 22  bytes 1964 (1.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[[email protected] /]# 

[[email protected] /]# ping 192.168.1.75

PING 192.168.1.75 (192.168.1.75) 56(84) bytes of data.

64 bytes from 192.168.1.75: icmp_seq=1 ttl=63 time=0.790 ms

64 bytes from 192.168.1.75: icmp_seq=2 ttl=63 time=0.825 ms

64 bytes from 192.168.1.75: icmp_seq=3 ttl=63 time=0.907 ms

^C

--- 192.168.1.75 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2002ms

rtt min/avg/max/mdev = 0.790/0.840/0.907/0.059 ms

[[email protected] /]# 

[[email protected] /]# ping 10.0.0.2

PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=1.13 ms

64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=1.03 ms

64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=1.06 ms

64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=1.09 ms

^C

--- 10.0.0.2 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3004ms

rtt min/avg/max/mdev = 1.031/1.080/1.130/0.043 ms

[[email protected] /]#

  • 驗證結論,server2容器host2的ip=10.0.0.3,可以ping通server1,可以ping通server1上的容器host1的ip=10.0.0.2

如何使用靜態ip

  • 以上的實驗步驟。container的ip都是自動分配的,如果需要靜態的固定ip,怎麼辦?
  • 在建立網路的過程中有區別

sudo docker network create -d overlay --ip-range=192.168.2.0/24 --gateway=192.168.2.1 --subnet=192.168.2.0/24 multihost


docker run -d --name host1 --net=multihost --ip=192.168.2.2 hanxt/centos:7

docker run -d --name host2 --net=multihost --ip=192.168.2.3 hanxt/centos:7

相關推薦

基於consul的Docker-overlay宿主容器網路

環境限制必須安裝key-value儲存服務,如consul宿主機已經安裝docker engine宿主機的hostname必須不同核心大於3.16環境準備及角色分配兩臺ubuntu的server主機名ip核心啟動docker容器名稱docker engine版本consul服

使用Weave實現Docker宿主互聯

前提:            之前有關專案的容器都是執行在單臺主機上的由於後期擴充套件增多需要在多臺宿主機上執行不同的分散式應用,所以需要docker的多宿主機互聯技術 實現方法: 一、利用OpenVSwitch 二、利用Weave 三、Docker在1.9之後支援的O

docker同宿主容器和不同宿主容器之間怎麽通信?

roc 網卡 命令執行 ip) oss namespace 跨主機通信 進行 work 第一部分 docker有四種網絡模式第一種:bridge 模式當docker進程啟動時,主機上會創建一個名為docker0的虛擬網橋,容器內部會創建一個只能容器內部看到的接口eth0,e

Docker Overlay網路和etcd實現容器通訊

# Mutil-host networking with etcd ## setup etcd cluster 在docker-node1上 ``` [email protected]:~$ wget https://github.com/coreos/etc

Docker1.12讓容器使用和宿主同一個網段

docker1.12讓容器使用和宿主機同一個網段步驟一:創建網絡$ docker network create -d macvlan --subnet=172.16.0.0/24 --gateway=172.16.0.1 -o parent=eno16777736 mynet548d79fe04c613d3c

weave實現宿主之間的容器互聯

weave docker weave實現宿主機之間的容器互聯Docker Weave簡介關於weave的原理不做細致的說明,如果想了解weave可以登陸官網:https://www.weave.works/註意:防火墻一定要打開6783端口,否則無法連接註意:開啟路由轉發#vim /etc/sysct

docker從容器裏面拷文件到宿主或從宿主拷文件到docker容器裏面

都是 pad ace lin tex doc text 就是 adding 1、從容器裏面拷文件到宿主機? 答:在宿主機裏面執行以下命令 docker cp 容器名:要拷貝的文件在容器裏面的路徑 要拷貝到宿主機的相應路徑

虛擬之間實現網段通信

多虛擬機跨網段通信規劃IP地址A 192.168.1.100R1 ens33: 192.68.1.2 ens37: 172.16.1.100R2 ens33: 172.16.1.2 ens37: 10.1.1.100R3 ens33: 10.1.1.2 ens37: 192.16.2.4B 192

Oracle12c中宿主容器數據庫(CDBs)和可插拔數據庫(PDBs)新特性之運行腳本

error local app tab OS ecif lora cron lis 對開發者和DBA們來說,對shell腳本批量任務的影響成了多宿主選項帶來的最大改變之一。因為多宿主環境通過服務來連接到可插拔數據庫,因此,依靠CRON和OS認證成了換成多宿主環境後的一

宿主-免密登錄Docker容器

hub 3.1 目錄 測試 pub emctl lsof 進行 2.3 討論QQ:1586558083 目錄 一、檢查系統內核 二、安裝Docker 2.1 安裝 2.2 查看docker版本 2.3 啟動docker 三、建立docker用戶和組 3.1 

Docker-使用數據卷在宿主容器間的數據共享

功能 gif spa pull 找到 是否 運行命令 如果 res 場景一:現在用Docker創建了N個容器,但是這些容器之間需要數據共享,這個時候我們應該怎麽辦?[參考第四步] 場景二:docker創建了一個容器並進入容器,添加了一些定制功能,此時除了用docker

使Docker容器擁有可被宿主以外的機器直接訪問的獨立IP

我們常用的docker容器都是將ip埠對映到宿主機,通過宿主機IP進行訪問。外部無法直接訪問容器IP,下面簡單介紹下怎麼做到區域網內直接訪問docker容器IP。 自動化指令碼見 https://github.com/liwei128

利用Docker容器的不安全部署獲取宿主許可權

濫用容器( container)及逃逸的方法有多種,本文將討論最基本的一種,即濫用docker socket來逃逸容器並在宿主機上以root身份執行最新資訊程式碼。   實驗環境設定 由於我們將使用手機麻將外掛容器, 因此星力捕魚刷分必須安裝docker。 建立網

Docker容器內部埠對映到外部宿主埠的方法小結

轉自:https://www.cnblogs.com/kevingrace/p/9453987.html   Docker允許通過外部訪問容器或者容器之間互聯的方式來提供網路服務。容器啟動之後,容器中可以執行一些網路應用,通過-p或-P引數來指定埠對映。 注意:宿主機的一個埠只能對映到容器內部

DOCKER容器宿主同網段互相通訊

相關閱讀: 博主最近在解決docker與宿主機同網段通訊的問題,寫此文章記錄一下整個過程。 遇到的問題 博主用兩臺docker容器做datanode,當時配置Docker網路時,使用了Bridge模式,docker0網段(172.

(轉)python 全棧開發,Day73(django表新增,基於物件的表查詢)

昨日內容回顧 多表方案: 如何確定表關係呢? 表關係是在2張表之間建立的,沒有超過2個表的情況。 那麼相互之間有2條關係線,先來判斷一對多的關係。 如果其中一張表的記錄能夠對應另外一張表的多條記錄,那麼關係線成立! 如果只

如何在docker容器宿主之間複製檔案

直接上程式碼 sudo docker cp txcrm2:/home/log/production.log /system/logs ##仔細看 txcrm2是映象id ,後面就是檔案路徑

基於一個tomcat映象部署個tomcat容器並執行

[tomcat:8]為tomcat映象1,建立2個tomcat容器(外部訪問埠分別為8081/8082)docker run --name mytomcat1 -d -p 8081:8080 tomcat:8docker run --name mytomcat2 -d -p

【docker】docker容器宿主之間檔案互傳,互相拷貝

原文地址:https://www.cnblogs.com/areyouready/p/8973495.html     【注意:命令中符號均為英文符號】 1、從容器裡面拷檔案到宿主機      答:在宿主機裡面執行以下命令    

docker 宿主容器間複製檔案

由於初用docker,不太清楚如何將程式碼複製到容器中執行,故百度,但是出來的結果卻不是那麼令人滿意,太部分博文都將複製檔案弄得非常複雜。 實際上,要向docker容器中複製檔案是非常簡單的,docker本身就有提供相關的命令: 上述圖片是docker提供的cp的具體用法