創建一個容器就會創建一個它的network netspace
查看當前機器有哪些docker網絡:
docker network ls
結果:
查看指定網絡的元數據
docker network inspect NETWORKID
在得到的結果中,Containers字段包含的內容是使用此網絡的所有容器
查看bridge網絡使用的接口:brctl show
得到的結果中interfaces是本機連接bridge所使用的接口
同一個宿主機,兩個容器之間是如何通信的:
宿主機每創建一個容器,就會創建一個bridge接口連接到,同時容器也會創建一個bridge接口,這一對接口都連接在docker0這個bridge,這樣就可以通信了。
下面是示例圖,
兩個容器分別是兩個不同的network netspace,連接的是主機默認的一個network netspace,通過這個兩對線就連在了一起
對於單個容器它是如何訪問internet呢?
如果宿主機可以通過eth0訪問外網,那麼docker0通過一個NAT進行網絡地址轉換,那麼容器訪問外網時經過docker0這個bridge並之後通過NAT進行地址轉換eth0的地址,它就會作爲一個linux主機的數據包發到外面去
1.通過link
例如:
通過busybox創建一個容器名爲test1
docker run -d --name test1 busybox /bin/sh -c "while true; do sleep 3600; done"
再用busybox創建一個容器名爲test2,創建test2時使用了link鏈接了test1
docker run -d --name test2 --link test1 busybox /bin/sh -c "while true; do sleep 3600; done"