『中級篇』 Docker Bridge詳解(26)
原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
原文連結地址: ofollow,noindex">『中級篇』 Docker Bridge詳解(26)
上節主要學習了network-namespace,並建立了network-namespace,並把2個network-namespace連線在一起,我們也演示了建立一個容器test1和test2,其實在建立容器的同時也建立了對應的一個network-namespace,因為對應的一個容器他有自己的獨立網路空間。test1通過exec ip a的方式檢視對應的ip,和test2 通過exec ip a的方式檢視對應的ip。他們之前是互相可以ping通的。
到底docker的網路是如何配置的
sudo service docker restart sudo docker container start test1 sudo docker container start test2 sudo docker docker exec -it test1 /bin/sh ping www.baidu.com 複製程式碼
- 這裡的程式碼緊接上一節,vagrant啟動虛擬機器docker-node1,通過docker-node1啟動裡面的容器test1 和test2,當進入test1容器,ping baidu發現可以ping通。這是什麼原理呢,肯定是通過可以轉接的方式,容器---虛擬機器----宿主機--baidu。
為了更好的瞭解docker網路
- 停止test2,刪除test2
sudo docker ps sudo docker stop test2 sudo docker rm test2 sudo docker ps 複製程式碼
- docker 網路
可以看到一個 ,這也是linux中常見的一種網路結構。橋接的形式
sudo docker network ls 複製程式碼
對於test1 來講,他是通過bridge的方式
sudo docker inspect test1 複製程式碼
ip a 複製程式碼
這個機器有5個網路,除了lo,eth0,eth1,docker0,veth8765ce0@if5,上節課講過veth其實是連線了2個networknamespace,veth8765ce0@if5是負責連線docker0上邊的,容器test1裡面也應該有個和veth連線的。
sudo docker exec test1 ip a 複製程式碼
eth0@if6 和外邊的veth8765ce0@if5 其實是一對。
檢視他們的關係
sudo yum install -y bridge-utils #安裝後可以執行brctl這個命令了 brctl 複製程式碼
brctl show 複製程式碼
因為目前就一個test1的橋接,所以就顯示一個。
sudo docker run -d --name test2 busybox /bin/sh -c "while true; do sleep 3600;done" brctl show sudo docker network inspect bridge ip a 複製程式碼
多建立了容器,其實多了一對veth,容器內多了veth,宿主內也增加了veth,其實就類似一個線,他們互相連線。
test1 和test2 之前通過docker0,docker0 類似test1和test2之前的路由器,docker0 在通過nat的eth0連線網際網路
PS:主要理解容器之前如何的互相訪問,容器和外邊的世界如何通訊。