亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Docker:使用Ambassador進行跨主機間容器通信

系統 1980 0
      轉載請注明出處:
      
        點我
      
    

?

由于Docker自身的網絡的原因,想要在多主機間的容器之間進行通信是比較麻煩的事情??梢岳肁mbassador容器來實現這一功能。

基本原理:

利用Ambassador來實現主機間容器進行通信時,需要在兩臺需要通信的容器的主機上都啟動Ambassador容器。由Ambassador容器提供數據轉發服務。

Docker:使用Ambassador進行跨主機間容器通信

當客戶端主機上的容器client_container想要同服務器端主機上的容器server_container通信時,client_container容器直接訪問同一臺主機上運行的client_ambassador容器,請求會被client_ambassador容器轉發出去,達到服務端主機。服務端Ambassador容器server_ambassador監聽在對應的端口,收到請求后再轉發給服務器容器server_container。

下面是一個示例:

主機A為服務器端,上面運行了一個運行Flask程序的容器server_container,主機B為客戶端,上面運行一個容器client_container來訪問主機A上面的Flask程序。先來看看主機A上面的啟動server_container的image的Dockerfile文件:

      
         1
      
      
        FROM ubuntu


      
      
         2
      
       MAINTAINER rio_2607 j_huang@126
      
        .com


      
      
         3
      
      
         4
      
       RUN apt-
      
        get update


      
      
         5
      
       RUN apt-get install -y python-
      
        pip


      
      
         6
      
      
        RUN pip install flask


      
      
         7
      
      
         8
      
       ADD app.py /
      
        app


      
      
         9
      
       WORKDIR /
      
        app


      
      
        10
      
       EXPOSE 5002


      
        11
      
       CMD [
      
        "
      
      
        python'
      
      
        "
      
      ,
      
        "
      
      
        app.py
      
      
        "
      
      ]
    

從上面的代碼可以看到,我們把app.py文件復制到了/app目錄下,在把工作目錄切換到了/app目錄下面, 之后開放了5002端口,這一點很重要,開放的端口會影響后面的命令, 然后在容器啟動的時候會執行app.py文件?,F在來看下app.py文件中的代碼:

      
         1
      
      
        from
      
       flask 
      
        import
      
      
         Flask


      
      
         2
      
      
         3
      
       app = Flask(
      
        __name__
      
      
        )


      
      
         4
      
      
         5
      
       @app.route(
      
        '
      
      
        /
      
      
        '
      
      
        )


      
      
         6
      
      
        def
      
      
         hello():


      
      
         7
      
      
        return
      
      
        "
      
      
        Hello World
      
      
        "
      
      
         8
      
      
         9
      
      
        if
      
      
        "
      
      
        __main__
      
      
        "
      
       == 
      
        __name__
      
      
        :


      
      
        10
      
           app.run(host=
      
        "
      
      
        0.0.0.0
      
      
        "
      
      ,port=5002,debug=True)
    

代碼很簡單,不用解釋。啟動容器server_container:

      sudo docker run -d --name flask rio_2607/flask
    

現在在主機A上面啟動ambassador容器,并把flask容器link到這個ambassador容器上面去:

      sudo docker run -d --name server_ambassador --link flask:flask_f -p 5002:5002 svendowideit/ambassador
    

上面命令中可以看到 flask link后的別名是flask_f,這一點很重要,因為這會影響到server_ambassador的環境變量名字,也就會影響之后的命令 。現在進入這個server_ambassador里面看下環境變量:

      sudo docker 
      
        exec
      
       -it server_ambassador /bin/sh
    

進入之后使用env命令可以查看到下面的環境變量當前容器的環境變量:

Docker:使用Ambassador進行跨主機間容器通信

可以看到環境變量軍事以FLASK_F開頭的,我們接下來會使用FLASK_F_PORT_5002_TCP這個環境變量。

接下來我們在主機B上面啟動ambassador容器,命令如下:

      sudo docker run -d --name client_ambassador  --expose 5002 -e FLASK_F_PORT_5002_TCP=tcp://10.31.181.84:5002 svendowideit/ambassador
    

在上面這條命令中,我們傳入了FLASK_F_PORT_TCP這個環境變量,這個變量就是之前使用env命令看到的,這里 要把IP地址替換成運行改容器的主機 ,也就是主機A的IP地址。

接下來我們要啟動一個容器client_container來訪問主機A上面的Flask程序。這里我們僅僅是啟動一個ubuntu容器,安裝curl程序,啟動容器時,要把之前啟動的client_ambassador容器掛接過來。命令如下:

      sudo docker run -it --rm --link client_ambassador:am ubuntu /bin/bash
    

上面的命令中,我們把ambassador掛接到client_container容器中,別名為am?,F在,我們已經進入到了這個client_container中,安裝curl

      apt-
      
        get update 

apt
      
      -get install -y curl
    

安裝完curl之后,使用curl來訪問主機A上面的Flask程序,這是通過使用別名am來實現的

      curl am:5002
    

命令執行完成之后,可以看到結果如下:

可以看到curl命令返回了Hello World,表明主機B上面的client_container容器成功的訪問到了主機A上面的flask容器。

注意:在使用Ambassador容器實現容器跨主機通信的時候, Ambassador暴露出的端口最好要跟服務器端容器(本文中是flask容器,暴露出5002端口)暴露一致 。我在實驗的過程中把--expose 5002端口改成了其他的端口,curl命令連接失敗,跨主機通信失敗,原因暫時還沒有查明。

使用Ambassador 只能實現一對多 的容器跨主機通信,也就是說一臺機器A充當服務器,其他的機器統一訪問機器A,無法實現多對多的通信。

集群的話可以使用Docker公司的swarm來進行管理,接下來準備研究下swarm。

?

Docker:使用Ambassador進行跨主機間容器通信


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产激情对白一区二区三区四 | 亚洲成人第一页 | 4htv影院永久免费在线地址 | 天天艹夜夜艹 | 国产中文字幕在线 | 久久久久久亚洲精品影院 | 日韩久久精品视频 | 日日干日日草 | 日本视频中文字幕一区二区 | 亚洲三级欧美 | 欧美日韩高清观看一区二区 | 天天爽天天碰狠狠添 | 奇米网在线视频 | 玖玖国产在线观看 | 亚洲人成影院在线高清 | 亚洲综合色就色手机在线观看 | 视频精品一区二区三区 | 青草网址 | 偷偷操网站| 干成人 | 性生活视频网址 | 亚洲欧美日韩综合二区三区 | 天天综合天天 | 久久久小视频 | 奇米色在线视频 | 九九视频免费在线观看 | 韩国日本美国免费毛片 | 国产精品亚洲欧美日韩一区在线 | 欧美高清在线精品一区二区不卡 | 日日夜夜操操 | 精品亚洲在线 | 香蕉国产在线 | 久久婷婷色综合老司机 | 久久久久国产一级毛片高清片 | 2021国产精品系列一区二区 | 国产99在线 | 亚洲 | 色综合久久综合欧美综合 | 99精品国产成人一区二区在线 | 新久草在线视频 | 青青热久久久久综合精品 | 欧美在线色视频 |