iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 22
0
DevOps

用30天來介紹和使用 Docker系列 第 22

Day22:介紹 Docker 的 Network (三)

  • 分享至 

  • xImage
  •  

延續昨天介紹 Docker Network 的部份,已經實作了 none、container、host、bridge 的模式,今天要來實作的是 overlay 網路模式,這種模式主要是在不同的實體主機內的 Container 之間可以互相的溝通,如下圖:

https://ithelp.ithome.com.tw/upload/images/20171225/20103456nk2xTDWgQk.png

上圖主要是說明 Host1 實體主機裡面有 Container1,然後 Host2 實體主機裡面有 Container2,可以透過 Docker Overlay 的 Network 的模式將 Container1 和 Container2 連接起來做溝通。另外 Consol 是一個存放連線資訊的資料庫,在使用 overlay 時必需要在 Docker 設定,這樣才能存放 overlay 網路模式的連線資訊。

另外在使用 overlay 網路模式時,要先確認 Linux Kernel 的版本。目前我使用的版本是 3.19.8 是可以正常執行的。

Example:

使用 Docker Overlay的網路模式,實作不同的實體主機之間的 container 可以互相的連接,步驟如下:
1. 切換到 root 使用者,修改 Host1 的 Docker 設定,指令如下:

$ vi /etc/docker/daemon.json

設定檔如下

{
  "live-restore": true,
  "group": "dockerroot",
  "hosts": [
     "unix:///var/run/docker.sock",
     "tcp://10.1.0.221:2375"
  ],
  "cluster-store": "consul://10.1.0.221:8500",
  "cluster-advertise": "enp8s0:2375"
}

主要的設定就是 cluster-storecluster-advertise,分別是要連接到 consul 的 service,取得 overlay 網路模式的連線資訊,以及設定可以讓不同實體主機連線的網路卡。

2. 重新啟動 Host1 的 Docker Service 指令如下:

# systemctl restart docker

3. 在 Host1 使用啟動 docker container 的方式啟動 consul service,指令如下

$ docker run -d -p 8500:8500 progrium/consul -server -bootstrap

4. 在 Host1,使用 docker network 指令建立一個 overlay1 的網路,指令如下

$ docker network create -d overlay overlay1

使用 docker network ls,查看建立之後的結果,畫面如下
https://ithelp.ithome.com.tw/upload/images/20171225/201034563ANVBlncRj.png

5. 在 Host1 啟動一個連接到 overlay1 的 container,指令如下

$ docker run -it --name=container1 --net=overlay1 busybox

6. 開一個新視窗,到 Host2 修改 Docker 的設定如下

$ vi /etc/docker/daemon.json

設定如下:

{
  "live-restore": true,
  "group": "dockerroot",
  "hosts": [
     "unix:///var/run/docker.sock",
     "tcp://10.1.0.223:2375"
  ],
  "cluster-store": "consul://10.1.0.221:8500",
  "cluster-advertise": "enp8s0:2375"
}

以上的設定和 Host1 是很像的

7. 在 Host2 上重新啟動 Docker service 指令如下

$ systemctl restart docker

8. 在 Host2 上,使用 docker network ls 指令確認是否有連到 consol service,畫面如下
https://ithelp.ithome.com.tw/upload/images/20171225/20103456drGjWylBlU.png

9. 在 Host2 上啟動一個 container,並且連到 overlay1 的網路,指令如下

$ docker run -it --name=container2 --net=overlay1 busybox

10. 測試在 container1 ping 到 container2 的 IP
container2 的畫面如下:
https://ithelp.ithome.com.tw/upload/images/20171225/20103456oAhIyqmk7P.png

container1 的畫面如下:
https://ithelp.ithome.com.tw/upload/images/20171225/20103456bbPY3MVvPw.png

今天介紹主要是透過 Docker 的 Overlay Network 模式,把不同實體主機上的 Container 連接在一起,這樣就可以把 Container 分散在不同的實體機器上執行。


上一篇
Day 21:介紹 Docker 的 Network (二)
下一篇
Day 23:使用 Docker Machine
系列文
用30天來介紹和使用 Docker30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
chichi
iT邦新手 2 級 ‧ 2018-01-13 01:30:55

我想問,--network 是等於 --net ?
有點不明白 cluster-store 和 cluster-advertise 作用。

docker run 的參數 --network 等於 --net

cluster-store:用來設定存放網路相關資訊的地方,這裡使用 consul 的 service 來存放網路資訊的地方。consul 可以把它當做是一個資料庫
cluster-advertise:設定需要使用哪一張的網路卡來溝通,以及指定 docker daemon 的 port

0
img21326
iT邦新手 5 級 ‧ 2018-03-13 12:00:38
{
  "live-restore": true,
  "group": "dockerroot",
  "hosts": [
     "unix:///var/run/docker.sock",
     "tcp://192.168.1.105:2375"
  ],
  "cluster-store": "consul://192.168.1.105:8500",
  "cluster-advertise": "eno3:2375"
}

抱歉打擾您
我無法重啟docker ><
網卡我是照著ifocnfig給的eno3..
不知道是哪裡出了錯

用swarm接overlay網路也失敗/images/emoticon/emoticon02.gif

因為目前提供的資訊有點難找出問題,我想先確認以下幾個資訊:

  1. 使用作業系統的版本?

  2. 使用 docker 的版本?

  3. 使用 lsof -i:2375 指令,確認 2375 的 port 是否有存在?

  4. 防火牆是否有把 2375 port 檔住?

  5. ifconfig 是否可以截圖下來給我看一下?

0
cary_chiu
iT邦新手 5 級 ‧ 2019-05-09 16:55:33

這位大大的搭建方法兩台虛擬機都看的到overlay network

搭建容器後網段也會一樣但是互相ping不通

consul網頁顯示lock sessions 想問是不是哪邊有疏忽

在vm1 創建 overlay network的時候在vm2也看的到

vm1 跟 vm2 都使用overlay創建容器往段看起來也是正常 但是兩個容器互相就是ping不通
------宿主資訊------
宿主下ifconfig
卻看不到10.0.*.*網段不知道算不算是正常
Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

docker 版本
Docker version 1.13.1, build b2f74b2/1.13.1

--------------容器資訊------------
https://ithelp.ithome.com.tw/upload/images/20190510/2011751201Xaoj4nhH.png

上下各是一台vm 架設同台電腦上
ping gateway都可以通但是ping對方容器會不通

https://ithelp.ithome.com.tw/upload/images/20190509/2011751233QXAeRT13.png

0
lonesomesnow
iT邦新手 5 級 ‧ 2019-10-22 14:34:42

可以提供host的ifconfig嗎?
你設定中的那些ip跟port是要怎麼設?
謝謝

0
tytom2005
iT邦新手 5 級 ‧ 2024-02-07 11:55:02

請問progrium/consul 在docker network裏是有什麼用?

我要留言

立即登入留言