理解Docker0
三個網路
ip addr
- lo 本地迴環地址
- etho 內網地址
- docker0 docker地址
問題:docker 是如何處理容器網路訪問的
docker run -d -P --name tomcat01 tomcat
# 檢視容器的內部網路地址 ,發現容器執行的時候會得到一個 **eth0@if262** ip地址,docker分配的
docker exec -it tomcat01 ip addr
# Linux 可以 ping 通 docker 容器內部
ping ip地址
原理docker0
- 我們每啟動一個docker容器,docker就會給docker容器分配一個ip,只要安裝了docker,就會有一個網路卡docker0
- 橋接模式,使用的技術是evth-pair技術。
- 再次測試ip addr
- 再啟動一個容器,發現又多了一對網路卡
# 我們發現這個容器帶來網路卡,都是一對一對的
# evth-pair 就是一對的虛擬裝置,他們都是成對出的,一端連著協議,一段彼此相連
# 正因為這個特性, evth-pair 充當一個橋樑,連線著各種虛擬網路裝置的
- 容器和容器之間是可以互相ping通的
- docker01 ping docker02
結論:tomcat01 和 tomcat02 是公用的一個路由器,docker0
所有的容器不指定網路的情況下,都是 docker0 路由的,docker會給我們的容器分配一個預設的可用IP - docker使用的是Linux的橋接,宿主機中是一個Docker容器的網橋docker0
- Docker中的所有的網路介面都是虛擬的,虛擬的轉發效率高
- 只要刪除容器,對應的網橋一對就沒了
--link
# error
docker exec -it tomcat02 ping tomcat01
# 解決,通過 --link 即可以解決了網路聯通問題
docker run -d -P --name tomcat03 --link tomcat02 tomcat
# success
docker exec -it tomcat03 ping tomcat02
# 但是反向不可以ping
docker exec -it tomcat02 ping tomcat03
- 本質探究
--link就是在hosts配置中增加了一個172.18.0.3 tomcat02 312857784cd4
建議使用自定義網路