Libnetwork官方示例
我們初步瞭解了libnetwork中各個組件和驅動後,爲了能深入的理解libnetwork中的CNM模型和熟悉docker network子命令的使用,我們來通過libnetwork官方github上的示例進行驗證一下,如下圖所示:
在上圖示例中,使用Docker 默認的bridge驅動進行演示。在此例中,會在Docker上組成一個網絡拓撲的應用:
它有兩個網絡,其中backend network爲後端網絡,frontend network則爲前端網絡,兩個網絡互不聯通。(這兩個網絡呆會兒演示的時候會創建出來)
其中容器1和容器3各擁有一個端點,並且分別加入後端網絡(backend network)和前端網絡(frontend network)中。而容器2則有兩個端點,它們分別加入到後端網絡和前端網絡。
1、通過以下命令分別創建名爲backend、frontend兩個網絡:
docker network create backend
docker network create frontend
2、使用docker network ls 可以查看這臺主機上的所有Docker網絡:
root@centos-mysql01:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
4bb7db8603b3 backend bridge local
89eecd0d67f8 bridge bridge local
4f90775dde19 frontend bridge local
68a185af2068 host host local
7121b3b8e5e9 none null local
除了剛纔創建的backend和frontend之外,還有3個網絡。這3個網絡是Docker daemon默認創建的,分別使用了3種不同的驅動,而這3種驅動則對應了Docker原來的3種網絡模式。需要注意的是,3種內置的默認網絡是無法使用docker network rm進行刪除的,不信你們試一下。
3、接下來創建3個容器,並使用下面的命令將名爲c1和c2的容器加入到backend網絡中,將名爲c3的容器加入到frontend網絡中:
docker run -itd --name c3 --net backend centos
docker run -itd --name c2 --net backend centos
docker run -itd --name c1 --net frontend centos
然後,分別進入c1和c3容器使用ping命令測試其與c2的連通性,因爲c2和c3都在backend網絡中,所以兩者可以連通。但是,因爲c2和c1不在一個網絡中,所以兩個容器之間不能連通:
docker exec -it c2 /bin/bash
# yum install -y net-tools #安裝網絡工具包
# ping c1 #處於frontend 不通
# ping c2 #處於backend 通
# ping c3 #處於backend 通
使用如下命令將c2容器加入到backend網絡中
# docker network connect backend c1
發現現在ip地址是通的了