简单说说-docker网络类型

概述

容器网络是指容器之间或非 Docker 工作负载之间连接和通信的能力。容器默认启用网络,并且可以建立传出连接。容器不知道它所连接的网络类型,容器只能看到带有 IP 地址、网关、路由表、DNS 服务和其他网络详细信息的网络接口。也就是说,除非容器使用none网络驱动程序。

网络类型

driver

描述

bridge

默认网络驱动程序。当您的应用程序在需要与同一主机上的其他容器通信的容器中运行时,通常会使用桥接网络。

host

移除容器和 Docker 主机之间的网络隔离,直接使用主机的网络。

none

将容器与主机和其他容器完全隔离。

overlay

Overlay 将多个 Docker 守护进程连接在一起,并使 Swarm 服务和容器能够跨节点通信。此策略消除了进行操作系统级路由的需要。

ipvlan

IPvlan 网络提供对 IPv4 和 IPv6 寻址的完全控制。VLAN 驱动程序建立在其之上,使运营商能够完全控制第 2 层 VLAN 标记,甚至为对底层网络集成感兴趣的用户提供 IPvlan L3 路由。

macvlan

Macvlan 网络允许您为容器分配 MAC 地址,使其在网络上显示为物理设备。Docker 守护进程通过 MAC 地址将流量路由到容器。macvlan 在处理希望直接连接到物理网络而不是通过 Docker 主机的网络堆栈路由的遗留应用程序时,使用驱动程序有时是最佳选择。

具体说说

bridge

就 Docker 而言,bridge 网络使用软件桥接,让连接到同一 bridge 网络的容器进行通信,同时提供与未连接到该bridge网络的容器的隔离。Docker bridge 驱动程序会自动在主机中安装规则,以便不同桥接网络上的容器无法直接相互通信。

bridge 使用 Linux 网桥和 iptables 提供容器互联,Docker 在每台主机上创建一个名叫 docker0的网桥,通过 veth pair(一头连到 docker0网桥,一头 设置为容器的eth0) 来连接该主机的每一个 EndPoint.其流程如下:

在shell 执行 docker network ls 可以看到我们的网络(默认和我们创建的)

[root@linjian ~]# docker network ls
NETWORK ID     NAME           DRIVER    SCOPE
770ec16c3825   app-tier       bridge    local 
cec3414e2d8c   bridge         bridge    local
9c36c1f845a1   home_default   bridge    local
1ca06cf881dc   host           host      local
b13d98abb5f8   none           null      local

可以使用--network bridge 选项可以指定启用bridge模式,bridge 是默认的网络模式,所以一般不指定也可以

docker run -itd --name mycontainer --network bridge xxx

我们可以先拉起两个alpine 两个容器

docker run -dit --name alpine1 alpine ash
docker run -dit --name alpine2 alpine ash

通过docker ps | grep alpine 可以看到已经拉起了

[root@linjian ~]# docker ps | grep alpine
217da339a460   alpine                          "ash"                     32 seconds ago   Up 31 seconds                                                                             alpine2
0d2e33ce99ea   alpine                          "ash"                     33 seconds ago   Up 32 seconds 

检查bridge网络以查看有哪些容器连接到它。

进到容器可以看到,可以成功ping到对方的服务

Host

容器使用host网络模式,则该容器的网络堆栈不会与 Docker 主机隔离(容器共享主机的网络命名空间),并且容器不会分配自己的 IP 地址。例如,如果您运行绑定到端口 80 的容器并且使用host 网络,则该容器的应用程序可在主机 IP 地址的端口 80 上使用。

主机模式网络对于以下用例非常有用:

  • 优化性能
  • 在容器需要处理大范围端口的情况下

这是因为它不需要网络地址转换 (NAT),并且不会为每个端口创建“用户层代理”。

主机网络驱动程序仅适用于 Linux 主机,Docker Desktop for Mac、Docker Desktop for Windows 或 Docker EE for Windows Server 不支持。

拉起一个aline,并用--network 指定host。

[root@linjian ~]# docker run -itd -p 9561:9561  --network host --name alpine_host alpine
WARNING: Published ports are discarded when using host network mode
5b0e2d67fdb4d34a291f2357b4fde79522e568cc81b67a49f8c131a9d056a825

这里注意一个WARNING: 使用host网络模式,容器没有自己的 IP 地址 host, 端口映射不会生效,并且-p、--publish、-P和--publish-all选项将被忽略,而是产生警告。

进到容器 ping www.baidu.com,发现可以访问的了百度,已经和宿主机共享网络了

