Docker的网络模式

2023-11-17

Docker的四种网络模式

在这里插入图片描述

(1)docker四种网络模式如下:

  • Bridge contauner 桥接式网络模式
  • Host(open) container 开放式网络模式
  • Container(join) container 联合挂载式网络模式,是host网络模式的延伸
  • None(Close) container 封闭式网络模式

(2)可以通过docker network命令查看

[root@node1 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
7751a2593ac3   bridge    bridge    local
4b31d38031fc   host      host      local
8c8ad7440963   none      null      local

(3)docker run --network 命令可以指定使用网络模式

1、Bridge 网络模式(类似于VMware的NAT模式)

Bridge 网络模式介绍

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上,所以有默认地址172.17.0.0/16的地址。虚拟网桥的工作方式和物理交换机
类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
  从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上
创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0
(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到
docker0网桥中。可以通过brctl show命令查看。

安装该桥接的显示工具

[root@node1 ~]# yum install  bridge-utils -y
[root@node1 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.02429430c148	no		vethd750a80

Docker在运行一个容器后,会自动生成一个eth网卡
例如:在运行容器后ip a 查看 生成了一块新的网卡

[root@node1 ~]# docker run  -d --name web1 -p 81:80 nginx:1.14-alpine
f6f0640f003c320d4772b37242acef8bbd88af6e34ca1d4e521ea3bccfb02030
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS         PORTS                               NAMES
f6f0640f003c   nginx:1.14-alpine   "nginx -g 'daemon of…"   11 seconds ago   Up 7 seconds   0.0.0.0:81->80/tcp, :::81->80/tcp   web1

[root@node1 ~]# docker exec -it web1 /bin/bash
OCI runtime exec failed: exec failed: unable to start container process: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown
[root@node1 ~]# docker exec -it web1 /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # 

bridge模式是docker的默认网络模式,不写–net参数,就是bridge模式。使用docker run -p时,
docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

[root@node1 ~]# iptables -t nat -vnL 
Chain PREROUTING (policy ACCEPT 23 packets, 2385 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   11   572 DOCKER     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT 21 packets, 2242 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4 packets, 1312 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    1    60 DOCKER     all  --  *      *       0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT 4 packets, 1312 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   143 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0           
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.2           172.17.0.2           tcp dpt:80

Chain DOCKER (2 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:81 to:172.17.0.2:80

bridge模式示意图

在这里插入图片描述

docker的桥接模式类似于VMware的NAT模式,连接到docker的网卡上

2、Host 网络模式

Host 网络模式介绍

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,
而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是
使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

Host模式示意图

在这里插入图片描述

演示
Host模式下需要指定 --network host
直接使用宿主机的网络 host;共享宿主机的网络

[root@node1 ~]# docker run -it --rm --network host busybox:latest 
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:32:a4:51 brd ff:ff:ff:ff:ff:ff
    inet 192.168.142.149/24 brd 192.168.142.255 scope global dynamic ens33
       valid_lft 1347sec preferred_lft 1347sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
    link/ether 02:42:94:30:c1:48 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:94ff:fe30:c148/64 scope link 
       valid_lft forever preferred_lft forever
19: veth2119348@if18: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 
    link/ether 6a:a3:9b:d1:e3:ef brd ff:ff:ff:ff:ff:ff
    inet6 fe80::68a3:9bff:fed1:e3ef/64 scope link 
       valid_lft forever preferred_lft forever
/ # ping www.baidu.com
PING www.baidu.com (14.215.177.39): 56 data bytes
64 bytes from 14.215.177.39: seq=0 ttl=128 time=63.741 ms
64 bytes from 14.215.177.39: seq=1 ttl=128 time=13.826 ms
^C
--- www.baidu.com ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 13.826/38.783/63.741 ms
/ # 
=

3、Container 网络模式

Container 网络模式介绍

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿
主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范
围等
。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可
以通过 lo 网卡设备通信。

Container模式示意图

在这里插入图片描述
演示
共享同一个网络。因此http服务启动在一个容器中,另一个容器也会一样启动
(1)在一个终端,使用bridge网络模式启动容器b1

[root@node1 ~]# docker run -it --rm --name z1  busybox:latest 
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # echo "hello world" > /tmp/index.html
/ # httpd -h /tmp/
/ # netstat -lnupt | grep 80
tcp        0      0 :::80                   :::*                    LISTEN      9/httpd
/ # wget -O - -q 127.0.0.1
hello world
/ # 

(2)在另一个终端使用Container 网络模式创建容器b2

[root@node1 ~]# docker run -it --rm --name z2 --network container:z1  busybox:latest 
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # wget -O - -q 127.0.0.1
hello world
/ # 

4、None 网络模式(类似VMWare中的仅主机模式)

None 网络模式介绍

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任
何网络配置
。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有lo 网络接口。需要我们自己
为Docker容器添加网卡、配置IP等。
  不参与网络通信,运行于此类容器中的进程仅能访问本地回环接口;仅适用于进程无须网络通信的
场景中,例如:备份、进程诊断及各种离线任务等。

None模式示意图

在这里插入图片描述
演示

[root@node1 ~]# docker run -it --rm --network none busybox:latest 
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
/ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
/ # 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker的网络模式 的相关文章

随机推荐

  • protocol buffer 编解码

    平时的开发中使用pb格式协议较多 大致了解了一下pb的编解码 即序列化和反序列化 本文参考官方文档 https developers google com protocol buffers docs encoding hl zh cn 先看
  • Word去除多余的页眉

    word去除多余的页眉 1 在正式页眉开始的页面点击鼠标 此时光标位于要删除页眉下划线页的首部 2 单击上方菜单栏的 页面布局 分隔符 分节符 下一页 3 在正式页眉开始的地方双击鼠标 进入 页眉编辑 状态 4 单击 页眉和页脚 将 链接到
  • SVN时代...

    SourceForge开始全面支持Subversion 这真是个好消息 这预示着CVS独霸天下的时代快要结束 SVN时代就要来临 和CVS比起来 SVN的确很强大 这就像它的出现就是为了取代CVS一样 它的目标快要实现了 具体的功能特性大家
  • Cocos2d-x 3.17.1 Android Studio环境搭建和创建编译项目和真机调试

    eclipse NDK参考 https www cnblogs com l d d p 6531557 html 最近项目上需要用Cocos2d x在Android智能硬件上进行开发 很早之前搭建过Cocos2d x3 15 1 Eclip
  • 利用IDM实现百度云满速下载

    一 IDM Internet Download Manager 简称 IDM 是一种将下载速度提高5倍的工具 可以恢复和安排下载 由于连接丢失 网络问题 计算机关机或意外停电等原因 全面的错误恢复和恢复功能将重新启动中断或中断的下载 简单的
  • MATLAB绘制正弦函数与余弦函数的线性组合曲线

    h0 figure toolbar none position 200 150 450 350 name 实例11 x 0 pi 20 2 pi y1 sin x y2 cos x h1 stem x y1 y2 画出线性组合的图 hold
  • SQL注入——学生选课系统注入

    目录 前言 一 实验环境 二 实验步骤 1 万能密码 2 堆叠注入 3 报错注入 4 时间盲注 前言 本次实验利用教师指定的学生选课管理系统进行SQL注入 包含万能密码登录 堆叠注入 报错注入和时间盲注 一 实验环境 Windows10虚拟
  • QT 15--获取任何种类文件的某些文件属性:大小、创建时间、上次修改时间等等

    1 首先说一些 如果是mainwindow的QT工程 如果打算做自己手写ui 界面的话 该如何将自己写的内容添加到mainwindow界面呢 方法为 新建一个widget类 然后将所有零件都用布局布置好后 只需将总布局添加到widet 然后
  • KMP时间复杂度分析

    比较过程分析 比较次数 比较次数 红色 蓝色 蓝色部分是相比暴力求解 节省下的比较次数 周期 从比较次数可以看出 呈现 1 1 1 1 5 这样的周期 一个周期内的比较次数 8 周期长度 5 周期个数 n 5 比较总次数 周期个数 一个周期
  • 学成在线笔记+踩坑(10)——课程搜索、课程发布时同步索引库。

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 牛客面试题 java黑马笔记 目录 1 检索模块 需求分析 1 1 全文检索介绍
  • H3 GPIO笔记

    NanoPi NEO Core最近买了一块 这个板子使用全志H3 查看H3的数据手册 把GPIO这部分做个笔记 H3有7组GPIO 如下 分别是PA PC PD PE PF PG PL 没有PB这一组 PA有22个端口 PC有19个端口 P
  • 【LeetCode题解】1475、商品折扣后的最终价格

    题目 给你一个数组 prices 其中 prices i 是商店里第 i 件商品的价格 商店里正在进行促销活动 如果你要买第 i 件商品 那么你可以得到与 prices j 相等的折扣 其中 j 是满足 j gt i 且 prices j
  • CSS动画:Transition与Animation

    本文总结CSS3中两个用来做动画的属性 一个是transition 另一个是animation 差异比较 CSS3 差异 transition 在给定的持续时间内平滑地更改属性值 从一个值到另一个值 也就是只需要指定开始与结束的参数 参数改
  • 让汽车的全景环视更智能更安全!

    随着现代汽车安全技术的进步 我们看到诸如全景环视等先进驾驶辅助 ADAS 技术成为现代汽车的新标准 本演示展示了如何通过精确的实时反射和AI来检测障碍 以提升全景环视系统的性能 让汽车驾驶更安全 尤其是 当全景环视系统内嵌Imaginati
  • cesium-添加点并且可以编辑

    完整代码
  • 05_Numpy任意行&列的删除方法(numpy.delete)

    05 Numpy任意行 列的删除方法 numpy delete 函数Numpy delete 可以删除ndarray数组中任意的行或者列 指定要删除的轴 维度 和要删除的位置 行号 列号 也可以通过切片或列表选择多个行或者列的编号 对以下的
  • 【Unity Shaders】抖音变身漫画1

    先来看一下手机拍出来的效果 我们发现有一张人像变成了卡通漫画脸 其它的只是做了一些图像处理 你可以再拍几张看一下 会发现千篇一律的大眼 小嘴有没有 你想的没错 这个是AI换脸技术 抖音特效里有很多了 把这个漫画脸再加上对图像的漫画处理 最后
  • 解读CUDA Compiler Driver NVCC - Ch.5

    前言 前面几篇文章 我们了解了NVCC的作用 nvcc编译的two stage 每个stage做了什么 怎么去选择虚拟架构和真实架构 JIT编译的原理 好处和弊端以及解决方案 本文我们将了解几个实际的nvcc编译命令 Base Notati
  • el-select中多选回显数据后没法重新选择和更改

    我用element select 多选回显的时候 回显正常 不能点击清除 不能选择改变数据 然后去搜了这篇文章文章链接 博主解释要在select标签上加一个强制渲染 如下图
  • Docker的网络模式

    目录 Docker的四种网络模式 1 Bridge 网络模式 类似于VMware的NAT模式 Bridge 网络模式介绍 bridge模式示意图 2 Host 网络模式 Host 网络模式介绍 Host模式示意图 3 Container 网