Docker網路

語言: CN / TW / HK

理解Docker0

三個網路

ip addr

  • lo 本地迴環地址
  • etho 內網地址
  • docker0 docker地址
問題:docker 是如何處理容器網路訪問的

docker run -d -P --name tomcat01 tomcat


# 檢視容器的內部網路地址 ,發現容器執行的時候會得到一個 **[email protected]** ip地址,docker分配的
docker exec -it tomcat01 ip addr

# Linux 可以 ping 通 docker 容器內部
ping ip地址

原理docker0

  1. 我們每啟動一個docker容器,docker就會給docker容器分配一個ip,只要安裝了docker,就會有一個網絡卡docker0
  • 橋接模式,使用的技術是evth-pair技術。
  • 再次測試ip addr
  1. 再啟動一個容器,發現又多了一對網絡卡
# 我們發現這個容器帶來網絡卡,都是一對一對的
# evth-pair  就是一對的虛擬裝置,他們都是成對出的,一端連著協議,一段彼此相連
# 正因為這個特性, evth-pair 充當一個橋樑,連線著各種虛擬網路裝置的
  1. 容器和容器之間是可以互相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

    建議使用自定義網路

自定義網路