[root@linjian ~]# docker attach alpine_host 
/ # ping www.baidu.com
PING www.baidu.com (180.101.50.242): 56 data bytes
64 bytes from 180.101.50.242: seq=0 ttl=50 time=10.128 ms
64 bytes from 180.101.50.242: seq=1 ttl=50 time=10.086 ms
64 bytes from 180.101.50.242: seq=2 ttl=50 time=10.063 ms
ç64 bytes from 180.101.50.242: seq=3 ttl=50 time=10.077 ms

overlay

如果是多台机器之间的容器需要访问,就可以使用overlay 网络模式。

在使用 overlay 前我们需要在一台机器(master)执行 docker swarm init 创建 swarm manager.

创建swarm manager

docker swarm init

[root@linjian ~]# docker network create --driver overlay overlayNet

docker swarm join --token SWMTKN-1-xxxxxxx xxx.xx.xxx.xxx:xxx

[root@linjian ~]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
feb2f19dd8b9   alpine-test       bridge    local
770ec16c3825   app-tier          bridge    local
cec3414e2d8c   bridge            bridge    local
b438a2ffeac8   docker_gwbridge   bridge    local
9c36c1f845a1   home_default      bridge    local
1ca06cf881dc   host              host      local
u3zrqntexbvi   ingress           overlay   swarm
egfaukedlf8g   overlayNet        overlay   swarm

创建网络

一台机器安装

docker run -itd   --network overlayNet   --name overlay-alpine01   alpine:latest ash

在另外一台机器安装

docker run -itd --name overlay-alpine02 --network overlayNet alpine:latest ash

测试

docker exec -it overlay-alpine02 ping overlay-alpine01 

none

如果你想完全隔离容器的网络堆栈,可以--network none在启动容器时使用该标志。在容器内,仅创建环回设备。

host 网络模型的时候我们可以看到容器的网络配置

我们创建一个网络类型 None的看看,只有一个lo回环网络

[root@linjian ~]# docker run --rm --network none --name no-net-alpine alpine:latest ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever

Macvlan

一些应用服务希望直接连接到物理网络,比如说核心应用程序或监控网络流量的应用程序。在这种情况下,您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配一个MAC地址,使其看起来像是直接连接到物理网络的物理网络接口。需要在Docker主机上指定一个物理接口用于Macvlan,以及网络的子网和网关,甚至可以使用不同的物理网络接口隔离Macvlan网络。

创建一个macvlan 名为 的网络 my-macvlan-net

docker network create -d macvlan --subnet=<subnet> --gateway=<gateway> -o parent <physical_interface> <network_name>

subnet :一个可用于Macvlan网络的子网地址;

gateway:Macvlan网络的网关地址;

physical_interface:宿主机上用于连接到物理网络的接口名称; (这个可以通过ip addr show 查看)

network_name:Macvlan网络的名称。

[root@linjian ~]# docker network create -d macvlan \
>   --subnet=172.16.86.0/24 \
>   --gateway=172.16.86.1 \
>   -o parent=eth0 \
>   my-macvlan-net
78595591dbc064da42574e27fbd1ed9a2ebf5b4312fe391d645adf801eeb8099

通过docker network ls和docker network inspect my-macvlan-net 命令来验证网络是否存在my-macvlan-net 并且是一个macvlan网络

