Docker harbor私有仓库部署与管理

  • 一、搭建本地私有仓库
  • 二、Harbor私有仓库部署与管理
    • 1、Harbor概述
    • 2、Harbor的特性
    • 3、Harbor的核心组件
      • 3.1 Proxy
      • 3.2 Registry
      • 3.3 Core services
        • 3.3.1 UI(harbor-ui)
        • 3.3.2 WebHook
        • 3.3.3 Token 服务
      • 3.4 Database(harbor-db)
      • 3.5 Log collector
      • 3.6 Job services
    • 4、Harbor部署及配置
      • 4.1 部署 Docker-Compose 服务
      • 4.2 部署 Harbor 服务
        • (1)下载或上传 Harbor 安装程序
        • (2)修改harbor安装的配置文件
      • 4.3 启动 Harbor
      • 4.4 查看 Harbor 启动镜像
      • 4.5 创建一个新项目
        • (1)浏览器访问:http://192.168.147.105 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345
        • (2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮
        • (3)填写项目名称为“myproject-01”,点击“确定”按钮,创建新项目
        • (4)此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上侦听。
        • (5)在 Harbor 界面 myproject-01 目录下可看见此镜像及相关信息
      • 4.6 在其他客户端上传镜像
        • (1)在 Docker 客户端配置操作
        • (2)刷新 Harbor 的 Web 管理界面进行查看,会发现 myproject-01 项目里面有两个镜像
  • 5、维护管理Harbor
    • 5.1 通过 Harbor Web 创建项目
    • 5.2 创建 Harbor 用户
      • (1)创建用户并分配权限
      • (2)添加项目成员
      • (3)在客户端上使用普通账户操作镜像
    • 5.3 查看日志
    • 5.4 修改 Harbor.cfg 配置文件
    • 5.5 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移
      • (1)移除 Harbor 服务容器
      • (2)把项目中的镜像数据进行打包
    • 5.6 如需重新部署,需要移除 Harbor 服务容器全部数据

一、搭建本地私有仓库

#首先下载 registry 镜像
docker pull registry

在这里插入图片描述

#在 daemon.json 文件中添加私有镜像仓库地址
vim /etc/docker/daemon.json
{"insecure-registries": ["192.168.147.105:5000"],						#添加,注意用逗号结尾"registry-mirrors": ["https://rwdk6t4b.mirror.aliyuncs.com"]
}systemctl restart docker.service

在这里插入图片描述

#运行 registry 容器docker run -itd -v /data/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:创建容器命名为registryregistry:latest:这个是刚才pull下来的镜像Docker容器的重启策略如下:
no:默认策略,在容器退出时不重启容器
on-failure:在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3 :在容器非正常退出时重启容器,最多重启3次
always:在容器退出时总是重启容器
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

在这里插入图片描述

#为镜像打标签
docker tag centos:7 192.168.147.105:5000/centos:v1

在这里插入图片描述

#上传到私有仓库
docker push 192.168.147.105:5000/centos:v1#列出私有仓库的所有镜像
curl http://192.168.147.105:5000/v2/_catalog#列出私有仓库的 centos 镜像有哪些tag
curl http://192.168.147.105:5000/v2/centos/tags/list

在这里插入图片描述

#先删除原有的 centos 的镜像,再测试私有仓库下载
docker rmi -f eeb6ee3f44bd
docker pull 192.168.147.105:5000/centos:v1

在这里插入图片描述

二、Harbor私有仓库部署与管理

1、Harbor概述

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

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

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

2、Harbor的特性

  • 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
  • 基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
  • 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
  • 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
  • 图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
  • 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
  • Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

3、Harbor的核心组件

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

3.1 Proxy

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

通过一个前置的反向代理统一接收浏览器、Docker 客户端的请求,并将请求转发给后端不同的服务

这是一个反向代理组件

3.2 Registry

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

负责储存 Docker 镜像
处理 docker push/pull 命令来上传和下载

扩展:令牌、用户密码、ssl 是认证的三种方法

3.3 Core services

Harbor的核心功能,主要提供以下3个服务

3.3.1 UI(harbor-ui)

提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。

3.3.2 WebHook

为了及时获取Registry上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。

3.3.3 Token 服务

负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。

3.4 Database(harbor-db)

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

3.5 Log collector

负责收集其他组件的日志,以供然后进行分析,健康检查等

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

4、Harbor部署及配置

IP服务
Harbor服务器192.168.147.105docker-ce、docker-compose、harbor-offline-v1.2.2
client服务器192.168.147.106docker-ce

4.1 部署 Docker-Compose 服务

//下载或者上传 Docker-Compose
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-composedocker-compose --version

在这里插入图片描述

4.2 部署 Harbor 服务

(1)下载或上传 Harbor 安装程序

wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgztar 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.147.105
--59行--指定管理员的初始密码,默认的 用户名/密码 是 admin/Harbor12345
harbor_admin_password = Harbor12345

在这里插入图片描述
在这里插入图片描述

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

① 所需参数: 这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:

  • hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.147.105 或 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 密码的密钥路径。

② 可选参数: 这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 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 镜像存储到其他的磁盘路径,可以修改这个参数。

4.3 启动 Harbor

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

在这里插入图片描述
在这里插入图片描述

4.4 查看 Harbor 启动镜像

cd /usr/local/harbor/
docker-compose ps

在这里插入图片描述

4.5 创建一个新项目

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

(4)此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,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-01/nginx:v1//上传镜像到 Harbor
docker push 127.0.0.1/myproject-01/nginx:v1

在这里插入图片描述
在这里插入图片描述

(5)在 Harbor 界面 myproject-01 目录下可看见此镜像及相关信息

在这里插入图片描述

4.6 在其他客户端上传镜像

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

docker login -u admin -p Harbor12345 http://192.168.147.105
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.147.105/v2/: dial tcp 192.168.147.105:443: connect: connection refused

在这里插入图片描述

(1)在 Docker 客户端配置操作

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

在这里插入图片描述

//重启 Docker,再次登录
systemctl daemon-reload
systemctl restart docker
//再次登录 Harbor
docker login -u admin -p Harbor12345 http://192.168.147.105
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
//将自动保存凭据到/root/.docker/config.json,下次登录时可直接使用凭据登录 Harbor

在这里插入图片描述

//下载镜像进行测试
docker pull 192.168.147.105/myproject-01/nginx:v1

在这里插入图片描述

//上传镜像进行测试
docker pull cirros
docker tag cirros:latest 192.168.147.105/myproject-01/cirros:v2
docker push 192.168.147.105/myproject-01/cirros:v2

在这里插入图片描述

(2)刷新 Harbor 的 Web 管理界面进行查看,会发现 myproject-01 项目里面有两个镜像

在这里插入图片描述

5、维护管理Harbor

5.1 通过 Harbor Web 创建项目

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

5.2 创建 Harbor 用户

(1)创建用户并分配权限

在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,
填写用户名为“xc”,邮箱为“xcdyx12138@163.com”,全名为“xiongchen”,密码为“Abc123456”,注释为“管理员”(可省略)。
附:用户创建成功后,单击左侧“…”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。

在这里插入图片描述
在这里插入图片描述

(2)添加项目成员

单击项目 -> myproject-01-> 成员 -> + 成员,填写上述创建的用户 xc 并分配角色为“开发人员”。
附:此时单击左侧“…”按钮仍然可对成员角色进行变更或者删除操作

在这里插入图片描述
在这里插入图片描述

(3)在客户端上使用普通账户操作镜像

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

在这里插入图片描述
在这里插入图片描述

5.3 查看日志

Web 界面日志,操作日志按时间顺序记录用户相关操作
在这里插入图片描述

5.4 修改 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
//如果有以下报错,需要开启防火墙 firewalld 服务解决
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-b53c314f45e8 -j RETURN: iptables: No chain/target/match by that name.(exit status 1))systemctl restart firewalld.service
docker-compose up -d

在这里插入图片描述

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

在Harbor服务器上操作

(1)移除 Harbor 服务容器

cd /usr/local/harbor
docker-compose down -v

在这里插入图片描述

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

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

在这里插入图片描述

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

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

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

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

相关文章

C++ 学习系列 -- const 关键字

C 中引入了 const 关键字,被 const 关键字修饰的变量其值不能修改,是只读的。 一 const 变量的初始化与存储 1. const 变量初始化时就需要赋初值,否则无法编译通过 二 const 与指针 指针常量: 指针所指向的值不可改变&…

Python程序化交易接口批量获取数据源码

小编举例下面是一个简单的示例代码,展示如何使用Python的程序化交易接口批量获取数据,例如开发文档参考:MetaTradeAPI (metatradeapi) - Gitee.com 签名 int Init(); 功能 API 初始化 参数 无 返回值 授权成功的交易账户数量 返回值 &…

一百六十六、MySQL——systemctl stop mysqld无法停止MySQL8.0服务

一、目的 为了解决MySQL的中文乱码问题,需要对/etc/my.cnf文件进行参数配置。 而对/etc/my.cnf文件进行配置参数之前,需要先停止MySQL服务 二、错误命令语句示范 (一)错误的命令语句 # systemctl stop mysqld (…

C++进阶之多态

多态 多态的概念多态的定义及实现1.多态的构成条件2.虚函数3.虚函数的重写4.虚函数重写的两个例外5.C11 override 和 final6.重载、覆盖(重写)、隐藏(重定义)的对比 抽象类1.概念2.接口继承和实现继承 多态的原理1.虚函数表2.多态的原理3.动态绑定与静态绑定 单继承和多继承关系…

SQL高阶语句

目录 1、概念 1.1、概述 1.2、常见的MySQL高阶语句的概念: 1.3、 SQL高阶语句的作用 2、常用查询 2.1、按关键字排序 2.1.1、概述和作用 2.1.2、 (1)语法 2.1.3、模板表:ky30 ​编辑2.1.4、分数按降序排列 2.1.5、ORDER…

