1. 程式人生 > >docker不同容器間的通訊

docker不同容器間的通訊

轉載自:http://blog.csdn.net/zhangyifei216/article/details/50921215



一)在docker的低版本中(1.7.1),同一個宿主機上的多個docker容器之間如果想進行通訊,有3種方式:
  1)通過使用容器的ip地址來通訊,會導致ip地址的硬編碼,不方便遷移,並且容器重啟後ip地址會改變,除非使用固定的ip.
  2)通過宿主機的ip加上容器暴露出的埠號來通訊,通訊方式比較單一,只能依靠監聽在暴露出的埠的程序來進行有限的通訊。
     用法: extra_hosts
  3)通過docker的link機制可以通過一個name來和另一個容器通訊,link機制方便了容器去發現其它的容器並且可以安全的傳遞一些連線資訊給其它的容器。用法:links :-容器名


二)高版本的docker中可以直接呼叫
    docker引入網路新特性後,內建了一個DNS Server,但是隻有使用者建立了自定義網路後,這個DNS Server才會起作用。
    在網路新特性為未引入之前,有三種網路,第一種就是docker0這種橋接網路,用的也是最多的,第二個則是複用主機網路,稱為  HOST網路,第三種就是none網路,只建立了一個空的網路名稱空間,沒有網路介面,無法和外界通訊,可以讓使用者自己去構建網路。當網路新特性引入後,有了overlay網路,有了使用者自定義網路。使用者自定義網路下,使用者可以通過docker的network子命令建立一個自定義的橋接網路,這個自定義橋接的網路和預設的docker0橋接網路基本功能都是一致的,只是在這個自定義橋接網路中擁有一些特性,可以替代link機制。這些特性包括如下幾個方面:
基於DNS的名稱自動解析
安全的隔離環境
動態的附加或者脫離一個網路
支援使用–link設定別名
在使用者自定義網路下,不使用link機制就可以實現名稱解析功能了,不再是通過link機制追加名稱解析關係到/etc/hosts檔案中了。並且在預設的docker0橋接網路和自定義網路下使用link機制的效果是不一樣的,在自定義網路中link機制只是負責設定別名的,不再提供環境變數注入的功能了。自定義網路中同時也提供了--net-alias功能和link機制提供別名功能是一樣的。保留link機制目的是為了相容。