Docker——容器通信


簡介

在接觸docker的第一天起,大家應該就知道:docker容器使用沙箱機制,相互之間沒有接口,一般情況下內部訪問通過IP+端口。本地容器默認分配的IP極易發生變化,所以靠IP+端口訪問的方式缺失穩定性。單機模式暫且不講,集群模式下容器間的通信僅通過內部IP是無法訪問的。docker給出解決方案是link和network,本文介紹一下network(link操作會復雜化容器之間的關系,本文既不推薦,也不予詳解)。

如果對docker基礎不清楚的,這里(強行安利一波)送一波傳送門:鏡像倉庫docker部署netcoredocker安裝——centosdocker資料卷——nginxdocker資料卷——mysql

network

network可以稱之為網橋,如果給不同容器指定了相同網橋,那么它們之間是可以相互訪問的。

使用以下命令查看docker的網橋:

docker network ls

這三個是默認的。在默認情況下,所有容器創建時都會被指派到bridge(這里說的是name而非driver)網橋下,使用以下命令查看bridge信息:

docker inspect bridge

信息會有很多,在海量的信息中找到Containers節點,這個節點內存儲了包含在本網橋下的所有容器。因為同在一個網橋下,所以訪問是沒問題的(容器asp_net_core是web應用,mysql01是數據庫,nginx001是web服務器,彼此關聯):

網橋的類型

如上圖所示,默認的網橋類型有三種:bridge、host、none。

bridge類似於虛擬機內網模式,host代表直接使用宿主機網絡,none表示容器不使用任何網絡。

假設你的服務器IP為 127.0.0.1 ,內有容器A和B,其中A在host模式網橋下,B在bridge模式網橋下,那么你訪問A可以直接使用 127.0.0.1:對應端口,訪問B則需要先使用-p指令將服務器IP映射到B中。

常用命令

新增
docker network create [-d 網橋類型] 網橋別名
ps:可以使用-d更改類型,如果不使用-d命令,則默認bridge。

刪除
docker network rm 網橋別名

查看列表
docker network ls

查看詳情
docker inspect 網橋別名

新容器指定網橋
docker run --name 容器別名 --network 網橋別名 鏡像名:版本/鏡像ID
PS:此命令不影響-v、-p等命令的使用

已有容器加入網橋
docker network connect 網橋別名 容器別名/容器ID

再說點沒用的

容器通信這個問題就像冰山,看起來很簡單,實際上水面以下還藏着很多未知。當應用的規模脫離單機,向集群、微服務演變時,才發覺單機下的通信只是冰山一角,很多問題在解決以后才發現,原來都是因為原理不夠清晰。

現在我覺得,並不是所有東西我們都要學(即便它真的很酷),如果因為學了就要去用,那就像孔雀的羽毛一樣華而不實。適合的才是最好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM