1. 程式人生 > 其它 >hdfs小檔案合併

hdfs小檔案合併

理解Docker0(使用ip addr檢視網絡卡資訊)

當 Docker 啟動時,會自動在主機上建立一個 docker0 虛擬網橋,實際上是 Linux 的一個 bridge,可以理 解為一個軟體交換機。它會在掛載到它的網口之間進行轉發。

當建立一個 Docker 容器的時候,同時會建立了一對 veth pair 介面(當資料包傳送到一個介面時,另外 一個介面也可以收到相同的資料包)。這對介面一端在容器內,即 eth0 ;另一端在本地並被掛載到

docker0 網橋,名稱以 veth 開頭(例如 vethAQI2QT )。通過這種方式,主機可以跟容器通訊,容器 之間也可以相互通訊。Docker 就建立了在主機和所有容器之間一個虛擬共享網路。

原理:

  1. 我們每啟動一個docker容器,docker就會給容器分配一個ip,我們只要安裝了docker,就會有一個網絡卡docker0。
  2. 橋接模式,使用的技術是veth-pair技術。
  3. 這個容器帶來的網絡卡都是一一對應的。
  4. veth-pair就是一對的虛擬裝置介面,他們都是成對出現的,一端連著協議,一端彼此相連。
  5. 正因為有這個特性,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)。

一張圖總結Docker的命令