Kubernetes技术--使用kubeadm搭建高可用的K8s集群(贴近实际环境)

1.高可用k8s集群架构(多master) 2.安装硬件要求 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 注: 这里属于教学环境,所以使用三台虚拟机模拟实现。 3.部署规划 4.部署前准备 (1).关闭防火墙 systemctl stop fi…

《Go 语言第一课》课程学习笔记(十二)

函数 Go 函数与函数声明 在 Go 语言中,函数是唯一一种基于特定输入,实现特定任务并可返回任务执行结果的代码块(Go 语言中的方法本质上也是函数)。在 Go 中,我们定义一个函数的最常用方式就是使用函数声明。 第一部…

重新理解百度智能云:写在大模型开放后的24小时

在这些回答背后共同折射出的一个现实是——大模型不再是一个单选题,而更是一个综合题。在这个新的时代帆船上,产品、服务、安全、开放等全部都需要成为必需品,甚至是从企业的落地层面来看,这些更是刚需品。 作者| 皮爷 出品|产…

在Nodejs中使用JWT进行鉴权

什么是 JSON Web Token(JWT)? JSON Web Token(JWT)是一种用于在web上传递信息的标准,它以JSON格式表示信息,通常用于身份验证和授权。 JWT由三个部分组成:Header(头部&…

软件测试Day4|软件测试理论02

目录 6. 测试用例基础6.1 测试用例的定义6.2 测试用例要素6.3 测试用例设计和编写的作用 7. 黑盒测试用例设计方法7.1 用例设计方法分类7.2 测试数据选择7.2.1 等价类划分(1)等价类划分原理(2)确定等价类的原则(3&…

摆动序列【贪心算法】

摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 class Solution {public int wiggleMaxLength(int…

zabbix安装部署

前期准备:安装mysql数据库和nginx 一、下载zabbix rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm yum-config-manager --enable rhel-7-server-optional-rpms yum install epel-release numactl yum install…

Spring Cloud Gateway的快速使用

环境前置搭建Nacos&#xff1a;点击跳转 Spring Cloud Gateway Docs 新建gateway网关模块 pom.xml导入依赖 <!-- 网关 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifact…

Spring MVC 学习总结

学习目标 了解 Spring MVC 是什么&#xff0c;为什么要使用它或者说它能解决什么问题&#xff0c;其与 Spring 是什么关系。理解为什么配置 Spring MVC 的前端控制器的映射路径为 “/” 会导致静态资源访问不了&#xff0c;掌握怎么处理这个问题。掌握基于注解方式使用 Spring…

Zookeeper的使用

一、Zookeeper简介 分布式协调框架&#xff0c;小型的树形结构数据共享储存系统。 zookeeper的应用场景 集群管理 注册中心 配置中心 发布者将数据发布到ZooKeeper一系列节点上面&#xff0c;订阅者进行数据订阅&#xff0c;当数据有变化时&#xff0c;可及时得到数据的变…

算法通关村——从40个亿中产生一个不存在的整数

Titile: 海量数据场景下的热门算法题 从40个亿中产生一个不存在的整数 题目要求&#xff1a;给定一个输入文件&#xff0c;包含40亿个非负整数&#xff0c;请设计一个算法&#xff0c;产生一个不存在该文件中的整数&#xff0c;假设你有1GB的内存来完成这项任务。 进阶&…

MySQL 5种索引应用

文章目录 简介一、聚集索引二、唯一索引三、聚集索引和唯一索引对比四、非唯一&#xff08;普通&#xff09;索引五、全文索引六、组合索引七、索引验证总结 简介 在本篇文章中&#xff0c;我们将学习MySQL中5种不同类型的索引及其应用场景&#xff0c;以及它们的优缺点。 一…

基于YOLOv8分割模型实现垃圾识别

基于YOLOv8分割模型实现垃圾识别 本文首发于公众号【DeepDriving】&#xff0c;欢迎关注。 0. 引言 YOLOv8是Ultralytics开源的一个非常火的AI算法&#xff0c;目前支持目标检测、实例分割、姿态估计等任务。如果对YOLOv8的安装和使用还不了解的可以参考我之前写的这篇文章&am…

从C语言到C++_36(智能指针RAII)auto_ptr+unique_ptr+shared_ptr+weak_ptr

目录 1. 智能指针的引入_内存泄漏 1.1 内存泄漏 1.2 如何避免内存泄漏 2. RAII思想 2.1 RAII解决异常安全问题 2.2 智能指针原理 3. auto_ptr 3.1 auto_ptr模拟代码 4. unique_ptr 4.1 unique_ptr模拟代码 5. shared_ptr 5.1 shared_ptr模拟代码 5.2 循环引用 6.…

(笔记六)利用opencv进行图像滤波

&#xff08;1&#xff09;自定义卷积核图像滤波 import numpy as np import matplotlib.pyplot as plt import cv2 as cvimg_path r"D:\data\test6-6.png" img cv.imread(img_path)# 图像滤波 ker np.ones((6, 6), np.float32)/36 # 构建滤波器&#xff08;卷积…