当前位置: 首页 > news >正文

docker Harbor私有仓库部署管理

        搭建本地私有仓库,但是本地私有仓库的管理和使用比较麻烦,这个原生的私有仓库并不好用,所以我们采用harbor私有仓库,也叫私服,更加人性化。     

一、什么是Harbor

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

        Harbor以Docker 公司开源的Registry 为基础,提供了图形管理UI、基于角色的访问控制(Role Based AccessControl)、AD/LDAI们成以心宙计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文

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

1.1 harbor特性

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

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

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

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

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

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

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

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

1.2 Harbor的构成

Harbor 在架构上主要有 

proxyRegistryCore servicesDatabase(Harbor-db)Log collector(Harbor-log)Job services六个组件。        

proxy:反向代理

通过一个前置的发现代理统一 接受浏览器、docker客户端的请求 并且请求转发给后端的不通服务

Registry   负责存储docker镜像

处理docker pull/push  命令来做上传/下载,由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。

认证方式有三种
令牌
用户密码
ssl

Core services   Harbor的核心功能

UI   提供图像界面

webhook    网站一些服务功能(通知机制)

token          令牌    提供身份验证服务

databases    核心组件     提供数据库服务

主要记录数据库镜像的元信息 以及用户的身份信息

log collector

复制日志(其他的组件日志上传  下载用户  访问等)收集  以供后期进行分析和健康检查等

Job services

主要用于镜像复制,本

地镜像可以同步到Harbor实例上

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 这样一个数据配置管理中心来完成

1.3 架构数据流向

1.所有的请求或认为的操作都会首先交给proxy(反向代理)
2.proxy会先将请求转发给后端Core services,Core services 中包含

3.UI、token(身份验证服务)、webhook(网站的一些服务功能)
4.转发给registry(镜像存储),若需要下载镜像等权限操作,需要通过Core services中的token令牌的身份验证服务才行
5.每一次下载和上传都产生操作记录,生成日志,保存至database中
6.database记录保存镜像的元信息及用户与组的身份信息,通过验证授权才能允许相关操作

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

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

二、Harbor的部署以及配置文件

2.1 Harbor部署

2.1.1 环境准备

主机ip组件
Harbor 服务器192.168.2.11docker-ce、docker-compose、harbor-offline-v1.2.2
client 服务器192.168.2.13docker-ce

前提准备:关闭防火墙,安装好docker

2.1.2 部署docker-compose

#上传下载好的docker-compose文件
docker-compose 

chmod  +x docker-compose 
mv  docker-compose  /usr/local/bin/docker-compose

#或者从github下载
curl -L https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2.1.3 下载Harbor软件包

#软件包下载地址  https://github.com/goharbor/harbor/releases/download/
#上传软件包到/opt/目录
ls harbor-offline-installer-v1.2.2.tgz 
#解压到/usr/local/目录
tar vxf harbor-offline-installer-v1.2.2.tgz  -C /usr/local/

2.1.4 修改Harbor安装的配置文件

vim /usr/local/harbor/harbor.cfg
#第5行,修改,设置Harbor的IP地址或者域名。如果设置为域名,则需要做域名映射
5// hostname = 192.168.10.26
#59行,指定管理员的初始密码的,默认的用户名/密码是 admin/Harbor12345
59// harbor_admin_password = Harbor12345

#在配置好了 harbor.cfg 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境)
cd /usr/local/harbor/
./prepare

Harbor.cfg配置文件的两类参数

2.1.4.1可选参数

        这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 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.1.4.2 所允许参数

        所需参数:这些参数需要在配置文件 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 密码的密钥路径。

另外,默认情况下,Harbour 将镜像存储在本地文件系统上。
在生产环境中,可以考虑使用其他存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等对象存储。
但需要更新 common/templates/registry/config.yml 文件。

2.1.5  启动Harbor

cd /usr/local/harbor/
在配置好了 harbor.cfg 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境)
再执行命令 ./install.sh 以 pull 镜像并启动容器

2.1.6 查看 Harbor 启动镜像

docker-compose ps

2.1.7 镜像控制

docker-compose up -d      #后台启动
docker-compose stop       #停止
docker-compose restart    #重新启动

2.1.8 创建一个新项目

(1)浏览器访问:http://192.168.2.11 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345

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

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

(4)此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上监听。

2.1.9 命令行登录 Harbor 【两种登录方式】

1.docker login http://127.0.0.1

2.docker login -u admin -p Harbor12345 http://127.0.0.1  

2.2 测试Harbor仓库

2.2.1 下载镜像进行推送测试

docker pull nginx

2.2.2 将镜像打标签

#格式:docker tag 镜像:标签 仓库IP/项目名称/镜像名:标签

docker tag nginx:latest 127.0.0.1/myproject-cph/nginx:v1


2.2.3 上传镜像到Harbor

docker push 127.0.0.1/myproject-cph/nginx:v1
#在 Harbor 界面 myproject-zzh 目录下可看见此镜像及相关信息

