Docker-harbor

一、搭建本地私有仓库

1.1 下载Registry镜像

1.2 添加本地私有仓库配置

1.3 重启服务并运行Registry容器

1.4.容器的操作

1.4.1 拉取Nginx镜像并为镜像打标签

1.4.2 上传到私有仓库

1.4.3 列出私有仓库所有镜像

1.4.4  列出私有仓库的镜像的所有标签

1.4.5 先删除原有镜像再拉取私有仓库镜像

二、Harbor简介

2.1 概念

2.1.1 Harbor特性

2.1.2 Harbor的构成

2.1.3 docker Harbor私有仓库的过程

2.1.4 私有仓库指向私有仓库的方式有两种

2.2 部署Docker-Harbor私有仓库

2.2.1 部署Docker-Compose服务

2.2.2 部署Harbor服务

2.2.3 Harbor.cfg配置文件详解

2.2.4 启动Harbor

2.2.5 查看Harbor启动镜像

2.2.6 创建一个新项目

2.2.7 在其他客户端上传镜像

2.3 维护管理Harbor

2.3.1 通过 Harbor Web 创建项目

2.3.2 创建用户并分配权限

2.3.4 在客户端上使用普通账户操作镜像

2.3.5 查看日志

2.3.6 修改Harbor.cfg配置文件

2.3.7 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

三、小结-核心组件


一、搭建本地私有仓库

1.1 下载Registry镜像

docker pull registry

1.2 添加本地私有仓库配置

vim /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.133.80:5000"],                        #添加,注意用逗号结尾
  "registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}

1.3 重启服务并运行Registry容器

systemctl daemon-reload
systemctl restart docker.service
docker run -itd -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
 

-itd:在容器中打开一个伪终端进行交互操作,并在后台运行
-v:把宿主机的/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了
--restart=always:这是重启的策略,在容器退出时总是重启容器
--name registry:创建容器命名为registry
registry:latest:这个是刚才pull下来的镜像

1.4.容器的操作

1.4.1 拉取Nginx镜像并为镜像打标签

docker pull nginx
docker images
docker tag nginx:latest 192.168.133.80:5000/nginx:v1
docker images

 1.4.2 上传到私有仓库

docker push 192.168.133.80:5000/nginx:v1

1.4.3 列出私有仓库所有镜像

curl http://192.168.133.80:5000/v2/_catalog

1.4.4  列出私有仓库的镜像的所有标签

curl http://192.168.133.80:5000/v2/nginx/tags/list

1.4.5 先删除原有镜像再拉取私有仓库镜像

(1)删除镜像

docker images
docker rmi 192.168.133.80:5000/nginx:v1 
docker images

(2)从私有仓库拉取镜像

docker pull 192.168.133.80:5000/nginx:v1 
docker images

本地私有仓库只能在本机单机上进行操作,这里就需要引入Harbor的概念,Harbor私有仓库,是存储镜像的仓库,所有的镜像都存储在Harbor私有仓库中,一般在局域网中使用。 

二、Harbor简介

2.1 概念

Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。

Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP(LDAP轻型目录访问协议) 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。

Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

2.1.1 Harbor特性

基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。

基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。

支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。

镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。

图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。

审计管理:所有针对镜 像仓库的操作都可以被记录追溯,用于审计管理。

支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。

Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

2.1.2 Harbor的构成

Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

●Proxy: 是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。

●Registry: 负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。认证方式有三种:令牌,用户密码,ssl

●Core services: Harbor的核心功能,主要提供以下3个服务:
1)UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。
2)WebHook:为了及时获取Registry上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。
3)Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。

●Database(harbor-db):为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。

●Job services: 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。

●Log collector(harbor-log): 负责收集其他组件的日志到一个地方。

Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。总共分为7个容器运行,通过在docker-compose.yml所在目录中执行 docker-compose ps 命令来查看, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。其中 harbor-adminserver 主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui 所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。

2.1.3 docker Harbor私有仓库的过程

1.所有的请求或认为的操作都会首先交给proxy(反向代理)

2.proxy会先将请求转发给后端Core services,Core services 中包含UI、token(身份验证服务)、webhook(网站的一些服务功能)

3.转发给registry(镜像存储),若需要下载镜像等权限操作,需要通过Core services中的token令牌的身份验证服务才行

4.每一次下载和上传都产生操作记录,生成日志,保存至database中

5.database记录保存镜像的元信息及用户与组的身份信息,通过验证授权才能允许相关操作

2.1.4 私有仓库指向私有仓库的方式有两种

