1. 程式人生 > Docker入門教學 >Docker 網路-container 模式

Docker 網路-container 模式

容器與主機、容器與容器之間是互相隔離的。同時,我們可以通過配置 docker 網路,為容器建立完全獨立的網路名稱空間,或者使容器共享主機或者其他容器的網路名稱空間,以應對不同場景的需要。

這裡有4 種常用的單宿主機網路模式:

  1. bridge 模式;
  2. host 模式;
  3. container 模式;
  4. none 模式。

本節將介紹網路模式中的 container 模式:

1. container 模式

與 host 模式類似,container 模式可以使一個容器共享另一個已存在容器的網路,此時這兩個容器共同使用同一網絡卡、主機名、IP 地址,容器間通訊可直接通過本地迴環 lo 介面通訊。

新執行一個 busybox 的容器 b1,設定它共享已存在的容器 b0 的網路:

docker run -d -t --network container:b0 --name b1 busybox

Tips:埠轉發設定以已存在的容器為準,出於安全和許可權控制的角度,container 模式下執行的容器設定埠轉發不生效。

檢視 b0,b1 的網路配置,驗證兩者的網路配置是否相同:

docker exec b0 ifconfig
docker exec b1 ifconfig

圖片描述

此時的網路拓撲圖如下:

圖片描述

container 網路拓撲

不再使用的容器記得刪除掉,釋放資源和空間

docker rm -f b0 b1

nginx 映象自帶的網路命令非常少,檢視網路不方便,而 busybox 的網路命令比較齊全,使用 container 模式,可以快速解決這個問題。

我們新執行一個名為 n0 的 nginx 容器,再將它的網路共享給 busybox 容器 n0-net:

docker run -d -t --name n0 nginx
docker run -d -t --network container:n0 --name n0-net busybox

使用 n0-net 容器,執行 docker exec n0-net ip a 進行網路狀態檢視自身網路資訊,也就是 nginx 的網路資訊

圖片描述

執行如下命令,通過 localhost 訪問 n0 的 web 服務,說明通過 container 模式下,共享的網路中的容器能夠使用 lo 訪問其他容器的服務。

docker exec
n0-net telnet localhost 80 # 在互動中輸入 # GET / #

圖片描述

不再使用的容器記得刪除掉,釋放資源和空間:

docker rm -f n0 n0-net

2. 小結

在 container 模式下的容器,會使用其他容器的網路名稱空間,其網路隔離性會處於 bridge 橋接模式與 host 模式之間:當容器共享其他容器的網路名稱空間,則在容器之間不存在網路隔離;而它們又與宿主機以及其他不在此共享中的容器存在網路隔離。