成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【Docker】利用ambassador實現container跨主機連接

云計算
針對于不同主機上的兩個container,docker目前并沒有提供直接有效的方法來實現它們之間的連接,必須借助其它工具來實現。docker主頁的文章Link via an Ambassador Container介紹了一種方法,通過ambassador pattern來實現container跨主機連接,這里對這種方法做一下解釋。

針對于同一個主機上的兩個container,我們可以使用docker的link機制來它們之間的連接。

然而,針對于不同主機上的兩個container,docker目前并沒有提供直接有效的方法來實現它們之間的連接,必須借助其它工具來實現。docker主頁的文章Link via an Ambassador Container介紹了一種方法,通過ambassador pattern來實現container跨主機連接,這里對這種方法做一下解釋。

主機VM1上有裝有Redis Server的container,主機VM2上有裝有Redis Client的container,為了實現Redis Client和Redis Server之間跨主機的連接,需要借助Ambassador容器,這里VM1上有一個Ambassador容器Ambassador1,VM2上有一個Ambassador容器Ambassador2。

這個方法是如何工作的呢?我們看一下下面的流程:

Ambassador1容器通過link方式確定Redis Server容器的ip地址和開放的6379端口,然后利用socat將容器內部的6379端口收到的信息重定向到RedisServer容器的6379端口;
VM1將自己的6379端口綁定到Ambassador1容器的6379端口;
Ambassador2通過傳入環境變量的方式確定VM1的ip地址和6379端口,然后利用socat將容器內部的6379端口收到的信息重定向到VM1的6379端口;
Redis Client容器通過link方式確定Ambassador2容器的ip地址和開放的6379端口,然后用redis-cli直接連接,連接請求將經過Ambassador2、Ambassador1,***發送到Redis Server的6379端口。

啟動這4個container的命令如下:

啟動Redis Server:

  1. sudo docker run -d --name redis redis 

啟動Ambassador1:

  1. sudo docker run -d --link redis:redis --name ambassador1 -p 6379:6379 ambassador 

啟動Ambassador2:(其中x.x.x.x表示VM1的ip地址)

  1. sudo docker run -d --name ambassador2 --expose 6379 -e REDIS_PORT_6379_TCP=tcp://x.x.x.x:6379 ambassador 

啟動Redis Client:

  1. sudo docker run -i -t --rm --link ambassador2:redis redis-cli 

而Ambassador容器是如何利用linux端口映射socat來實現跨主機的通訊呢?

在svendowideit/Ambassador的Dockerfile里面,有一行關鍵的代碼:

  1. CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/'  | sh && top 

這行代碼的用法是在環境變量中找到包含"_TCP"的行,然后將從滿足正則表達式".*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)"的環境變量中提取ip和端口號,并執行"socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&",其中/1表示環境變量名中指示端口號,/2表示ip地址,/3表示端口號。這個環境變量之所以這么命名,是由于docker link的機制是將被link的container的ip、端口、協議等信息以環境變量的形式放到link中去。

以Ambassador1為例,我們在啟動Ambassador1以后,可以查看里面的環境變量:

[[122514]]

這里REDIS_PORT_6379_TCP=tcp://172.17.0.2:6379就是用于提取信息的環境變量,其中REDIS為Redis Server的在Ambassador1中的別名,是我們在link的時候制定的;6379為Redis Server開放的6379端口,用于提供Redis服務;172.17.0.2為Redis Server的ip地址。如此,Ambassador1就能知道Redis Server服務的ip和端口,就能通過socat將redis訪問請求轉發給Redis Server。同理,我們就可以建立Redis Client——Ambassador2——Ambassador1——Redis Server的連接。

這種方式有一個缺點,就是在Ambassador2和Ambassador1建立連接的時候,Ambassador2必須要知道Ambassador1所在主機VM1的ip地址,從而硬編碼設置環境變量REDIS_PORT_6379_TCP,這樣靈活性就比較差,并且當我們不知道VM1的ip地址時,這種方法是無法使用的。

原文出自:http://blog.csdn.net/sunset108/article/details/40856957

責任編輯:Ophira 來源: sunset108的專欄
相關推薦

2017-03-28 10:20:24

Docker通信分析

2011-08-05 11:29:07

路由器

2014-10-24 17:01:15

微軟Docker

2023-09-15 10:15:43

Docker網絡

2015-11-09 09:52:23

Docker1.9跨主機網絡新特性

2022-07-20 15:19:17

容器Docker

2009-12-17 13:53:31

Route路由功能

2015-01-08 10:29:59

Shipyardweb管理集中化

2012-02-17 00:01:21

heartbeat節點高可用

2020-02-05 14:31:04

兩種互通方法

2010-01-27 13:28:07

SSH網絡安全連接FUSE

2009-12-08 17:00:19

路由器功能

2014-09-28 10:37:45

LinuxNagiosNRPE

2014-09-16 10:34:59

Docker達龍云

2014-09-17 15:44:42

DockerContainer虛擬化

2018-09-06 14:29:13

容器主機存儲

2017-03-22 09:39:09

Docker數據容器

2014-06-03 09:55:34

DockerLinux容器Ubuntu

2013-12-11 09:51:33

2014-09-18 14:13:54

Docker
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 韩日在线 | 精品欧美乱码久久久久久1区2区 | 亚洲福利网 | 中文字幕视频在线观看 | 日韩精品无码一区二区三区 | 免费99精品国产自在在线 | 色又黄又爽网站www久久 | 国产伦精品一区二区 | 国产福利免费视频 | 久视频在线观看 | 欧洲成人| 色婷婷综合久久久中字幕精品久久 | 成人免费看 | 亚洲+变态+欧美+另类+精品 | 香蕉视频黄色 | www.夜夜草| 天堂中文资源在线 | 亚洲欧美日韩成人在线 | 久久久久一区 | 久久亚洲欧美日韩精品专区 | 国产精品久久久久久久久久久久久 | 人人人人爽| 一区二区三区欧美在线 | 亚洲日韩中文字幕一区 | 视频在线观看亚洲 | 精品一区二区三区四区五区 | 日本精品视频 | 大象一区 | 成人性生交大片 | 日韩成人精品 | 亚洲成人精品在线 | 成人乱人乱一区二区三区软件 | 欧美一级欧美一级在线播放 | 欧美成人一级视频 | 久久精品国产一区二区电影 | 亚洲国产成人精品女人久久久 | 日韩色图在线观看 | 日韩欧美国产一区二区 | 色综久久 | 国产欧美精品一区二区 | 亚洲精品电影在线观看 |