Docker四种网络模式演示及连通性测试

目录
  • Docker 的四种网络模式
  • host 模式
    • host 模式演示
  • container 模式
    • container 模式演示
  • none 模式
    • none 模式演示
  • bridge 模式
    • bridge 模式演示

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

以上就是Docker四种网络模式演示及连通性测试的详细内容,更多关于Docker网络模式连通性测试的资料请关注我们其它相关文章!

(0)

相关推荐

  • Docker的四种网络模式

    Docker 的四种网络模式 Docker 有 bridge.none.host.container 四种网络模式,提供网络隔离.端口映射.容器间互通网络等各种支持,下面开门见山地直接介绍这四种网络模式. 这四种网络模式可以通过启动容器的时候指定,其命令或参数个数如下: 网络模式 参数 说明 host模式 -–net=host 容器和宿主机共享 Network namespace. container模式 –-net={id} 容器和另外一个容器共享 Network namespace. kub

  • Docker 网络模式(四种)详细介绍

    Docker 网络模式 本文首先介绍了Docker自身的4种网络工作方式, Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求. 四种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=h

  • Docker安装方法与Docker四种网络模式详解

    1.安装docker yum -y install docker-io 出现complete说明安装完成 2.启动docker服务 service docker start 3.设置docker开机启动 chkconfig docker on 4.基本信息查看 docker version docker info docker images查看镜像 docker ps查看正在运行的容器 docker rmi删除镜像 docker save -o imageName:tag > path/name

  • Docker 网络模式及配置方式

    一.Docker网络模式 docker run 创建 Docker 容器时,可以用 –net 选项指定容器的网络模式,Docker 有以下 4 种网络模式: host 模式,使用 –net=host 指定. container 模式,使用 –net=container:NAME_or_ID 指定. none 模式,使用 –net=none 指定. bridge 模式,使用 –net=bridge 指定,默认设置. host 模式 如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个

  • 详解Docker中VLAN网络模式的配置

    前言 Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络 方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求. Docker网络模式选择 目前已有不少文章介绍了Docker的网络模型,但是在实际应用中还是有不少坑和需要注意的点 在Docker应用到生产环境的时候,网络模型的选择主要有以下几种 1.原生Bridge NAT模式 2.Linux Bridge

  • Docker四种网络模式演示及连通性测试

    目录 Docker 的四种网络模式 host 模式 host 模式演示 container 模式 container 模式演示 none 模式 none 模式演示 bridge 模式 bridge 模式演示 Docker 的四种网络模式 网络模式 网络配置 说明 host(开放式网络模式) –network host 容器和宿主机共享 Network namespace container(联合挂载式网络模式) –network container 多个容器共享一个 Network namesp

  • 深入解析docker三种网络模式

    目录 1.docker默认的三种网络模式: 2.桥接模式 3.host模式 4.none模式 1.docker默认的三种网络模式: bridge:桥接模式 host:主机模式 none:无网络模式 查看网络模式: docker network ls 2.桥接模式 简介:桥接模式是docker 的默认网络设置,当Docker服务启动时,会在主机上创建一个名为docker0的虚拟网桥,并选择一个和宿主机不同的IP地址和子网分配给docker0网桥 如下图所示:eno16777728是宿主机的网卡,1

  • Docker四种网络类型原理实例解析

    四种网络类型: None:不为容器配置任何网络功能,--net=none Container:与另一个运行中的容器共享Network Namespace,--net=container:containerID(K8S) Host:与宿主机共享Network Namespace,--net=host Bridge:Docker设计的NAT网络模型 下面分别讲解下: none: [root@docker1 centos_zabbix]# docker run -it --network none c

  • 深入理解docker的四种网络方式

    bridge方式(默认) Host IP为186.100.8.117, 容器网络为172.17.0.0/16 下边我们看下docker所提供的四种网络: 创建容器:(由于是默认设置,这里没指定网络--net="bridge".另外可以看到容器内创建了eth0) [root@localhost ~]# docker run -i -t mysql:latest /bin/bash root@e2187aa35875:/usr/local/mysql# ip addr 1: lo: mtu

  • docker容器的四种端口映射演示分析

    端口映射 把容器的端口映射为宿主机的一个随机或者特定端口,使用外部用户可以访问容器服务 端口映射本是在容器底层做了 iptables 地址转发,出去的流量做 SNAT 源地址转发,进来的流量做 DNAT 目标地址转发. 四种端口映射 随机端口映射:就是把容器的端口随机映射为宿主机的一个端口. 指定端口映射:就是把容器的端口映射为宿主机的指定端口. 指定网卡随机端口映射:就是把容器的端口映射为宿主机的指定网卡的随机端口. 指定网卡端口映射:就是把容器的端口映射为宿主机的指定网卡的指定端口. 端口映

  • Docker使用Calico网络模式配置及问题处理方法

    目录 一.Calico介绍 二.Calico优势 三.环境介绍: 四.配置ETCD集群 五. 安装Docker,配置使用集群存储 六.配置calico基于sysinit方式启动 七.测试calico网络 参考: 一.Calico介绍 Calico是一种容器之间互通的网络方案,在虚拟化平台中,比如OpenStack.Docker等都需要实现workloads之间互连,但同时也需要对容器做隔离控制,就像在Internet中的服务仅开放80端口.公有云的多租户一样,提供隔离和管控机制.而在多数的虚拟化

  • VMware虚拟机三种网络模式区别

    我们知道VMware也分几种版本,普通用户最常用的就是Workstation,但是不管使用哪种版本,我们都能发现在安装过程中让我们选择 网络模式.在默认情况下会选中桥接模式,但有用户会问其他模式是干什么用的?有时候选择了其他模式之后就不能上网了.今天小编就和大家一起探讨一下 VMware 3种网络模式的功能和通信规则. 我们首先说一下VMware的几个虚拟设备 VMnet0:用于虚拟桥接网络下的虚拟交换机 VMnet1:用于虚拟Host-Only网络下的虚拟交换机 VMnet8:用于虚拟NAT网

随机推荐