[root@linjian ~]# docker network ls | grep my-macvlan-net
78595591dbc0   my-macvlan-net   macvlan   local[root@linjian ~]# docker network inspect my-macvlan-net
[{"Name": "my-macvlan-net","Id": "78595591dbc064da42574e27fbd1ed9a2ebf5b4312fe391d645adf801eeb8099","Created": "2023-12-28T17:33:18.259298162+08:00","Scope": "local","Driver": "macvlan","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.16.86.0/24","Gateway": "172.16.86.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {"parent": "eth0"},"Labels": {}}
]

查看容器信息,docker inspect my-macvlan-alpine

启动一个容器并将其连接到my-macvlan-net网络, 查看网络信息

[root@linjian ~]# docker attach my-macvlan-alpine
/ # ip addr show eth0
30: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:10:56:02 brd ff:ff:ff:ff:ff:ffinet 172.16.86.2/24 brd 172.16.86.255 scope global eth0valid_lft forever preferred_lft forever

IPvlan

IPvlan 驱动程序让用户可以完全控制 IPv4 和 IPv6 寻址。Linux实现非常轻量级,因为它们不是使用传统的Linux网桥进行隔离,而是与Linux以太网接口或子接口相关联,以强制分离网络和物理网络的连接。

IPvlan 与 Macvlan 类似,但不为容器分配唯一的 MAC 地址,而是通过虚拟的MAC地址来访问网络。在使用IPvlan需要注意 Linux 内核 v4.2+(uname -r 查看)

ipvlan 有两种不同的模式:L2 和 L3。

L2

和 macvlan bridge 模式工作原理类似,父接口作为交换机来转发子接口的数据。同一个网络的子接口可以通过父接口来转发数据,而如果想发送到其他网络,报文则会通过父接口的路由转发出去。

L3

IPvlan 将要求将路由分发到每个端点。驱动程序仅构建 IPvlan L3 模式端口并将容器附加到接口。整个集群的路由分布超出了这个单一主机范围驱动程序的初始实现。在 L3 模式下,Docker 主机非常类似于在容器中启动新网络的路由器。

创建ipvlan网络

docker network create -d ipvlan \--subnet=192.168.1.0/24 \--gateway=192.168.1.1 \-o ipvlan_mode=l2 \-o parent=eth0 db_net
  • -d ipvlan 指定网络驱动程序为Ipvlan
  • --subnet 指定网络子网
  • --gateway 指定网络网关
  • -o parent 指定网络接口
  • -o ipvlan_mode 设置 IPvlan 工作模式。可以是以下之一:l2, l3,l3s (默认bridgel2)
  • ipvlan-network 是网络的名称
  • ipvlan_flag 设置 IPvlan 模式标志。可以是以下之一:bridge, private,vepa(默认bridge)

拉起alpine容器并使用ipvlan网络

docker run --net=db_net -it --rm alpine /bin/sh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日OJ题_算法_模拟①_力扣1576. 替换所有的问号

目录 模拟算法原理 力扣1576. 替换所有的问号 解析代码 模拟算法原理 模拟算法是一种常用的计算机算法&#xff0c;它模拟了实际问题的运行过程&#xff0c;并通过数学模型来预测结果。模拟算法可以应用于各个领域&#xff0c;例如物理、化学、生物、计算机网络等等。 模拟算…

怎么去除图片中不需要的部分?这三种高效方法快来试一下

在数字图像处理的浩瀚世界中&#xff0c;去除图片中不必要部分的任务&#xff0c;宛如一幅细致的画卷&#xff0c;需精心描绘。这些不必要部分&#xff0c;可能是背景、水印、无关紧要物体或错误部分&#xff0c;它们如同图片中的瑕疵&#xff0c;需要被巧妙地修饰或去除。这不…

《每天一分钟学习C语言·十三》

1、清屏函数和暂停函数 头文件stdlib.h system(“cls”); system(“pause”); //暂停函数&#xff0c;按任意键继续 2、动态内存释放的问题 int ** p new int*[3]; p[0] new int(0); p[1] new int(1); p[2] new int(2);先申请一个二级指针内存空间&#xff0c;每个元素是…

09. 配置Eth-Trunk

文章目录 一. 初识Eth-Trunk1.1. Eth-Trunk的概述1.2. Eth-Trunk的优势1.3. Eth-Trunk的模式的优势 二. 实验专题2.1. 实验1&#xff1a;手工模式2.1.1. 实验拓扑图2.1.2. 实验步骤&#xff08;1&#xff09;配置PC机的IP地址&#xff08;2&#xff09;在交换机接口划入VLAN&am…

【Tomcat与网络11】如何自己实现一个简单的HTTP服务器

在前面我们尝试解释Tomcat的理论&#xff0c;但是呢&#xff0c;很多时候那些复杂的架构和设计会让我们眼花缭乱&#xff0c;以至于忽略了最进本的问题——服务器到底是什么&#xff1f;今天我们就用尽量简单的代码实现一个简易的HTTP服务器。 HTTP启动之后要持续监听&#xf…

校园网网络规划与设计——计算机网络实践报告

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 目录 一、设计目的 二、软硬件环境 三、理论基础 四、设计方案 五、网络配置步骤 六、设计过程中出现的问题及相应解决办法 八、参考资料 一、设计目的 深入理解网络工程的三层层次设计模型&#xff1b; 掌握网络…

Python实现GCJ02坐标系向WGS84坐标系的转换

GCJ02坐标系 GCJ-02&#xff08;官方称地形图非线性保密处理算法&#xff0c;俗称火星坐标系、国测局坐标&#xff09;是一种基于WGS-84制定的大地测量系统&#xff0c;由中国大陆国家测绘地理信息局制定。此坐标系所采用的混淆算法会在经纬度中加入看似随机的偏移。 使用GCJ…

ubuntu nginx配置密码访问并下载

nginx配置密码访问_htpasswd: cannot create file-CSDN博客 sudo apt-get install nginx sudo apt install apache2-utils # htpasswd -c /htpasswd/passwd.db test htpasswd -c /etc/nginx/htpasswd.d/nginx_passwd.kibana test # htpasswd -c ccreate 创建文件 # /htp…

2024年美赛数学建模A题思路分析 - 资源可用性和性别比例

# 1 赛题 问题A&#xff1a;资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…

【Java】阻塞队列

目录 BlockingQueue BlockingQueue接口 三个主要实现类介绍&#xff1a; ArrayBlockingQueue&#xff1a;有界队列 LinkedBlockingQueue&#xff1a;无界队列 SynchronousQueue:同步队列 队列对比 BlockingQueue 对于Queue而言&#xff0c;BlockingQueue是主要的线程安全…

有深浅入数据分析 - 启发法(凭人类的天性做分析)

在做数据分析的时候&#xff0c;往往最优的方法是艰难耗时间的 凭经验处理&#xff0c;迅速做出决策&#xff0c;确识能够奏效&#xff0c;进行数据分析的重要而必要的技能 领导的要求是&#xff1a; 邋遢集的处理方式是&#xff1a; 计量的方式处理 上图的调查问卷可以…

pytorch模型里 safetensors 文件、bin文件和pth文件区别、加载和保存方式

目录 PyTorch模型中的safetensors文件和bin文件区别 safetensors文件 bin文件 结论 区别bin文件和pth文件 1. 文件格式 2. 通用性 3. 期望内容 4. 兼容性和移植性 结论 加载和保存safetensors文件 保存safetensors文件 加载safetensors文件 加载和保存bin文件 保…

JVM 内存配置参数积累

0、简介 在进行JVM内存配置时&#xff0c;应当考虑到应用程序的实际需求和运行环境的资源限制&#xff0c;合理分配Xmx、Xms和Xmn参数&#xff0c;以获得最佳的性能表现。通常建议将Xms和Xmx设置为相同的值&#xff0c;以避免JVM在运行过程中动态调整堆大小带来的性能损耗。而…

Axure 动态面板初使用-实现简单的tab切换页面效果

使用工具版本 Axure 9 实现的效果 步骤过程 1、打开Axure 9&#xff0c;默认进入一个空白页&#xff0c;首先从元件库拉一个动态面板到页面中&#xff0c;位置肯定是C位咯~ 2、将面板尺寸调整一下&#xff0c;设置成你喜欢的数字&#xff0c;比如我就喜欢800600 3、然后…

学习日志以及个人总结(13) 指针!

指针 定义 访问内存地址 操控硬件 指针&#xff1a; 指针基本数据据类 指针数组 指针函数 指针指针 1.指针&#xff1a;就是地址-----就是内存的单元的编号 2.指针变量 语法&#xff1a; 基类型* 指针变量名&#xff1b; 基类型-------数据类型//基础数据类型 //数组…

python脚本将照片按时间线整理

说明&#xff1a;有一次自己瞎折腾&#xff0c;然后把服务器相册搞崩了&#xff0c;后来做了备份同步给找了回来&#xff0c;但是相册的时间线全乱了&#xff0c;看起来非常难受。所以就想通过文件夹的形式把照片重新分类&#xff0c;分类后的结构如下(红色字体为文件夹)&#…

item_get-根据ID取商品详情(shopee.item_get):跨境电商的未来趋势

根据您的需求&#xff0c;我为您撰写了一篇关于“item_get-根据ID取商品详情(shopee.item_get)&#xff1a;跨境电商的未来趋势”的文章。由于篇幅限制&#xff0c;我将提供文章的概要和部分内容&#xff0c;完整的文章将需要更多细节和展开。 item_get-根据ID取商品详情(shope…

《区块链简易速速上手小册》第7章:区块链在其他行业的应用(2024 最新版)

文章目录 7.1 供应链管理7.1.1 供应链管理中区块链的基础7.1.2 主要案例&#xff1a;食品安全追踪7.1.3 拓展案例 1&#xff1a;制药供应链7.1.4 拓展案例 2&#xff1a;汽车行业的零部件追踪 7.2 区块链在医疗保健中的应用7.2.1 医疗保健中区块链的基础7.2.2 主要案例&#xf…

今天聊聊软件研发部门孵化策略

声明&#xff1a;上述内容纯属个人瞎说&#xff0c;如有雷同请联系删除。 引&#xff1a;公司研发二部的同事召回来了&#xff0c;这边先恭喜他们荣耀而归。大家都欢心鼓舞、人事嘘寒问暖、综合端盘倒水&#xff1b;真热闹……。我们部门的同事就在边上办公&#xff0c;感触很深…

如何处理缓存一致性问题

* 如何解决缓存一致性问题 * 1. 更新缓存 * ①先更新缓存&#xff0c;再更新数据库. 如果先更新缓存成功了&#xff0c;但是更新数据库失败了&#xff0c;那么数据库将出现脏数据&#xff0c;否掉 * ②先更新数据库&#xff0c;再更新缓存. 如果先更新数据库&#xff0c;但更…