格力董明珠:會“堅持做手機”,做手機不是為了搶佔市場份額
理解Docker0(使用ip addr檢視網絡卡資訊)
當 Docker 啟動時,會自動在主機上建立一個 docker0 虛擬網橋,實際上是 Linux 的一個 bridge,可以理 解為一個軟體交換機。它會在掛載到它的網口之間進行轉發。
當建立一個 Docker 容器的時候,同時會建立了一對 veth pair 介面(當資料包傳送到一個介面時,另外 一個介面也可以收到相同的資料包)。這對介面一端在容器內,即 eth0 ;另一端在本地並被掛載到
docker0 網橋,名稱以 veth 開頭(例如 vethAQI2QT )。通過這種方式,主機可以跟容器通訊,容器 之間也可以相互通訊。Docker 就建立了在主機和所有容器之間一個虛擬共享網路。
原理:
- 我們每啟動一個docker容器,docker就會給容器分配一個ip,我們只要安裝了docker,就會有一個網絡卡docker0。
- 橋接模式,使用的技術是veth-pair技術。
- 這個容器帶來的網絡卡都是一一對應的。
- veth-pair就是一對的虛擬裝置介面,他們都是成對出現的,一端連著協議,一端彼此相連。
- 正因為有這個特性,veth-pair充當一個橋樑,連線各種虛擬網路裝置的。
如圖,tomcat01和tomcat02是公用的一個路由器,docker0所有的容器不指定網路的情況下,都是docker0路由的,docker會給我們的容器分配一個預設的可用IP。
Docker中的所有網路介面都是虛擬的。虛擬的轉發效率高!只要刪除容器,對應的一對網橋就沒了。
容器訪問外網
容器要想訪問外部網路,需要本地系統的轉發支援。
在Linux 系統中,檢查轉發是否開啟。
1
2
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
如果為 0,說明沒有開啟轉發,則需要手動開啟。
sysctl -w net.ipv4.ip_forward=1
如果在啟動 Docker 服務的時候設定--ip-forward=true
, Docker 就會自動設定系統的 ip_forward 引數 為 1。
–link
不需要用ip直接用容器名(服務名)ping
docker exec -it tomcat02 ping tomcat01
上面的無法ping通!
1
2
docker run -d -P --name tomcat03 --link tomcat02 tomcat
docker exec -it tomcat03 ping tomcat02
此時就可以ping同通
原理:
docker exec -it tomcat03 cat /etc/hosts
總結:
–link就是在hosts配置中增加一個對映
檢視網路資訊
1
2
docker network ls
docker network inspect 網路ID
網路模式
bridge:橋接模式(預設)
none:不配置網路
host:和宿主機共享網路
container:容器網路連通(用得少,侷限大)
docker run -d -P --name tomcat01 --net bridge tomcat
docker0特點:預設,域名不能訪問,–link可以打通
docker network create --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
解釋:docker network create 橋接的網路模式 子網 閘道器 名稱
docker run -d -P --name tomcat01 --net mynet tomcat
可以直接互相ping通
docker exec -it tomcat01 ping tomcat02
網路連通
docker network connect mynet tomcat00
不同網路下的容器也能互相連通,tomcat00是其他網路下的容器
Docker底層實現和網路實現
Docker 底層的核心技術包括 Linux 上的名字空間(Namespaces)、控制組(Control groups)、Union 文
件系統(Union file systems)和容器格式(Container format)。
Docker 的網路實現其實就是利用了 Linux 上的網路名字空間和虛擬網路裝置(特別是 veth pair)。