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

替代Docker Compose實現容器雙向聯通的三種方法

云計算
目前容器的雙聯是一個難點,必須手動配置。這篇文章介紹了實現雙聯的三種方法,對想玩容器的開發者來說有一定的幫助作用。

 Docker 是目前最熱門的技術平臺之一,他在產生后很短的時間內就獲得了社會的廣泛關注。簡單的說,他使得開發者和系統管理員能夠用一種簡易的方法去部署分布式應用。Docker 的生態系統非常龐大,有很多的工具協同工作,比如最常用的工具之一:Docker Compose。他使你可以在單個文件中定義并運行多容器應用,然后通過一個命令執行。

一個 docker-compose.yml 文件看起來是這樣的:

links 選項使容器能夠在一個運行中創建的內部網絡中通訊,并且在運行終止后銷毀。在上面的例子中,當這個應用啟動時,將在 web 容器中的 /etc/hosts 文件中建立一個別名為“redis”的入口,這使web容器能接通 redis 容器的服務。

問題

到目前為止,這個工具使你能夠通過一個命令運行多容器服務應用。但是,如果你的容器間有復雜的連通,這就有可能會導致問題甚至應用無法運行。這里復雜的意思是多于一個的容器通過 links 選項共用另一個容器的服務。舉例來說,在上面的應用中,web 容器想使用 redis 容器中的服務,如果在 redis 容器中添加“links:-web”并且通過 docker-compose 來運行他,你會看到如下信息:

事實上,這是 Docker 的一個歷史問題,Docker 的網絡系統曾有一些問題,而這正是一個典型體現。社區建議使用 ambassador pattern 作為解決這個問題的方法,但是這個解決方法增加了你應用的開銷,畢竟這只是一個變通方法,不是一個 docker 化的解決方式。

因為我在自己的應用開發中面臨這個問題,所以我尋找了一些基于 Docker 平臺和 Docker 工具的方法,下面是我嘗試成功的三種解決方法。

解決方案1:使用新的 Docker 網絡接口

Docker 在DockerCon 2015上宣布了很多新的特性和工具,其中一個進步就是新的網絡系統。新的網絡類型使我能夠采用一個簡單的方法來實現一個有復雜通訊的多容器應用。

使用下面的方法使在同一個私有網絡中的兩個容器相互可見。

創建一個網絡

  1. docker network create mynetwork 

通過列舉所有的網絡,確保這個網絡成功創建。

  1. docker network ls 

把容器連接到你的網絡上

打開一個終端,執行以下命令來運行一個容器:

  1. docker run -it --publish-service web.mynetwork web 

打開另一個終端并且運行另一個容器:

  1. docker run -it --publish-service redis.mynetwork redis 

容器相互可見

現在,你可以從第一個終端 ping redis.mynetwork 并且收到回復。同樣,從第二個終端,你可以 ping web.mynetwork 并收到回復。這是發布在.下的服務。

通過這種方法,你無需將自己的應用與 Docker Compose 鏈接,你只需創建一個網絡并且在這個網絡上發布服務。換句話說,我們將 docker-compose.yml 的連接替換為一個網絡。

雖然這個功能還在試驗中(在本文寫作時),但我認為這種靈活的方式就是運行多容器應用的未來,所以,建議你遵循 Docker 發展的方向。

解決方案2:在多主機網絡中使用 Docker Swarm 和 Compose

在多主機網絡中使用 Swarm 和 Compose 也是一個實驗性的功能。這個解決方案比前一個需要做更多的工作,但是,如果你有很多容器需要連接并且你打算讓他們運行在集群中,這是最好的解決方法。

關于解決的詳細流程,請參照 GitHub 里的原始功能介紹。首先,在多主機網絡中安裝 Swarm,然后你可以在去掉 links 選項后立即運行一個組合應用。為什么?因為從這個使用 Swarm 集群的多主機網絡上啟動的每一個容器都默認使用“overlay:multihost”網絡,這意味著他們可以通過容器名相互訪問。

因為這是實驗性功能,所以請在 GitHub 給作者反饋。

解決方案3:使用外部 DNS 容器

一個經典的解決方法(我覺得是臨時方法)是在你的 docker-compose.yml 文件中添加一個額外的容器。添加如下的容器到你的文件中。

  1. dnsdock: 
  2.  
  3. image: tonistiigi/dnsdock 
  4.  
  5. volumes: 
  6.  
  7. - /var/run/docker.sock:/run/docker.sock 
  8.  
  9. ports: 
  10.  
  11. 172.17.42.1:53:53/udp 

并且,在每個容器中你需要做如下的操作:

告訴容器 DNS 服務在什么位置:

  1. dns: 172.17.42.1 

命名每個容器使其對于服務發現可見

  1. environment: 
  2.  
  3. - DNSDOCK_NAME=web 
  4.  
  5. - DNSDOCK_IMAGE=web 

使用環境變量來完成這個命名。對 redis 容器做同樣的操作(不管你的其他容器是什么)。

現在容器在..docker下相互可見。這就是 redis 容器和 web 容器中的服務在 web.docker 下通信的方法。

原文鏈接:http://dockone.io/article/929

責任編輯:xinxiaoliang 來源: DockOne
相關推薦

2021-07-13 12:31:27

IT組織改進首席技術官

2013-01-04 15:47:54

Android開發平鋪UI設計

2009-07-08 12:56:32

編寫Servlet

2022-07-13 16:06:16

Python參數代碼

2009-12-11 18:49:39

預算編制博科資訊

2024-11-15 07:00:00

Python發送郵件

2011-04-18 15:32:45

游戲測試測試方法軟件測試

2010-09-14 15:10:49

CSS注釋

2023-08-14 17:58:13

RequestHTTP請求

2011-06-10 10:43:12

Ubuntu應用安裝

2009-06-23 10:45:18

Hibernate支持

2010-08-26 16:19:41

DIV圓角

2015-12-11 09:24:38

加密數據Linux

2022-02-16 07:00:00

機器學習特征選擇過濾法

2010-09-06 10:04:31

CSS樣式表

2023-05-16 16:07:07

大數據數據管理工具

2016-09-09 13:07:56

CentOSJDKLinux

2023-09-25 15:08:43

Python方離群值

2021-09-10 18:09:42

SQL注入漏洞網絡攻擊

2010-10-20 13:52:07

SQL Server數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久操av在线| 在线色网址 | 亚洲欧美一区二区三区在线 | 亚洲精品毛片av | 黄色日批视频 | 成人免费视频在线观看 | 精品av久久久久电影 | 国产精品久久久久一区二区三区 | 久久精品一级 | 久久久爽爽爽美女图片 | 欧美精品在线播放 | 一本大道久久a久久精二百 国产成人免费在线 | 午夜小视频在线播放 | 日韩成人精品在线 | 亚洲高清成人在线 | 亚洲iv一区二区三区 | 免费看91| 国产乱一区二区三区视频 | 北条麻妃99精品青青久久主播 | 日本天堂视频在线观看 | 久久久123 | 一级毛片免费看 | 91av在线视频观看 | 亚洲精品国产第一综合99久久 | 99成人在线视频 | 国产一区久久 | 欧美久久久久久久久 | 国产精品99久久久久久宅男 | 麻豆视频在线看 | 国产欧美精品 | 成人在线视频免费观看 | 成人日韩精品 | 欧美成人精品二区三区99精品 | 欧美综合国产精品久久丁香 | 狠狠入ady亚洲精品经典电影 | 久久久精品亚洲 | 国产成人免费视频网站视频社区 | 成人精品一区二区三区 | 成人精品鲁一区一区二区 | 中文字幕日韩一区 | 精品三区|