Docker 網絡 - container 模式
容器與主機、容器與容器之間是互相隔離的。同時,我們可以通過配置 docker 網絡,為容器創(chuàng)建完全獨立的網絡命名空間,或者使容器共享主機或者其他容器的網絡命名空間,以應對不同場景的需要。
這里有4 種常用的單宿主機網絡模式:
- bridge 模式;
- host 模式;
- container 模式;
- none 模式。
本節(jié)將介紹網絡模式中的 container 模式:
1. container 模式
與 host 模式類似,container 模式可以使一個容器共享另一個已存在容器的網絡,此時這兩個容器共同使用同一網卡、主機名、IP 地址,容器間通訊可直接通過本地回環(huán) lo 接口通訊。
新運行一個 busybox 的容器 b1,設定它共享已存在的容器 b0 的網絡:
docker run -d -t --network container:b0 --name b1 busybox
Tips:端口轉發(fā)設定以已存在的容器為準,出于安全和權限控制的角度,container 模式下運行的容器設定端口轉發(fā)不生效。
查看 b0,b1 的網絡配置,驗證兩者的網絡配置是否相同:
docker exec b0 ifconfig
docker exec b1 ifconfig
此時的網絡拓撲圖如下:
不再使用的容器記得刪除掉,釋放資源和空間
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 容器,執(zhí)行 docker exec n0-net ip a
進行網絡狀態(tài)查看自身網絡信息,也就是 nginx 的網絡信息
執(zhí)行如下命令,通過 localhost 訪問 n0 的 web 服務,說明通過 container 模式下,共享的網絡中的容器能夠使用 lo 訪問其他容器的服務。
docker exec n0-net telnet localhost 80
# 在交互中輸入
# GET /
#
不再使用的容器記得刪除掉,釋放資源和空間:
docker rm -f n0 n0-net
2. 小結
在 container 模式下的容器,會使用其他容器的網絡命名空間,其網絡隔離性會處于 bridge 橋接模式與 host 模式之間:當容器共享其他容器的網絡命名空間,則在容器之間不存在網絡隔離;而它們又與宿主機以及其他不在此共享中的容器存在網絡隔離。