2.2.4 在其他客户端上传镜像

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

[root@localhost ~]# docker login -u admin -p Harbor12345 http://192.168.2.11
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.10.26/v2/": dial tcp 192.168.10.26:443: connect: connection refused

2.2.5 在 Docker 客户端配置操作【192.168.2.13】

#解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。
vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.2.13 --containerd=/run/containerd/containerd.sock

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.2.13

重启docker,再次登录

systemctl daemon-reload
systemctl restart docker

2.2.6 再次登录Harbor

docker login -u admin -p Harbor12345 http://192.168.2.11
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Login Succeeded

2.2.7 下载镜像进行测试

docker push 192.168.2.12/myproject-cph/nginx:v1
docker images
REPOSITORY                                TAG       IMAGE ID       CREATED        SIZE
192.168.2.12/myproject-zzh/nginx   v1        605c77e624dd   6 months ago   141MB

2.2.8 上传镜像测试

docker pull  centos 

docker tag centos:latest 192.168.2.11/myproject-cph/centos:v1 docker push 192.168.2.11/myproject-zzh/centos:v1

三、管理(维护)Harbor的项目

3.1 通过 Harbor Web 创建项目

        在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。

        单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与Docker Hub 一致。

3.1.1 创建Harbor用户

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

        附:用户创建成功后,单击左侧“…”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。

        角色 权限说明
        访客 对于指定项目拥有只读权限
        开发人员 对于指定项目拥有读写权限,但没用删除权限
        维护人员 对于指定项目拥有读写权限,也能对修改其它配置,比如创建 Webhooks
        项目管理员 除了读写权限,同时拥有用户管理/镜像扫描等管理权限

3.1.2 添加项目成员

单击项目 -> myproject-gb-> 成员 -> + 成员,填写上述创建的用户zzh 并分配角色为“开发人员”。

附:此时单击左侧“…”按钮仍然可对成员角色进行变更或者删除操作

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

#删除上述打标签的本地镜像
docker rmi 5d0da3dc9764 -f
#使用上述创建的账户登录
docker login -u cph -p Abc123456 http://192.168.2.11

#下载和上传镜像进行测试
docker pull 192.168.10.26/myproject-zzh/centos:v1

docker tag 192.168.10.26/myproject-zzh/nginx:v1 192.168.10.26/myproject-zzh/nginx:v2
docker push 192.168.10.26/myproject-zzh/nginx:v2

3.1.4 查看日志

web 界面日志,操作日志按时间顺序记录用户相关操作

四、远程同步

4.1 安装第二台harbor

安装上面的安装步骤在客户端安装harbor服务,做第二台harbor服务器

4.2 配置同步

在192.168.2.11主上配置

192.168.2.11切换用户admin-> 复制管理 -> +目标 -> 目标名称zzh -> 目标URL http://192.168.2.14 -> 用户名密码admin/Harbor12345 -> 确定

添加规则:项目 -> 选择项目名称 -> 复制 -> +复制规则 -> 名称zzh ->启动 -> 目标名称zzh ->测试连接 ->确定

相关文章:

docker Harbor私有仓库部署管理

搭建本地私有仓库,但是本地私有仓库的管理和使用比较麻烦,这个原生的私有仓库并不好用,所以我们采用harbor私有仓库,也叫私服,更加人性化。 一、什么是Harbor Harbor是VWware 公司开源的企业级Docker Registry项…...

序列化的不同格式:JSON、XML、TOML、CSON、YAML

前言 这篇文章参考于知乎,进行了一些总结。 正文 首先什么是序列化,数据序列化是从一个系统获取一些信息,将其转换为其它系统可以读取的格式,然后将其传递给其它系统的过程。也就是可以让不同系统“通信”。 序列化需要满足两…...

Mapreduce | 案例

根据提供的数据文件【test.log】 数据文件格式:姓名,语文成绩,数学成绩,英语成绩 完成如下2个案例: (1)求每个学科的平均成绩 (2)将三门课程中任意一门不及格的学生过滤出来 (1)求每…...

U盘文件剪切丢失怎么办?揭秘原因并给出恢复方法

在日常生活和工作中,U盘已成为我们不可或缺的数据存储和传输工具。但有时候,我们在对U盘中的文件进行剪切操作时,会遇到文件丢失的情况。这种突如其来的数据消失往往会让人感到惊慌和困惑。那么,为什么U盘剪切时文件会丢失呢&…...

软件设计师考试---访问控制列表、堆,栈和堆栈、防火墙、数据流图、嵌入式操作、绑定方式、uml、模式、传输协议

访问控制列表 访问控制列表(Access Control List,ACL) 是一种用于控制对资源(如文件、目录、网络资源等)访问权限的方法。ACL是在计算机安全领域广泛使用的概念,它允许系统管理员定义哪些用户或系统进程有…...

vlock工具:锁定Linux终端的安全智能方法

