日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Docker四種網絡模式演示及連通性測試_docker

作者:Tiamon_ ? 更新時間: 2022-06-13 編程語言

Docker 的四種網絡模式

網絡模式 網絡配置 說明
host(開放式網絡模式) –network host 容器和宿主機共享 Network namespace
container(聯合掛載式網絡模式) –network container 多個容器共享一個 Network namespace
none(封閉式網絡模式) –network none 將容器放置在它自己的網絡棧中,但是并不進行任何配置,該模式關閉了容器的網絡功能
bridge(橋接式網絡模式) –network bridge Docker默認的網絡設置,此模式會為每一個容器分配Network Namespace、設置IP等

docker network 查看 docker 網絡模式

[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
15791bf83278        bridge              bridge              local
df75b40e39f6        host                host                local
f89ee64125bc        none                null                local

docker run --network 命令可以指定使用的網絡模式

host 模式

在這里插入圖片描述

如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace 。容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口 。但是, 容器的其他方面,如文件系統、進程列表等還是和宿主機隔離的 。

使用host模式的容器可以直接使用宿主機的IP地址與外界通信,容器內部的服務端口也可以使用宿主機的端口,不需要進行NAT,host最大的優勢就是網絡性能比較好,但是docker host上已經使用的端口就不能再用了,網絡的隔離性不好。

host 模式演示

以 host 網路模式運行容器centos

[root@docker ~]# docker run -itd --name centos --network host centos:latest

查看該容器的網絡模式

[root@docker ~]# docker inspect 40c4e28bd29c | grep -i network
            "NetworkMode": "host",
        "NetworkSettings": {
            "Networks": {
                    "NetworkID": "df75b40e39f671cbc4d287fefce8b7b64819fcad453cfe7f34831f6490480760",

查看容器 IP

[root@docker ~]# docker exec -it $(docker ps -q) hostname -I 
192.168.117.130 172.17.0.1 

container 模式

在這里插入圖片描述

這個模式指定 新創建的容器和已經存在的一個容器共享一個 Network Namespace ,而不是和宿主機共享。 新創建的容器不會創建自己的網卡,配置自己的 IP,而是和一個指定的容器共享 IP、端口范圍 等。同樣, 兩個容器除了網絡方面,其他的如文件系統、進程列表等還是隔離的 。兩個容器的進程可以通過 lo 網卡設備通信。

container 模式演示

使用 bridge 網絡模式啟動一個 centos_1 容器

	[root@docker ~]# docker run -itd --name centos_1 --network bridge centos:latest
	10ec9d1e3a6b7530cff797cdfc2c44702b62f9f29dcee679306a0262d1e41226
#查看該容器的網絡模式
	[root@docker ~]# docker inspect 10ec9d1e3a6b | grep -i network
            "NetworkMode": "bridge",
        "NetworkSettings": {
            "Networks": {
                    "NetworkID": "ae7c4bfdd3910f8a00cb962afd06cf296d7d04a99611a6ab154d496ca777183b",
#查看容器IP
	[root@docker ~]# docker exec -it 10ec9d1e3a6b hostname -I
	172.17.0.2 

使用 container 網絡模式啟動一個 centos_2 容器

	[root@docker ~]# docker run -itd --name centos_2 --network container:centos_1 centos:latest
	1f7d976b3f80dd064fd87902dacefc72b617acc6f7917a2f0adb434cb5ff0d11
#查看該容器的網絡模式
	[root@docker ~]# docker inspect 1f7d976b3f80 | grep -i network
            "NetworkMode": "container:centos_1",
        "NetworkSettings": {
            "Networks": {}
#查看容器IP
	[root@docker ~]# docker exec -it 1f7d976b3f80 hostname -I
	172.17.0.2 

測試 centos_2 與宿主機的連通性

#通信正常
	[root@docker ~]# docker exec -it 1f7d976b3f80 ping 192.168.117.130
	PING 192.168.117.130 (192.168.117.130) 56(84) bytes of data.
	64 bytes from 192.168.117.130: icmp_seq=1 ttl=64 time=0.135 ms
	64 bytes from 192.168.117.130: icmp_seq=2 ttl=64 time=0.046 ms
	64 bytes from 192.168.117.130: icmp_seq=3 ttl=64 time=0.057 ms

測試 centos_2 與外網的連通性

#通信正常
	[root@docker ~]# docker exec -it 1f7d976b3f80 ping www.baidu.com
	PING www.a.shifen.com (61.135.185.32) 56(84) bytes of data.
	64 bytes from 61.135.185.32 (61.135.185.32): icmp_seq=1 ttl=127 time=4.45 ms
	64 bytes from 61.135.185.32 (61.135.185.32): icmp_seq=2 ttl=127 time=4.27 ms

none 模式

在這里插入圖片描述

使用none模式,Docker容器擁有自己的Network Namespace,但是, 并不為Docker容器進行任何網絡配置 。也就是說,這個Docker容器沒有網卡、IP、路由等信息,只有lo 網絡接口。需要我們自己為Docker容器添加網卡、配置IP等。

不參與網絡通信,運行于此類容器中的進程僅能訪問本地回環接口;僅適用于進程無須網絡通信的場景中,例如:備份進程診斷及各種離線任務等。

?none 模式演示

使用 none 網絡模式啟動一個 centos_1 容器

[root@docker ~]# docker run -itd --name centos_1 --network none  centos:latest
b70dddea0a3a554c0c658442fcce8950a272148192b9622a1c5e6baa92be705c
#查看該容器的網絡模式
	[root@docker ~]# docker inspect b70dddea0a3a | grep -i network
	            "NetworkMode": "none",
	        "NetworkSettings": {
	            "Networks": {
	                    "NetworkID": "f89ee64125bc9606a0e30f5d6c52d21bbdd10b14cd32191c783967a41675497c",
#查看容器IP
	[root@docker ~]# docker exec -it b70dddea0a3a hostname -I
	#IP為空

測試 centos_1 與宿主機的連通性

#無法通信
	[root@docker ~]# docker exec -it b70dddea0a3a ping 192.168.117.130
	connect: Network is unreachable

bridge 模式

在這里插入圖片描述

當Docker進程啟動時,會 在主機上創建一個名為docker0的虛擬網橋 ,此主機上啟動的 Docker容器會連接到這個虛擬網橋上, 所以有默認地址172.17.0.1/16的地址。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網絡中。

從 docker0子網中分配一個IP給容器使用 ,并設置 docker0的IP地址為容器的默認網關 。在主機上 創建一對虛擬網卡 veth pair設備,Docker將veth pair設備的 一端放在新創建的容器 中,并命名為eth0(容器的網卡), 另一端放在主機中 ,以vethxxx這樣類似的名字命名,并將這個網絡設備加入到docker0網橋中。可以通過brctl show命令查看。

#如果您的主機沒有 brctl 命令,請安裝網橋管理工具包
	[root@docker ~]# yum install -y bridge-utils 
#查看網橋
	[root@docker ~]# brctl show
	bridge name	bridge id		STP enabled	interfaces
	docker0		8000.02426f470008	no	

bridge模式是docker的默認網絡模式,不寫–net參數,就是bridge模式。使用docker run -p時,docker實際是在iptables做了DNAT規則,實現端口轉發功能。可以使用iptables -t nat -vnL查看。

?bridge 模式演示

創建一個網橋 centos-net

	[root@docker ~]# docker network create -d bridge centos-net
	1d8d918c3488b0e5b3f15ecd5c35c1dc36a87c66dc39fa38fbefcdc6ef471218
#查看創建的網橋
	[root@docker ~]# brctl show
	bridge name	bridge id		STP enabled	interfaces
	#新創建的網橋
	br-1d8d918c3488		8000.024297951600	no	
	#系統默認的網橋	
	docker0		8000.02426f470008	no	
	[root@docker ~]# ip a
	8: br-1d8d918c3488: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:97:95:16:00 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 scope global br-1d8d918c3488
       valid_lft forever preferred_lft forever

使用 bridge 網絡模式啟動一個 centos_1 容器

	[root@docker ~]# docker run -itd --name centos_1 --network centos-net centos:latest
	f5bdd3510cc84a6fdeef10f062589770daa663aa31855131cab3fa0627e98d3d
#查看該容器的網絡模式
	[root@docker ~]# docker inspect f5bdd3510cc8 | grep -i network
	            "NetworkMode": "centos-net",
	        "NetworkSettings": {
	            "Networks": {
	                    "NetworkID": "1d8d918c3488b0e5b3f15ecd5c35c1dc36a87c66dc39fa38fbefcdc6ef471218",
#查看容器IP
	[root@docker ~]# docker exec -it f5bdd3510cc8 hostname -I
	172.18.0.2 

使用 bridge 網絡模式啟動一個 centos_2 容器

	[root@docker ~]# docker run -itd --name centos_2 --network centos-net centos:latest
#查看該容器的網絡模式
	[root@docker ~]# docker inspect $(docker ps -n 1 -q ) | grep -i network
            "NetworkMode": "centos-net",
        "NetworkSettings": {
            "Networks": {
                    "NetworkID": "1d8d918c3488b0e5b3f15ecd5c35c1dc36a87c66dc39fa38fbefcdc6ef471218",
#查看容器IP
	[root@docker ~]# docker exec -it $(docker ps -n 1 -q ) hostname -I
	172.18.0.3 

查看網橋連接狀況

[root@docker ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
br-1d8d918c3488		8000.024297951600	no		veth44c8534
							vethef015ff
docker0		8000.02426f470008	no	

測試容器之間的連通性

[root@docker ~]# docker exec -it f5bdd3510cc8 ping 172.18.0.3 
PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data.
64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.104 ms
64 bytes from 172.18.0.3: icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from 172.18.0.3: icmp_seq=3 ttl=64 time=0.045 ms

測試容器與宿主機間的連通性

#容器 centos_1 與宿主機間的連通性
	[root@docker ~]# docker exec -it f5bdd3510cc8 ping 192.168.117.130
	PING 192.168.117.130 (192.168.117.130) 56(84) bytes of data.
	64 bytes from 192.168.117.130: icmp_seq=1 ttl=64 time=0.102 ms
	64 bytes from 192.168.117.130: icmp_seq=2 ttl=64 time=0.042 ms
#容器 centos_2 與宿主機間的連通性
	[root@docker ~]# docker exec -it 78854ab16473  ping 192.168.117.130
	PING 192.168.117.130 (192.168.117.130) 56(84) bytes of data.
	64 bytes from 192.168.117.130: icmp_seq=1 ttl=64 time=0.103 ms
	64 bytes from 192.168.117.130: icmp_seq=2 ttl=64 time=0.043 ms

原文鏈接:https://blog.csdn.net/tiamon_/article/details/109300045

欄目分類
最近更新