【3.4】docker基礎知識 網絡

在 Docker 早期階段,網絡部分代碼都存在于 daemon 當中。daemon 變得臃腫,并且不符合 UNIX 工具模塊化設計原則,即既能獨立工作,又易于集成到其他項目。

所以,Docker 將該網絡部分從 daemon 中拆分,并重構為一個叫作 Libnetwork 的外部類庫。

現在,Docker 核心網絡架構代碼都在 Libnetwork 當中。Libnetwork 實現了 CNM 中定義的全部 3 個組件。此外它還實現了本地服務發現(Service Discovery)、基于 Ingress 的容器負載均衡,以及網絡控制層和管理層功能。

Docker 網絡架構的設計規范是 CNM。CNM 中規定了 Docker 網絡的基礎組成要素,完整內容見 GitHub 的 docker/libnetwork 庫。

抽象來講,CNM 定義了 3 個基本要素:沙盒(Sandbox)、終端(Endpoint)和網絡(Network)。

  • 沙盒是一個獨立的網絡棧。其中包括以太網接口、端口、路由表以及 DNS 配置。
  • 終端就是虛擬網絡接口。就像普通網絡接口一樣,終端主要職責是負責創建連接。在 CNM 中,終端負責將沙盒連接到網絡。
  • 網絡是 802.1d 網橋(類似大家熟知的交換機)的軟件實現。因此,網絡就是需要交互的終端的集合,并且終端之間相互獨立。

兩個均包含相同本地橋接網絡 mynet 的 Docker 主機。雖然網絡是相同的,但卻是兩個獨立的網絡。這意味著圖中容器無法直接進行通信,因為并不在一個網絡當中。每個 Docker 主機都有一個默認的單機橋接網絡。


image.png

網絡基本命令

# 列出網絡
docker network ls

# 網絡詳細
docker network inspect

# 創建新的單機橋接網絡
// Linux
docker network create -d bridge localnet
// Windows
docker network create -d nat localnet

# 創建一個新的容器,并接入到新建橋接網絡 localnet 當中
docker run -d --name c1 \
--network localnet \
alpine sleep 1d

# 刪除 Docker 主機上全部未使用的網絡。
docker network prune
# 刪除 Docker 主機上指定網絡。
docker network rm localnet

# 給容器添加網絡
docker network connect nginx localnet
# 連接時指定ip
docker network connect --ip 192.168.10.10 net1 ctn1

# 將兩個容器 link方式連接到一起
docker network connect --link my-ctn1 my-ctn2

# 給容器斷開網絡
docker network disconnect nginx localnet

在 2015 年 3 月,Docker 公司收購了一個叫作 Socket Plane 的網絡初創企業。收購的原因有二,首先是因為這會給 Docker 帶來真正意義的網絡架構,其次是讓容器間聯網變得非常簡單,以至于開發人員都可以配置它。

Docker 公司在這兩點上都取得了巨大的成功。但是,簡潔的網絡命令實際由大量的組件構成。這部分內容是在進行生產環境部署和問題定位前必須要了解的。

構建 Swarm

【4.1】服務器安裝 Docker Swarm中搭建 Portainer 中介紹了swarm的搭建

覆蓋網絡

# 在 swarm 的主機上執行
docker network create -d overlay my-net
docker network ls


image.png
image.png

local bridge 網絡 一般是以172 /16的
swarm overlay 一般是 10 /24 的

除了這兩種還有
host 即直接使用宿主機的網絡
none 即不適用任何網絡
ipvlan/macvlan 虛擬的ip/虛擬mac

點波關注 系統搭建(docker)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容