一文帶你了解Docker網絡模型
1.Docker網絡
1.1 Docker網絡模型概述
Docker是一種容器化平臺,它提供了一種輕量級的虛擬化解決方案,使得應用程序能夠以容器的形式運行。在Docker中,每個容器都有自己的網絡棧,可以與其他容器或主機進行通信。Docker網絡模型為容器提供了靈活的網絡配置和連接選項。
Docker網絡模型基于Linux內核的網絡命名空間和虛擬以太網橋技術。每個Docker容器都有自己的網絡命名空間,這意味著每個容器都有自己的網絡接口、IP地址和路由表。Docker還提供了一些網絡驅動程序,用于實現容器之間的通信和與外部網絡的連接。
Docker網絡模型是一個三層的網絡模型,它允許容器之間的通信,并提供了多種網絡驅動程序供用戶選擇。Docker網絡模型的核心組件包括:
Docker網絡:Docker網絡是一組容器的虛擬網絡,它允許容器之間進行通信。每個Docker網絡都有自己的IP地址范圍和子網掩碼。
Docker網橋:Docker網橋是一個虛擬交換機,它連接了Docker網絡和物理網絡,并負責容器之間的通信。
容器網絡接口(CNI):CNI是一個插件接口,用于配置容器的網絡。它定義了一組標準接口和一套配置規(guī)范,使得不同的網絡驅動程序可以無縫切換。
1.2 Docker網絡驅動程序
Docker提供了多種網絡驅動程序,用于實現不同的網絡連接方式。以下是一些常用的網絡驅動程序:
1.2.1 host模式
host驅動程序將容器與主機網絡共享,容器將直接使用主機的網絡棧和IP地址。這意味著容器可以通過主機的IP地址與外部網絡進行通信,但容器之間無法直接通信。使用host模式的容器可以直接使用宿主機的IP地址與外界通信,容器內部的服務端口也可以使用宿主機的端口,host最大的優(yōu)勢就是網絡性能比較好,但是docker host上已經使用的端口就不能再用了,網絡的隔離性不好。
使用host驅動程序創(chuàng)建一個容器網絡,只需運行以下命令:
$ docker run --name mycontainer --network host nginx
1.2.2 bridge模式
bridge驅動程序是Docker默認的網絡驅動程序。它基于Linux內核的bridge技術,創(chuàng)建一個虛擬的以太網橋,用于連接容器和主機網絡。每個容器都會分配一個獨立的IP地址,并通過橋接方式與其他容器通信。bridge模式是docker的默認網絡模式,不寫--net參數,就是bridge模式。
當Docker進程啟動時,會在主機上創(chuàng)建一個名為docker0的虛擬網橋,此主機上啟動的Docker容器都會連接到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網絡中。
從docker0子網中分配一個IP給容器使用,并設置docker0的IP地址為容器的默認網關。在主機上創(chuàng)建一對虛擬網卡veth pair設備,Docker將veth pair設備的一端放在新創(chuàng)建的容器中,并命名為eth0(容器的網卡),另一端放在主機中,以vethxxx這樣類似的名字命名,并將這個網絡設備加入到docker0網橋中。如下圖:

從上圖中我們可以看到,可以看到容器內部和Linux主機都會創(chuàng)建一個新的網卡,而這兩個網卡都是成對的。使用的技術就是evth-pair。evth-pair 就是一對的虛擬設備接口,他們是成對出現的,一段連著協(xié)議,一段彼此相連。evth-pair充當一個橋梁,連接各種虛擬網絡設備。
Docker容器完成bridge網絡配置的過程如下:
1. 在主機上創(chuàng)建一對虛擬網卡veth pair設備。veth設備總是成對出現的,它們組成了一個數據的通道,數據從一個設備進入,就會從另一個設備出來。因此,veth設備常用來連接兩個網絡設備。
2. Docker將veth pair設備的一端放在新創(chuàng)建的容器中,并命名為eth0。另一端放在主機中,以veth這樣類似的名字命名,并將這個網絡設備加入到docker0網橋中。
3. 從docker0子網中分配一個IP給容器使用,并設置docker0的IP地址為容器的默認網關。一般在docker中docker0的IP地址就相當于localhost。
使用bridge驅動程序創(chuàng)建一個容器網絡非常簡單,只需運行以下命令:
$ docker run --name mycontainer --network bridge nginx
1.2.3 container模式
這個模式指定新創(chuàng)建的容器和已經存在的一個容器共享一個Network Namespace (網絡命名空間),而不是和宿主機共享。新創(chuàng)建的容器不會創(chuàng)建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口范圍等。同樣,兩個容器除了網絡方面,其他的如文件系統(tǒng)、進程列表等還是隔離的。兩個容器的進程可以通過lo網卡設備通信。
1.2.4 none模式
使用none模式,Docker 容器擁有自己的Network Namespace ,但是,并不為Docker 容器進行任何網絡配置。也就是說,這個Docker 容器沒有網卡、IP、路由等信息。這種網絡模式下容器只有l(wèi)o回環(huán)網絡,沒有其他網卡。這種類型的網絡沒有辦法聯(lián)網,封閉的網絡能很好的保證容器的安全性。
1.3 Docker網絡命令示例
1.3.1 創(chuàng)建一個自定義網絡
$ docker network create mynetwork
1.3.2 列出所有網絡
$ docker network ls
1.3.3 連接容器到網絡
$ docker network connect mynetwork mycontainer
1.3.4 斷開容器與網絡的連接
$ docker network disconnect mynetwork mycontainer
1.3.5 查看容器的網絡信息
$ docker network inspect mynetwork
到此這篇關于一文帶你了解Docker網絡模型的文章就介紹到這了,更多相關Docker 網絡模型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Docker搭建PHP運行環(huán)境完整步驟(圖文教程)
PHP是一種廣泛使用的編程語言,被用于Web開發(fā)和服務器管理等各種用途,而Docker則是一種非常流行的容器化平臺,可以方便地管理應用程序和環(huán)境,這篇文章主要給大家介紹了關于Docker搭建PHP運行環(huán)境的完整步驟,需要的朋友可以參考下2023-09-09

