docker 容器間通信
方式一(IP通信)
兩個容器可以想象成兩個虛擬機,虛擬機直接互信通信,當然通過IP進行通信。那麼我們可以得出:容器間通信,需要容器內配有屬於同一個網路的IP。
容器間通過IP通信,走網路傳輸數據,和我們之前的生產環境出奇的一致,很方便理解。
如何為容器添加IP呢?
請參考這個《docker 創建容器時指定容器ip》文章。
今天我們聊點新鮮的,如何為一個容器添加一個網卡。
假設你已經啟動了一個容器,名為centos7_test。
之前啟動centos7_test容器時,執行了--network=none,選擇了不創建網卡模式。
此時centos7_test容器內是一張網卡都沒有的,那麼想為它添加一個網卡該怎麼辦呢?
Advertisements
[root@cgls ~]# docker network connect bridge centos7_test
我們選擇為centos7_test容器添加一個bridge 網路的ip,由於bridge 網路會自動分配一個172.17.0.0/16網段的ip。此刻你的容器就成功被添加了網卡。
方式二(Docker DNS Server)
在實際部署過程中,有時候我們一開始不知道各容器的IP是多少,但是為了能連通各容器,docker daemon 使用內嵌的 DNS server,使容器通過「容器名」進行通信。
啟動兩個容器
[root@cgls ~]# docker run -itd --name centos7_test1 centos
Advertisements
[root@cgls ~]# docker run -itd --name centos7_test2 centos
此刻可以通過容器name進行互相訪問。
方式三(joined 容器)
joined 容器,顧名思義通過容器進行連接。說白了就是多個容器共享一個網路棧,共享網卡和配置信息,這些容器共同組成了一個大容器。:
先創建一個
[root@cgls ~]# docker run -itd --name centos7_test3 centos
然後創建新容器並通過 --network=container:centos7_test3 指定 jointed 容器為 centos7_test3
[root@cgls ~]# docker run -itd --name centos7_test4 --network=container:centos7_test3 centos
centos7_test3 與centos7_test4 此刻都在一個虛擬的大容器中,通信也是OK的。