Docker和DevOps:9.容器間通信的底層原理

一、如何讓一個centos容器一直運行

  • 拉取一個centos的鏡像
    在這裏插入圖片描述
  • 創建兩個centos的容器,分別命名爲centos_1、centos_2
    使用 -dit 參數後該容器會一直保持運行
docker run -dit --name=centos_1 centos:latest
docker run -dit --name=centos_1 centos:latest

在這裏插入圖片描述

  • 使用docker attach可進入容器
docker attach [容器name]

在這裏插入圖片描述

  • 退出容器
    如果退出時不想讓這個容器繼續運行了,則直接輸入exit即可。
    如果退出時還想讓這個容器繼續運行,則【ctrl+p】後【ctrl+q】

二、查看網絡命名空間(network namespace)

  • 進入centos_1容器,使用 ip a 命令查看這個容器的網絡命名空間:
    在這裏插入圖片描述
  • 可以對比下,它的信息與本機、centos_2容器,都不同。
  • 說明docker給每個容器都分配了自己的網絡命名空間
  • 容器centos_1和容器centos_2是可以互相通信的
    在這裏插入圖片描述

三、Linux下手動創建一個網絡命名空間

(1) 新建

通過以下命令,新建一個網絡命名空間:

ip netns add [網絡命名空間名稱] 

在這裏插入圖片描述

(2) 查看

通過以下命令,查看本機手動創建的網絡命名空間

ip netns list

在這裏插入圖片描述

(3) 查看網絡命名空間的詳細信息

通過以下命令,查看指定的網絡命名空間的信息(IP等等)

ip netns exec [網絡命名空間名稱] ip a

在這裏插入圖片描述
發現只有一個接口,這個也叫本地迴環口,沒有IP地址。

(4) 查看網絡命名空間的網絡接口

通過以下命令,查看指定的網絡命名空間的網絡接口信息

ip netns exec [網絡命名空間名稱] ip link

在這裏插入圖片描述

(5) 啓用lo網絡接口

通過以下命令,將本地迴環口的狀態啓用

ip netns exec [網絡命名空間名稱] ip link set dev lo up

在這裏插入圖片描述
發現這個網絡命名空間的本地迴環口的狀態變爲了UNKNOWM,這是因爲一個網絡接口的開啓需要兩端都通。


四、使用一對veth使兩個網絡命名空間相通

(1) 在本機創建兩個網絡命名空間

之前創建了net_space_1,再創建一個net_space_2:
在這裏插入圖片描述

(2) Veth

上面我們創建的兩個網絡命名空間並不能互相通信,使用一對Veth可以把兩個網絡命名空間連接起來。
在這裏插入圖片描述

(3) 添加一對veth
  • 執行命令添加一對veth
ip link add veth-test1 type veth peer name veth-test2

這樣我們就添加了一對veth,名字是veth-test1、veth-test2

  • 執行命令查看veth
ip link

在這裏插入圖片描述

(4) 將一對veth的兩個端口分別添加到兩個網絡命名空間中
  • 將veth-test1添加到net_space_1中:
ip link set veth-test1 netns net_space_1

在這裏插入圖片描述

  • 查看網絡命名空間1的信息
ip netns exec net_space_1 ip link

在這裏插入圖片描述

  • 再看一下本機的連接信息
    會發現我們之前創建的一對veth,只剩下一個了,因爲veth-test1@veth-test2這個端已經被添加到網絡命名空間net_space_1中了在這裏插入圖片描述
  • 同上,將veth-test2添加到net_space_2中
ip link set veth-test2 netns net_space_2
ip netns exec net_space_2 ip link

在這裏插入圖片描述

(5) 給一對veth的兩個端口分配IP地址
  • 給兩個端口設置IP地址
ip netns exec net_space_1 ip addr add 192.168.1.1/24 dev veth-test1

ip netns exec net_space_2 ip addr add 192.168.1.2/24 dev veth-test2 

在這裏插入圖片描述

  • 啓用兩個端口
ip netns exec net_space_2 ip link set dev veth-test2 up

ip netns exec net_space_2 ip link set dev veth-test2 up
  • 查看兩個網絡命名空間的詳細IP信息
ip netns exec net_space_1 ip a

在這裏插入圖片描述

(6) 測試兩個網絡命名空間是否相通

在這裏插入圖片描述
在這裏插入圖片描述


五、容器間相互通信的原理

使用本機創建兩個容器,本機會爲每個容器分配一個網絡命名空間,然後這兩個容器能互相通信,即是兩個網絡命名空間能夠互相通信,原理與上面基本一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章