1、/etc/docker/daemon.json

2、/usr/lib/systemd/system/docker.servce
   insecure-registrues $HARBOR_IP (私有仓库的IP地址)

2.2 部署Docker-Harbor私有仓库

2.2.1 部署Docker-Compose服务

注意:Docker要用1.20的版本

cd /usr/local/bin
chmod +x /usr/local/bin/docker-compose
docker-compose --version

2.2.2 部署Harbor服务

(1)解压安装包 

tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

(2)修改Harbor安装的配置文件

vim /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.133.100
--59行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345

2.2.3 Harbor.cfg配置文件详解

关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数

1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:
●hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.10.23 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 为主机名。

●ui_url_protocol:(http 或 https,默认为 http)用于访问 UI 和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。

●max_job_workers:镜像复制作业线程。

●db_password:用于db_auth 的MySQL数据库root 用户的密码。

●customize_crt:该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为 off。

●ssl_cert:SSL 证书的路径,仅当协议设置为 https 时才应用。

●secretkey_path:用于在复制策略中加密或解密远程 register 密码的密钥路径。

2、可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。

注意:如果选择通过 UI 设置这些参数,请确保在启动 Harbor 后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的 auth_mode。当系统中有用户时(除了默认的 admin 用户), auth_mode 不能被修改。 具体参数如下:
●Email:Harbor 需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才启用。请注意,在默认情况下 SSL 连接时没有启用。如果 SMTP 服务器需要 SSL,但不支持 STARTTLS,那么应该通过设置启用 SSL email_ssl = TRUE。

●harbor_admin_password:管理员的初始密码,只在 Harbor 第一次启动时生效。之后, 此设置将被忽略,并且应在 UI 中设置管理员的密码。请注意,默认的用户名/密码是admin/Harbor12345。

●auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为 ldap_auth。

●self_registration:启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在 Harbor 中创建新用户。注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。

●Token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。

●project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。 如果将其值设置为“adminonly”,那么只有 admin 可以创建项目。

●verify_remote_cert:打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。 将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使用。

另外,默认情况下,Harbor 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等对象存储。但需要更新 common/templates/registry/config.yml 文件。
Harbor的默认镜像存储路径在 /data/registry 目录下,映射到docker容器里面的 /storage 目录下。
这个参数是在 docker-compose.yml 中指定的,在 docker-compose up -d 运行之前修改。
如果希望将 Docker 镜像存储到其他的磁盘路径,可以修改这个参数。

2.2.4 启动Harbor

cd /usr/local/harbor/
./prepare    #为 harbor 启动的容器生成一些必要的文件(环境)
./install.sh    #以 pull 镜像并启动容器

2.2.5 查看Harbor启动镜像

docker-compose ps

2.2.6 创建一个新项目

(1)浏览器访问http://192.168.133.100/harbor

