延續昨天介紹 Docker Network 的部份,已經實作了 none、container、host、bridge 的模式,今天要來實作的是 overlay 網路模式,這種模式主要是在不同的實體主機內的 Container 之間可以互相的溝通,如下圖:
上圖主要是說明 Host1 實體主機裡面有 Container1,然後 Host2 實體主機裡面有 Container2,可以透過 Docker Overlay 的 Network 的模式將 Container1 和 Container2 連接起來做溝通。另外 Consol 是一個存放連線資訊的資料庫,在使用 overlay 時必需要在 Docker 設定,這樣才能存放 overlay 網路模式的連線資訊。
另外在使用 overlay 網路模式時,要先確認 Linux Kernel 的版本。目前我使用的版本是 3.19.8 是可以正常執行的。
使用 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-store
和 cluster-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
,查看建立之後的結果,畫面如下
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,畫面如下
9. 在 Host2 上啟動一個 container,並且連到 overlay1 的網路,指令如下
$ docker run -it --name=container2 --net=overlay1 busybox
10. 測試在 container1 ping 到 container2 的 IP
container2 的畫面如下:
container1 的畫面如下:
今天介紹主要是透過 Docker 的 Overlay Network 模式,把不同實體主機上的 Container 連接在一起,這樣就可以把 Container 分散在不同的實體機器上執行。
我想問,--network 是等於 --net ?
有點不明白 cluster-store 和 cluster-advertise 作用。
docker run 的參數 --network 等於 --net
cluster-store
:用來設定存放網路相關資訊的地方,這裡使用 consul 的 service 來存放網路資訊的地方。consul 可以把它當做是一個資料庫cluster-advertise
:設定需要使用哪一張的網路卡來溝通,以及指定 docker daemon 的 port
{
"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網路也失敗
因為目前提供的資訊有點難找出問題,我想先確認以下幾個資訊:
使用作業系統的版本?
使用 docker 的版本?
使用 lsof -i:2375 指令,確認 2375 的 port 是否有存在?
防火牆是否有把 2375 port 檔住?
ifconfig 是否可以截圖下來給我看一下?
這位大大的搭建方法兩台虛擬機都看的到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
--------------容器資訊------------
上下各是一台vm 架設同台電腦上
ping gateway都可以通但是ping對方容器會不通