虚拟控制台是 Linux 非常重要的功能,它们为系统用户提供 shell 提示,以非图形设置方式使用系统,该设置只能在物理机上使用,而不能远程使用。 用户只需从一个虚拟控制台切换到另一个虚拟控制台即可同时使用多个虚拟控制台会话。 …...

【Linux】Docker 安装部署 Nacos

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 【Linux】Docker 安装部署 Nacos docker搜索na…...

纯血鸿蒙APP实战开发——阅读翻页方式案例

介绍 本示例展示手机阅读时左右翻页,上下翻页,覆盖翻页的功能。 效果图预览 使用说明 进入模块即是左右翻页模式。点击屏幕中间区域弹出上下菜单。点击设置按钮,弹出翻页方式切换按钮,点击可切换翻页方式。左右翻页方式可点击翻…...

如何从Mac电脑恢复任何删除的视频

Microsoft Office是包括Mac用户在内的人们在世界各地创建文档时使用的最佳软件之一。该软件允许您创建任何类型的文件,如演示文稿、帐户文件和书面文件。您可以使用 MS Office 来完成。所有Microsoft文档都可以在Mac上使用。大多数情况下,您处理文档&…...

【Halcon 内存泄漏记录 - C#】

Halcon 内存泄漏记录 - C# 1. Bitmap 转 HImage2. new 之后要Dispose()3. 切换配方后,内存会增加4. Parallel.For 嵌套Parallel.For, 会出现问题5. 图像预处理使用需要注意不能直接在原有变量上赋值 1. Bitmap 转 HImage 由于Bitmap 在转化时使用Bitmap…...

MT8370_联发科MTK8370(Genio 510)芯片性能规格参数

MT8370芯片是一款利用超高效的6nm制程工艺打造的边缘AI平台,具有强大的性能和功能。这款芯片集成了六核CPU(2x2.2 GHz Arm Cortex-A78 & 4x2.0 GHz Arm Cortex-A55)、Arm Mali-G57 MC2 GPU、集成的APU(AI处理器)和DSP,以及一个HEVC编码加速引擎&…...

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 多元素控件 | Table Widget的说明及介绍 文章编号&#…...

ES全文检索支持拼音和繁简检索

ES全文检索支持拼音和繁简检索 1. 实现目标2. 引入pinyin插件2.1 编译 elasticsearch-analysis-pinyin 插件2.2 安装拼音插件 3. 引入ik分词器插件3.1 已有作者编译后的包文件3.2 只有源代码的版本3.3 安装ik分词插件 4. 建立es索引5.测试检索6. 繁简转换 1. 实现目标 ES检索时…...

【DDR 终端稳压器】Sink and Source DDR Termination Regulator [C] S0 S1 S2 S3 S4 S5 6状态

TPS51200A-Q1 器件通过 EN 功能提供 S3 支持。EN引脚可以连接到终端应用中的SLP_S3信号。当EN 高电平(S0 状态)时,REFOUT 和 VO 引脚均导通。当EN 低电平(S3状态)时,VO引脚关断并通过内部放电MOSFET放电时…...

使用IIS部署Vue项目

前提 使用IIS部署Vue项目,后端必须跨域,不要在Vue中用proxy跨域,那个只在dev环境中有用! IIS安装,不用全部打勾,有些他默认就是方块 ■ 选择性安装的,就维持原样就可以。 添加网站配置 右键…...

QT+多线程TCP服务器+进阶版

针对之前的服务器,如果子线程工作类里面需要使用socket发送消息,必须要使用信号与槽的方法, 先发送一个信号给父进程,父进程调用socket发送消息(原因是QT防止父子进程抢夺同一资源,因此直接规定父子进程不能…...

Java入门基础学习笔记12——变量详解

变量详解: 变量里的数据在计算机中的存储原理。 二进制: 只有0和1, 按照逢2进1的方式表示数据。 十进制转二进制的算法: 除二取余法。 6是110 13是1101 计算机中表示数据的最小单元:一个字节(byte&…...

bitmap requires a valid src attribute

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、问题记录四、 推…...

Java刷题-基础篇

目录 题目1:打印1~100内奇数和、偶数和 题目2:计算5的阶乘 题目3:计算 1!2!3!4!5! 的和 题目4:找1~100之间即能被3整除,又能被5整除的数字,要求必须使用break/continue 题目5:实现猜数字小…...

Linux——mysql运维篇

回顾基本语句: 数据定义语言 ( DDL ) 。这类语言用于定义和修改数据库的结构,包括创建、删除和修改数据库、表、视图和索引等对象。主要的语句关键字包括 CREATE 、 DROP 、 ALTER 、 RENAME 、 TRUNCATE 等。 create database 数据库 &…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

离线语音识别方案分析

随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...

CTF show 数学不及格

拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 ​ 根据题目…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...

Gitlab + Jenkins 实现 CICD

CICD 是持续集成(Continuous Integration, CI)和持续交付/部署(Continuous Delivery/Deployment, CD)的缩写,是现代软件开发中的一种自动化流程实践。下面介绍 Web 项目如何在代码提交到 Gitlab 后,自动发布…...