5、Docker 的四种网络模式
5.1 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 命令可以指定使用的网络模式
5.2 host 模式
5.2.1 host 模式介绍
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace 。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口 。但是, 容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的 。
使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
5.2.2 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
5.3 container 模式
5.3.1 container 模式介绍
这个模式指定 新创建的容器和已经存在的一个容器共享一个 Network Namespace ,而不是和宿主机共享。 新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围 等。同样, 两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的 。两个容器的进程可以通过 lo 网卡设备通信。
5.3.2 container 模式演示
- 使用 bridge 网络模式启动一个 centos_1 容器
[root@docker ~]# docker run -itd --name centos_1 --network bridge centos:latest10ec9d1e3a6b7530cff797cdfc2c44702b62f9f29dcee679306a0262d1e41226
#查看该容器的网络模式[root@docker ~]# docker inspect 10ec9d1e3a6b | grep -i network"NetworkMode": "bridge","NetworkSettings": {"Networks": {"NetworkID": "ae7c4bfdd3910f8a00cb962afd06cf296d7d04a99611a6ab154d496ca777183b",
#查看容器IP[root@docker ~]# docker exec -it 10ec9d1e3a6b hostname -I172.17.0.2
- 使用 container 网络模式启动一个 centos_2 容器
[root@docker ~]# docker run -itd --name centos_2 --network container:centos_1 centos:latest1f7d976b3f80dd064fd87902dacefc72b617acc6f7917a2f0adb434cb5ff0d11
#查看该容器的网络模式[root@docker ~]# docker inspect 1f7d976b3f80 | grep -i network"NetworkMode": "container:centos_1","NetworkSettings": {"Networks": {}
#查看容器IP[root@docker ~]# docker exec -it 1f7d976b3f80 hostname -I172.17.0.2
- 测试 centos_2 与宿主机的连通性
#通信正常[root@docker ~]# docker exec -it 1f7d976b3f80 ping 192.168.117.130PING 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 ms64 bytes from 192.168.117.130: icmp_seq=2 ttl=64 time=0.046 ms64 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.comPING 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 ms64 bytes from 61.135.185.32 (61.135.185.32): icmp_seq=2 ttl=127 time=4.27 ms
5.4 none 模式
5.4.1 none 模式介绍
使用none模式,Docker容器拥有自己的Network Namespace,但是, 并不为Docker容器进行任何网络配置 。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有lo 网络接口。需要我们自己为Docker容器添加网卡、配置IP等。
不参与网络通信,运行于此类容器中的进程仅能访问本地回环接口;仅适用于进程无须网络通信的场景中,例如:备份进程诊断及各种离线任务等。
5.4.2 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.130connect: Network is unreachable
5.5 bridge 模式
5.4.1 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 showbridge name bridge id STP enabled interfacesdocker0 8000.02426f470008 no
bridge模式是docker的默认网络模式,不写–net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。
5.4.2 bridge 模式演示
- 创建一个网桥 centos-net
[root@docker ~]# docker network create -d bridge centos-net1d8d918c3488b0e5b3f15ecd5c35c1dc36a87c66dc39fa38fbefcdc6ef471218
#查看创建的网桥[root@docker ~]# brctl showbridge name bridge id STP enabled interfaces#新创建的网桥br-1d8d918c3488 8000.024297951600 no #系统默认的网桥 docker0 8000.02426f470008 no [root@docker ~]# ip a8: 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:ffinet 172.18.0.1/16 scope global br-1d8d918c3488valid_lft forever preferred_lft forever
- 使用 bridge 网络模式启动一个 centos_1 容器
[root@docker ~]# docker run -itd --name centos_1 --network centos-net centos:latestf5bdd3510cc84a6fdeef10f062589770daa663aa31855131cab3fa0627e98d3d
#查看该容器的网络模式[root@docker ~]# docker inspect f5bdd3510cc8 | grep -i network"NetworkMode": "centos-net","NetworkSettings": {"Networks": {"NetworkID": "1d8d918c3488b0e5b3f15ecd5c35c1dc36a87c66dc39fa38fbefcdc6ef471218",
#查看容器IP[root@docker ~]# docker exec -it f5bdd3510cc8 hostname -I172.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 -I172.18.0.3
- 查看网桥连接状况
[root@docker ~]# brctl show
bridge name bridge id STP enabled interfaces
br-1d8d918c3488 8000.024297951600 no veth44c8534vethef015ff
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.130PING 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 ms64 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.130PING 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 ms64 bytes from 192.168.117.130: icmp_seq=2 ttl=64 time=0.043 ms
5、Docker 的四种网络模式相关推荐
- Docker的四种网络模式
docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式: bridge模式:使用–net =bridge指定,默认设置: host模式:使用– ...
- Docker的四种网络模式和相关网络命令等操作
Docker网络模式 一.实现原理 二.Docker四种网络模式 三.Docker命令 1.查看网络列表 2.自定义网络固定IP 3.暴露端口 4.在宿主机环境执行容器内命令 5.怎么把宿主机的文件传 ...
- Docker四种网络模式
四种网络模式 host模式 使用docker run时使用–net=host指定 Docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机上的ip. [root@localhost ~ ...
- Docker网络资源详解 ---(四种网络模式)
文章目录 前言 一:Dcker网络资源详解 简单云平台生态环境图 普通单节点 桥接图 1.1:网络资源详解:Docker0网卡与四种网络模式 二 . Docker0网卡的解释 1. host模式 2. ...
- docker容器的四种网络模式
容器的四种网络模式 docker容器的四种网络模式:bridge 桥接模式.host 模式.container 模式和 none 模式 启动容器时可以使用 –net 参数指定,默认是桥接模式. 以下是 ...
- Dockerfile精编细作(六)四种网络模式bridge、host、container、none
查看网卡信息 查看ip信息:centos7:ip add或ip addr lo:localhost网卡 ens33:对外网卡以太网,本机ip docker0:docker容器和宿主机通信的网卡,Doc ...
- (三)Docker四种网络模式
实现原理 Docker使用Linux桥接(参考<Linux虚拟网络技术>),在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分 ...
- Docker的4种网络模式
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定. container模式,使 ...
- Docker 的4种网络模式
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定. container模式,使 ...
最新文章
- 在linux系统安装R及rstudio
- win10 Linux子系统 交叉编译器注意事项
- mac 下launchpad超级慢的问题
- qt web混合编程_QT做界面真是绝美,并且还可嵌入HTML与JS做界面(许多案例)
- 前端月趋势榜:6 月新增的、最热门的 20 个前端开源项目 - 2106
- mysql 5.5.39 安装_CentOS7.2安装mysql5.5.39
- Quartz.NET 3.0 正式发布
- python判断密码强度_python – 检查密码的强度(如何检查条件)
- can通讯bdc_宝马总线K-CAN3和K-CAN4常见案例
- excel三次样条函数_Excel中F1到F12键的神奇用法
- (王道408考研操作系统)第二章进程管理-第三节4:信号量机制(整型、记录型信号量和P、V操作)
- oracle的.aud文件,Oracle 11g 在audit_file_dest目录下产生大量的aud文件
- php实现单,双向链表,环形链表解决约瑟夫问题
- excel2007加载宏的两种方法
- 我用飞桨做了一个菜品图像识别系统
- UnityShader实现漫反射光照模型和高光反射光照模型
- sd卡数据损坏怎么回事,sd卡数据损坏怎么恢复
- [NFC] 读羊城通卡片信息
- 使用Google表格进行网页抓取
- mysql 占用cpu高_mysqlCPU占用过高解决方案
热门文章
- php mockery单元测试,使用testify和mockery库简化单元测试
- 解决ssl校验问题手札
- IDE工具(44) idea安装使用aiXcoder代码提示工具
- 2019 年互联网公司中秋礼盒歧视指南最全版(文末送中秋福利,人人有份!)...
- 前端做CRM管理系统是做什么_悟空CRM:CRM系统能够帮助企业做什么?
- (非常强大的) ios 常用网址,库,第三方,索引整理合集
- 5.17 吸管工具和度量工具的使用 [Illustrator CC教程]
- android ormlite框架的理解,Android ORMLite框架入门级介绍
- 只会用Excel吗?这套全面的数据分析工具打包送你
- LaTeX希腊字母的加粗问题