(2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮

(3)填写项目名称为“myproject-shibin”,点击“确定”按钮,创建新项目

(4)在服务端使用Docker命令登录和推送镜像默认情况下,Registry 服务器在端口 80 上侦听。

#登录 Harbor
docker login [-u admin -p Harbor12345] http://127.0.0.1
 
#下载镜像进行测试
docker pull nginx
 
#将镜像打标签
格式:docker tag 镜像:标签  仓库IP/项目名称/镜像名:标签
docker tag nginx:latest 127.0.0.1/myproject-shibin/nginx:v1
 
#上传镜像到 Harbor
docker push 127.0.0.1/myproject-shibin/nginx:v1

2.2.7 在其他客户端上传镜像

以上操作都是在 Harbor 服务器本地操作。如果其他客户端登录到 Harbor,就会报如下错误。出现这问题的原因为Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。

在Docker客户端配置操作,解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。

vim /etc/systemd/system/docker.service 
--7行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.133.100 --containerd=/run/containerd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.133.100
#建议用这个

重启 Docker,再次登录 

systemctl daemon-reload
systemctl restart docker
docker login -u admin -p Harbor12345 http://192.168.133.100

下载镜像进行测试

docker pull 192.168.133.100/myproject-shibin/nginx:v1

上传镜像进行测试

docker pull cirros
docker tag cirros:latest 192.168.133.100/myproject-shibin/cirros:v2
docker push 192.168.133.100/myproject-shibin/cirros:v2

2.3 维护管理Harbor

2.3.1 通过 Harbor Web 创建项目

在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。
单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与 Docker Hub 一致。

2.3.2 创建用户并分配权限

在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,
填写用户名为“shibin”,邮箱为“shibin@ctrl.com”,全名为“shibinbin”,密码为“Abc123456”,注释为“管理员”(可省略)。

2.3.3 添加项目成员 

2.3.4 在客户端上使用普通账户操作镜像

#删除上述打标签的本地镜像
docker rmi 192.168.133.100/myproject-shibin/cirros:v2
 
#先退出当前用户,然后使用上述创建的账户登录
docker logout 192.168.133.100
 
docker login -ushibin -p Abc123456 http://192.168.133.100
 
#下载和上传镜像进行测试
docker pull 192.168.133.100/myproject-shibin/cirros:v2
 
docker tag cirros:latest 192.168.133.100/myproject-shibin/cirros:v3

docker push 192.168.133.100/myproject-shibin/cirros:v3

 2.3.5 查看日志

2.3.6 修改Harbor.cfg配置文件

要更改 Harbor的配置文件中的可选参数时,请先停止现有的 Harbor实例并更新 Harbor.cfg;然后运行 prepare 脚本来填充配置; 最后重新创建并启动 Harbor 的实例。

使用 docker-compose 管理 Harbor 时,必须在与 docker-compose.yml 相同的目录中运行。

cd /usr/local/harbor

docker-compose down -v
 
vim harbor.cfg            #只能修改可选参数
 
./prepare
 
docker-compose up -d

2.3.7 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

(1)移除Harbor服务容器

#在Harbor服务器上操作
cd /usr/local/harbor
docker-compose down -v

(2)把项目中的镜像数据进行打包

#持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/Harbor/目录下
ls /data/registry/docker/registry/v2/repositories/myproject-shibin
cd /data/registry/docker/registry/v2/repositories/myproject-shibin
tar zcvf shibin-registry.tar.gz ./*

(3)如需重新部署,需要移除 Harbor 服务容器全部数据

cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry

三、小结-核心组件

Proxy反向代理 通过一个前置的反向代理,接收浏览器,Docker客户端的请求,并且把请求转发给后端的不同的服务
Registry:负责存储Docker镜像,处理Docker pull/push 命令下载和上传
Core Services
Harbor:核心功能,包括UI、WebHook、Token
UI:提供图形界面
Webhook:网站一些服务功能(通知机制)
Token:令牌,提供身份验证服务
Log collector:负责日志(其他组件的日志 上传 下载 用户 访问等日志)的收集,收集这些日志,以供后期进行分析和健康检查
Databases:为核心组件,提供数据库服务,主要记录数据库镜像的源信息以及用户的身份信息
Job Services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上
Adminserver:用于管理用户操作以及身份认证

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Anaconda删除虚拟环境目录pkgs和envs|conda瘦身

这个文件夹里面是专门放不同环境中的包的,只是没有区分环境,都混在一起了, 一般在想要删除一个虚拟环境,除了在命令行中输入conda remove -n your_env_name(虚拟环境名称) --all 然后在envs中删除虚拟环境的文件夹, 还…

企业微信hook接口协议,ipad协议http,客户群发送任务,获取要发送的客户群列表

客户群发送任务,获取要发送的客户群列表 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid": "1688853790533324","id":1101292747044333637, //群发任务id"keyword…

【Unity】如何获得TMP Button下的text内容

【背景】 unity项目中使用了TMP命名空间的Button UI组件。脚本中需要获得Button下Text的内容,但是发现用TextMeshPro仍然无法获得button下的text对象。 【分析】 Hierarchy结构上看明确Button下是有Text组件的: 括号里是TMP,所以理论上用TextMeshPro类型去FindComponent…

navicat 连接 阿里云 RDS mysql 数据库

首先上官方教程连接 下面是我的实操记录 1、先输入正确的账号、密码 2、再加上数据库名称

鸢尾花分类-pytorch实现

前言 本文用pytorch实现了鸢尾花分类,数据不多,只做代码展示用,后续有升级版本。 代码 -*- coding: utf-8 -*- File : main.py Author: Shanmh Time : 2024/05/06 上午9:37 Function:import torch from sklearn import datase…

算法(C++

题目:螺旋矩阵(59. 螺旋矩阵 II - 力扣(LeetCode)) 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入&am…

Java常用5大集合类详解(实战)

文章目录 1、Collection1.1 iterator 迭代器 2、List 有序集合2.1 ArrayList ⭐2.2 LinkedList2.3 Queue 3、Set 无序集合3.1 HashSet ⭐3.2 TreeSet3.3 LinkedHashSet 4、Map 键值集合4.1 HashMap ⭐4.2 TreeMap / LinkedHashMap 5、工具类5.1 Collections5.2 Arrays 【拓展】…

Socket学习记录

本次学习Socket的编程开发,该技术在一些通讯软件,比如说微信,QQ等有广泛应用。 网络结构 这些都是计算机网络中的内容,我们在这里简单回顾一下: UDP(User Datagram Protocol):用户数据报协议;TCP(Transmission Contr…

厂家自定义 Android Ant编译流程源码分析

0、Ant安装 Windows下安装Ant: ant 官网可下载 http://ant.apache.org ant 环境配置: 解压ant的包到本地目录。 在环境变量中设置ANT_HOME,值为你的安装目录。 把ANT_HOME/bin加到你系统环境的path。 Ubuntu下安装Ant: sudo apt…

【数据结构】树和二叉树基本概念和性质

目录 前言1、树的概念1.1 树的基本概念1.2 树的主要概念1.3 树的表示1.4 树在实际中的运用(表示文件系统的目录树结构) 2. 二叉树概念及结构2.1 概念2.2 特殊的二叉树2.3 二叉树的性质 3. 二叉树性质相关选择题练习4. 答案和解析5. 总结 前言 本章带来数…

2024年03月 Scratch 图形化(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共18题,共50分) 第1题 运行程序后,角色一定不会说出的数字是?( ) A:2 B:4 C:6 D:8 答案:A 程序中随机数的取值最小为 2,最大为 20 ,那么随机数加上 2 之后的结果的最小值为 4 ,最大值为 22 。所…

单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 单目标问题的FW烟花优化算法求解matlab仿真,对比PSO和GA。最后将FW,GA,PSO三种优化算法的优化收敛曲线进行对比。 2.测试软件版本以及运行…

【Android项目】“追茶到底”项目介绍

没有多的介绍,这里只是展示我的项目效果,后面会给出具体的代码实现。 一、用户模块 1、注册(第一次登陆的话需要先注册账号) 2、登陆(具有记住最近登录用户功能) 二、点单模块 1、展示饮品列表 2、双向联动…

T型槽地轨承载力是如何连接整个制造过程的强力桥梁(北重公司设计)

T型槽地轨承载力的定义和计算 T型槽地轨是一种用于工业设备运输和装配的关键组件。它由世界上各行各业的生产商广泛采用,其有效的承载力使其成为连接整个制造过程的强力桥梁。本文将介绍T型槽地轨的承载力以及相关的设计要点和应用。 承载力的定义和计算 承载力是…

【前沿模型解析】一致性模型CM(一)| 离散时间模型到连续时间模型数学推导

文章目录 1 离散时间模型2 连续时间模型 得到 SDE 随机微分方程2.1 从离散模型到SDE的推理步骤 3 补充:泰勒展开近似 1 − β i \sqrt{1-\beta_i} 1−βi​ ​ CM模型非常重要 引出了LCM等一系列重要工作 CM潜在性模型的数学公式推导并不好理解 一步一步&#xf…

微信个人号开发api接口-视频号矩阵接口-VIdeosApi

友情链接:VIdeosApi 获取用户主页 接口地址: http://api.videosapi.com/finder/v2/api/finder/userPage 入参 { "appId": "{{appid}}", "lastBuffer": "", "toUserName": "v2_060000231003b2…

WP Rocket插件下载:加速您的WordPress网站,提升用户体验

在互联网速度决定用户体验的今天,一个快速加载的网站对于吸引和保留访问者至关重要。WP Rocket插件,作为一款专为WordPress设计的高性能缓存插件,提供了一套完整的解决方案,帮助您优化网站性能,提升用户体验。 [WP Ro…

51单片机入门:蜂鸣器

蜂鸣器介绍 蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号。 蜂鸣器的种类 1、从结构上:压电式蜂鸣器和电磁式蜂鸣器。 压电式蜂鸣器:通过压电陶瓷的压电效应原理工作的。当加有交变电压时&#xf…

【分布式 | 第五篇】何为分布式?分布式锁?和微服务关系?

文章目录 5.何为分布式?分布式锁?和微服务关系?5.1何为分布式?5.1.1定义5.1.2例子5.1.3优缺点(1)优点(2)缺点 5.2何为分布式锁?5.2.1定义5.2.2必要性 5.3区分分布式和微服…

Unity 性能优化之光照优化(七)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、测试目的一、实时光源是什么?二、开始测试1.场景中只有一个光照的数值情况2.添加4个点光源后4.结果 总结 前言 实时光源数量越多&#x…