简单说说-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,一经查实,立即删除!

相关文章

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

在数字图像处理的浩瀚世界中&#xff0c;去除图片中不必要部分的任务&#xff0c;宛如一幅细致的画卷&#xff0c;需精心描绘。这些不必要部分&#xff0c;可能是背景、水印、无关紧要物体或错误部分&#xff0c;它们如同图片中的瑕疵&#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; 掌握网络…

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; 计量的方式处理 上图的调查问卷可以…

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;分类后的结构如下(红色字体为文件夹)&#…

《区块链简易速速上手小册》第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…

1451A/D/F捷变信号发生器

01 1451A/D/F捷变信号发生器 产品综述&#xff1a; 1451系列捷变信号发生器采用直接数字合成&#xff08;DDS&#xff09;技术和直接模拟合成技术&#xff08;ADS&#xff09;相结合的设计方案&#xff0c;实现覆盖10MHz~3/20/40GHz全频段的频率捷变&#xff0c;捷变时间小于…

分布式事务(四)——TCC补偿模式解决方案

系列目录&#xff1a; 《分布式事务&#xff08;一&#xff09;—— 事务的基本概念》 《分布式事务&#xff08;二&#xff09;—— CAP和Base理论》 《分布式事务&#xff08;三&#xff09;—— 两阶段提交解决方案&#xff08;2PC&#xff09;》 一、常见分布式事务解决…

QML自定义ComboBox组件,支持动态筛选

QtQuick.Controls提供了ComboBox组件&#xff0c;该组件能够满足日常的下拉选择框的需求&#xff0c;但当需要用户在ComboBox中通过输入关键字进行自动匹配时&#xff0c;原生的组件虽然提供了editable属性用于输入关键字&#xff0c;但是匹配内容不弹出下拉框&#xff0c;无法…

03、全文检索 -- Solr -- Solr 身份验证配置(给 Solr 启动身份验证、添加用户、删除用户)

目录 全文检索 -- Solr -- Solr 身份验证配置启用身份验证&#xff1a;添加用户&#xff1a;删除用户&#xff1a; 全文检索 – Solr – Solr 身份验证配置 学习之前需要先启动 Solr 执行如下命令即可启动Solr&#xff1a; solr start -p <端口>如果不指定端口&#xf…

7-2.递归思想代码练习题

例题1.按顺序打印一个数据的每一位 1234 输出 1 2 3 4 解决问题的思路 如何拿到这个数的每一位 1234%104 1234/10123 123%103 123/1012 12%102 12/101 1%101 递推公式&#xff1a;%10 /10 初始条件&#xff1a;1-9之间的数直接打印&#xff08;n<10&#xff09; n>10 进行…

最近nvm安装报错的原因找到了——npm原淘宝镜像正式到期!

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 背景 错误原因 问题排查 淘宝镜像 证书到期 问题解决 结语 背景 我们…

HAL库配置CAN通信

一、CAN总线波特率计算 CAN总线通信的各节点通信时会产生相位差&#xff0c;所以要进行位同步&#xff0c;两个节点保持步调一致。 CAN_SJW&#xff1a;重新同步跳跃宽度(SJW) 。定义了在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元。 CAN_BS1&a…

【数据分享】1929-2023年全球站点的逐日最低气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…

wsl + vscode 离线配置 ERROR: Faild to download https://update.code.visualstudio.com

内网情况配置 wsl 和 vscode。在wsl中下载不了 vscode 的核心。 报错&#xff1a; ERROR: Faild to download https://update.code.visualstudio.com/commit:8b3775030ed1a69b13e4f4c628c612102e30a681/server-linux-x64/stable 很多情况下是没有现成的VS Code Server程序的&…