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

Harbor仓库部署安装、向仓库推送,拉取镜像、容器的基础使用(超级详细,非常透彻)

Harbor 环境搭建笔记
作为新手,在搭建 Harbor 环境的过程中,我参考了大量资料,学到了很多宝贵的知识,但也遇到了不少挑战。虽然目前这套环境仅在测试环境中成功运行,但仍有许多细节需要完善。记录这些经验不仅有助于个人学习,也希望能与技术爱好者们共同交流,欢迎各位大佬指出任何不准确之处。

目录

安装Harbor仓库

1、安装Harbor前的基本思路和环境

2、安装Docker-Compose服务

3、部署Harbor服务

3.1 下载Harbor软件包(源码安装)

3.2 解压

3.3 修改配置文件

3.4 创建并且启动Docker容器

3.5 测试

4、重新加载配置文件

Harbor仓库基础使用

使用 HTTP 发布镜像到 Harbor

①添加用户构建项目

②发布镜像到Harbor

③从Harbor中拉取镜像

容器运行的基础使用

远程主机下载镜像


一、安装Harbor仓库

1.安装Harbor前的基本思路和环境

操作系统:确保你使用的是支持的CentOS版本(例如7.x或8.x)。Harbor官方建议使用64位的操作系统。
登录的用户:root
使用环境:Centos7
Docker Engine:Harbor是基于容器运行的,所以你需要先安装Docker。可以参考我写的博客来进行安装部署。安装docker并拉取镜像超详细步骤(复制粘贴都可以)_飞牛docker拉取镜像教程分享-CSDN博客
Docker Compose:用于管理多容器应用。Harbor需要Docker Compose来启动其组件。下面会有我写的详细操作步骤。你也可以从Standalone | Docker Docs获取安装指南。

节点IP所需服务
Harbor服务器192.168.232.60docker-ce、docker-compose、harbor-offline-v1.2.2
Client192.168.232.61docker-ce

Docker-CE:Docker CE 是 Docker 公司推出的免费版本的 Docker 引擎

Docker-Compose:是 Docker 官方提供的一个工具,用于定义和运行多个容器化应用程序的工具。通过一个单独的 docker-compose.yml 配置文件,可以定义应用程序的服务、网络、卷等信息,然后使用 docker-compose 命令进行统一的管理和操作

Harbor Offline Installer v1.2.2:Harbor 是一个企业级的 Docker 镜像仓库管理系统,提供了图形管理界面、安全访问控制、LDAP/AD 集成等功能,用于存储、管理和分发 Docker 镜像

1.1 安装docker-ce

安装Harbor仓库时,docker环境是必须的;

您的虚拟机里有docker-ce的话可以继续往后操作,如果没有安装docker-ce的可以参考一下我的这篇博客来进行安装部署。

安装docker并拉取镜像超详细步骤(复制粘贴都可以)_docker镜像-CSDN博客

1.2 关闭防火墙

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0

1.3 服务器进行改名,方便区分

[root@localhost ~]# hostnamectl set-hostname harbor
[root@localhost ~]# bash
[root@harbor ~]# 

2.安装Docker-Compose服务

要下载并安装 Docker Compose 独立版,请运行:

curl -SL https://github.com/docker/compose/releases/download/v2.32.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

将可执行权限应用于安装目标路径中的独立二进制文件。

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

使用 测试和执行 Docker Compose 命令。

[root@harbor ~]# ls /usr/local/bin/
docker-compose
[root@harbor bin]# docker-compose --version
Docker Compose version v2.32.0
[root@harbor bin]# ll
总用量 63164
-rwxr-xr-x. 1 root root 64678453 12月 26 13:41 docker-compose

3.部署Harbor服务

3.1 下载Harbor软件包(源码安装)

https://github.com/goharbor/harbor/releases/download/v2.12.1/harbor-offline-installer-v2.12.1.tgz

下载完成后,将下载好的包传入你的虚拟机中

想更加详细的了解如何安装harbor服务的请看官方文档,里面包含如何在线,离线下载

Harbor 文档 |下载 Harbor 安装程序

3.2 解压

[root@harbor ~]# tar -zxvf harbor-offline-installer-v2.12.1.tgz 
harbor/harbor.v2.12.1.tar.gz
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl
[root@harbor ~]# ls
anaconda-ks.cfg  harbor  harbor-offline-installer-v2.12.1.tgz

将解压包移动到/usr/local目录下

mv harbor /usr/local/

或者你也可以这样写

tar -zxvf harbor-offline-installer-v2.12.1.tgz -C /usr/local/

这条命令会直接将软件包解压到/usr/local目录下,无需使用mv命令进行移动

3.3 修改配置文件

harbor.yml.tmp 文件是 Harbor 安装包中提供的一个模板文件,它包含了启动和配置 Harbor 所需的所有设置项。

[root@harbor ~]# cd /usr/local/harbor/
[root@harbor harbor]# cp -i harbor.yml.tmpl harbor.yml

将 harbor.yml.tmp 复制并重命名为 harbor.yml 不仅仅是为了进行备份,还因为Harbor 的安装和准备脚本(如 prepare 和 install.sh)会查找名为 harbor.yml 的文件来进行配置读取和处理。如果你没有将其重命名为 harbor.yml,这些脚本将无法找到正确的配置文件,从而导致部署错误或失败。

编辑harbor.yml文件

[root@harbor harbor]# vi harbor.yml

再往下滑一点:

3.4 创建并且启动Docker容器

如果你已经编辑好了 harbor.yml 文件,接下来可以运行以下命令来准备 Harbor:

[root@harbor harbor]# ./prepare

./prepare 脚本是 Harbor 安装过程中的一个关键步骤,它负责根据 harbor.yml 文件中定义的配置来生成或更新 Harbor 所需的各种配置文件。

执行安装脚本:

[root@harbor harbor]# ./install.sh

主要功能:

1、创建并启动 Docker 容器:./install.sh 脚本会使用之前通过 ./prepare 生成的 docker-compose.yml 文件,来创建并启动所有必要的 Docker 容器,这些容器构成了完整的 Harbor 系统。
2、初始化数据库和服务:对于首次安装或升级,该脚本会初始化或更新所需的数据库表结构,并为其他服务(如核心服务、作业服务等)做准备。
3、设置管理员密码:如果这是第一次安装 Harbor,./install.sh 会根据 harbor.yml 中的配置设置初始管理员账户的密码。
4、加载默认配置和资源:这可能包括但不限于设置默认策略、添加系统用户、配置项目等。
验证安装状态:在完成所有操作后,脚本可能会检查各个服务的状态,以确保它们都已成功启动。

3.5 测试

浏览器搜索  192.168.232.60:8083

4.重新加载配置文件

如何在修改完配置文件后重新加载成功?

案例目标:

         我要将端口号8083修改成85,应该怎么做才能成功重新加载配置文件呢?

案例实施:

1、首先我们修改harbor.yml配置文件

[root@harbor harbor]# vi harbor.yml

2、修改完成后我们先执行./prepare来重新加载配置文件

[root@harbor harbor]# ./prepare 

./prepare 脚本会根据最新的 harbor.yml 文件生成或更新必要的配置文件。这一步非常重要,因为它确保了所有内部组件和服务的配置都与你修改后的设置相匹配。

3、停止现有的容器

[root@harbor harbor]# docker-compose down
[+] Running 10/10✔ Container nginx              Removed                                                                                            4.3s ✔ Container registryctl        Removed                                                                                            3.8s ✔ Container harbor-jobservice  Removed                                                                                            3.8s ✔ Container harbor-core        Removed                                                                                            0.8s ✔ Container harbor-portal      Removed                                                                                            1.2s ✔ Container harbor-db          Removed                                                                                            0.8s ✔ Container registry           Removed                                                                                            0.4s ✔ Container redis              Removed                                                                                            0.6s ✔ Container harbor-log         Removed                                                                                           10.3s ✔ Network harbor_harbor        Removed                                                                                            0.1s 

为了使新配置生效,你需要先停止当前正在运行的 Harbor 容器。这样可以避免旧配置继续影响系统。

如果你只想停止特定的服务而不是全部服务,可以使用 -s 参数指定服务名称。

4、启动 Harbor

[root@harbor harbor]# docker-compose up -d
[+] Running 10/10? Network harbor_harbor        Created                                                                                            0.2s ? Container harbor-log         Started                                                                                            2.8s ? Container registry           Started                                                                                           10.9s ? Container registryctl        Started                                                                                           10.9s ? Container harbor-db          Started                                                                                           10.9s ? Container harbor-portal      Started                                                                                           10.9s ? Container redis              Started                                                                                           10.9s ? Container harbor-core        Started                                                                                           12.6s ? Container nginx              Started                                                                                           21.1s ? Container harbor-jobservice  Started                                                                                           21.1s 

使用新的配置文件重新启动 Harbor。docker-compose up -d 命令会在后台启动所有定义的服务,并根据需要创建和拉取镜像。

5、验证配置是否生效

确认新配置已经成功应用并且 Harbor 正常工作。你可以通过访问 Harbor 的 Web 界面、检查日志文件或测试特定功能来验证这一点。

1.访问harbor的web界面

192.168.232.60:85

登录成功

2.检查日志文件或测试特定功能

[root@harbor harbor]# docker ps  # 查看所有运行中的容器状态
[root@harbor harbor]# docker logs <container_name>  # 查看特定容器的日志输出

二、Harbor仓库基础使用

Harbor作为镜像仓库,主要的交互方式就是将镜像上传到Harbor,以及从Harbor上下载拉取指定版本的镜像。

  • 在传输镜像前,可以先使用Harbor提供的权限管理,将项目设置为私有项目,并对不同用户设置不同角色,从而更方便管理镜像。

如果你的 Harbor 仓库配置为使用 HTTP 而不是 HTTPS,推送镜像的过程基本相同,但有一些特别需要注意的地方,特别是关于 Docker 的安全设置。下面是具体步骤以及注意事项:

使用 HTTP 发布镜像到 Harbor

 确保 Docker 配置允许不安全的注册表

默认情况下,Docker 客户端不允许与未使用 HTTPS 的 Docker 注册表通信,因为这被认为是不安全的。为了允许通过 HTTP 推送镜像,你需要修改 Docker 守护进程的配置文件来添加你的 Harbor 作为“不安全的注册表”。

1.1 编辑 Docker 配置文件:
在大多数 Linux 系统上,Docker 配置文件位于 /etc/docker/daemon.json。如果该文件不存在,请创建它。

{"insecure-registries" : ["your-harbor-domain:port"]
}

将 your-harbor-domain 替换为你的 Harbor 实例的域名或 IP 地址,并将 port 替换为实际使用的 HTTP 端口号(例如 80 或你自定义的其他端口)。

[root@harbor ~]# vi /etc/docker/daemon.json
[root@harbor ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://vi0gw6fg.mirror.aliyuncs.com",           "https://docker.m.daocloud.io",          "https://docker.mirrors.sjtug.sjtu.edu.cn" ],"insecure-registries": ["192.168.232.60:85"]
}

没有配置阿里云加速器的,可以参考我的这篇博客,里面有非常详细的教程

安装docker并拉取镜像超详细步骤(复制粘贴都可以)_docker镜像-CSDN博客

1.2 重启 Docker 服务: 修改配置文件后,记得重启 Docker 服务以使更改生效。

[root@harbor ~]# systemctl restart docker

2. 登录到 Harbor

由于我们现在使用的是 HTTP 协议,所以可以直接使用以下命令登录:

docker login http://192.168.232.60:85

系统会提示你输入用户名和密码。成功登录后,你会看到“Login Succeeded”的消息。

或者你也可以这样登录

docker login -uadmin -pHarbor12345 192.168.232.60:85

我也不知道为什么http方式登录不进去,这里跪求各位大佬好心帮助。。。

[root@harbor harbor]# docker login -uadmin -pHarbor12345 192.168.232.60
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.232.60/v2/": dial tcp 192.168.232.60:443: connect: connection refused
[root@harbor harbor]# docker login -uadmin -pHarbor12345 192.168.232.60:85
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "http://192.168.232.60:85/v2/": Get "https://192.168.232.60:85/service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry": http: server gave HTTP response to HTTPS client

①添加用户构建项目

1、创建用户

系统管理-用户管理-创建用户

创建成功后:

2、构建项目(设置为私有)

3、给项目追加用户

②发布镜像到Harbor

1、首先设置登录仓库信息

docker login -u 用户名 -p 密码 Harbor地址
[root@harbor harbor]# docker login -uadmin -pHarbor12345 192.168.232.60:85

2、标记镜像

在推送之前,你需要为镜像打上正确的标签,以便它能够被推送到指定的 Harbor 项目中。标签应该包含 Harbor 的域名、项目名称以及镜像名称和标签。

docker tag <local-image>:<tag> your-harbor-domain/<project>/<image-name>:<tag>

例如,如果你有一个名为 hello-world 的镜像,并希望将其推送到 my_test1 项目中,标签可以是:

 docker tag hello-world:latest 192.168.232.60:85/my_test1/hello-world:latest 

3、推送镜像到 Harbor

使用 docker push 命令将标记好的镜像推送到 Harbor 仓库。

docker push your-harbor-domain/<project>/<image-name>:<tag>

继续上面的例子:

docker push 192.168.232.60:85/my_test1/hello-world:latest

4、验证镜像是否成功推送

登录到 Harbor 的 Web 界面,导航到相应的项目页面,检查镜像列表以确认镜像已经成功上传。

也可以使用 Docker CLI 来验证:

docker pull your-harbor-domain/<project>/<image-name>:<tag>

③从Harbor中拉取镜像

1、拉取仓库镜像

成功登录之后,你可以使用 docker pull 命令来拉取所需的镜像。确保你使用的镜像名称包含完整的仓库路径和标签。

docker pull 192.168.232.60:85/my_test1/hello-world:latest

2、验证镜像

拉取完成后,你可以使用 docker images 命令列出本地存储的所有镜像,以确认新拉取的镜像是否已成功下载。

docker images

3、运行容器

最后,你可以启动一个容器来测试拉取的镜像是否正常工作。

docker run --rm -it 192.168.232.60:85/my_test1/hello-world:latest

三、容器运行的基础使用

1、 基本运行命令

最简单的运行命令如下:

docker run --rm -it 192.168.232.60:85/my_test1/hello-world:latest

--rm:在容器退出时自动删除容器。
-it:交互模式,保持标准输入输出打开。

2、指定端口映射

如果你想将容器内的端口映射到主机上的特定端口,可以使用 -p 参数。例如,将容器的 8080 端口映射到主机的 8080 端口:

docker run -d -p 8080:8080 192.168.232.60:85/my_test1/hello-world:latest

-d:后台运行容器。
-p:指定端口映射,格式为 host_port:container_port。

3、挂载卷

如果你需要将主机上的目录或文件挂载到容器内,可以使用 -v 参数。例如,将主机的 /data 目录挂载到容器的 /app/data 目录:

docker run -d -v /data:/app/data 192.168.232.60:85/my_test1/hello-world:latest

4、设置环境变量

如果需要在容器启动时设置环境变量,可以使用 -e 参数。例如,设置 APP_ENV=production:

docker run -d -e APP_ENV=production 192.168.232.60:85/my_test1/hello-world:latest

5、命名容器

给容器指定一个名称可以方便管理和引用,使用 --name 参数。例如,将容器命名为 lifeng0577

docker run -d --name lifeng0577 192.168.232.60:85/my_test1/hello-world:latest

6、查看容器日志

如果你想查看正在运行的容器的日志输出,可以使用 docker logs 命令:

docker logs hello-world

7、停止和移除容器

当不再需要运行的容器时,可以使用以下命令停止并移除它:

 docker stop myapp-containerdocker rm myapp-container

或者,如果你之前使用了 --rm 选项,容器会在退出时自动被删除。

四、远程主机下载镜像

问题:

     如何使用另外一台虚拟机,来下载本次实验机器搭建仓库中的镜像呢?

任务实施:

要在另一台虚拟机上下载(拉取)来自这台虚拟机上 Harbor 仓库的镜像,你需要确保以下几点:

1.网络可达性:两台虚拟机之间的网络是连通的,并且目标虚拟机上的 Harbor 服务可以被源虚拟机访问。
2.Harbor 配置正确:Harbor 注册表配置正确,并且可以通过网络访问。
3.Docker 客户端配置:源虚拟机上的 Docker 客户端已配置为信任 Harbor 的证书(如果是 HTTPS),或配置了不安全注册表(如果是 HTTP)。

1、登录 Harbor

在另一台虚拟机上安装并配置 Docker 后,使用 docker login 命令登录到 Harbor。请替换 <your_username> 和 <your_password> 为实际的用户名和密码。

echo "<your_password>" | docker login --username <your_username> --password-stdin http://192.168.232.60:85

如果 Harbor 使用 HTTPS,则替换 URL 为 https://192.168.232.60 并确保端口号正确。

2、配置 Docker 客户端(仅限 HTTP)

如果你使用的是 HTTP 而不是 HTTPS,需要配置 Docker 客户端以信任这个不安全的注册表。编辑 /etc/docker/daemon.json 文件,添加 Harbor 的地址到 insecure-registries 列表中,并重启 Docker 服务。

{"insecure-registries": ["192.168.232.60:85"]
}

然后重启 Docker 服务以应用更改:

systemctl restart docker

3、拉取镜像

成功登录后,使用 docker pull 命令从 Harbor 拉取所需的镜像。请根据你的实际需求替换 <namespace>、<repository> 和 <tag>。

docker pull 192.168.232.60:85/<namespace>/<repository>:<tag>

例如,如果你想拉取一个名为 hello-world 的镜像,并且它位于 my_test1 命名空间中,标签为 latest,你可以这样操作:

docker pull 192.168.232.60:85/my_test1/hello-world:latest

4、验证镜像

拉取完成后,你可以使用 docker images 命令来列出本地存储的所有镜像,以确认新拉取的镜像是否已成功下载。

docker images

相关文章:

Harbor仓库部署安装、向仓库推送,拉取镜像、容器的基础使用(超级详细,非常透彻)

Harbor 环境搭建笔记 作为新手&#xff0c;在搭建 Harbor 环境的过程中&#xff0c;我参考了大量资料&#xff0c;学到了很多宝贵的知识&#xff0c;但也遇到了不少挑战。虽然目前这套环境仅在测试环境中成功运行&#xff0c;但仍有许多细节需要完善。记录这些经验不仅有助于个…...

【论文+源码】一个基于SSM(Spring + Spring MVC + MyBatis)的公寓电能计量系统

为了实现一个基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;的公寓电能计量系统&#xff0c;我们需要创建一个简单的Web应用程序来记录和显示每个公寓的电能使用情况。以下是一个基本的实现示例。 我们将包括以下几个部分&#xff1a; 数据库表设计实体类DAO层…...

开源架构的容器化部署优化版

上三篇文章推荐&#xff1a; 开源架构的微服务架构实践优化版&#xff08;New&#xff09; 开源架构中的数据库选择优化版&#xff08;New&#xff09; 开源架构学习指南&#xff1a;文档与资源的智慧锦囊&#xff08;New&#xff09; 我管理的社区推荐&#xff1a;【青云交社区…...

linux安装redis及Python操作redis

目录 一、Redis安装 1、下载安装包 2、解压文件 3、迁移文件夹 4、编译 5、管理redis文件 6、修改配置文件 7、启动Redis 8、将redis服务交给systemd管理 二、Redis介绍 1、数据结构 ①字符串String ②列表List ③哈希Hash ④集合Set ⑤有序集合Sorted Set 2、…...

万里数据库GreatSQL监控解析

GreatSQL是MySQL的一个分支&#xff0c;专注于提升MGR&#xff08;MySQL Group Replication&#xff09;的可靠性及性能。乐维监控平台可以有效地监控GreatSQL&#xff0c;帮助用户及时发现并解决潜在的性能问题。 通过在GreatSQL服务器上安装监控代理&#xff0c;收集数据库性…...

商米电子秤服务插件

概述 SunmiScaleUTS封装商米电子秤服务模块&#xff0c;支持商米旗下S2, S2CC, S2L CC等设备&#xff0c;设备应用于超市、菜市场、水果店等,用于测量商品的重量,帮助实现快捷、准确、公正的交易等一系列商业场景。 功能说明 SDK插件下载 一. 电子秤参数 型号:S2, S2CC, …...

Java-写一个计数器

一个简单的线程安全的计数器实现。我们将使用AtomicInteger来确保计数操作是线程安全的,并 且提供基本的增减和获取计数值的功能。 简单线程安全计数器 import java.util.concurrent.atomic.AtomicInteger;public class Counter {private final AtomicInteger count = new …...

VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本”

VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本”VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本”解决方案&#xff1a; 1.用get-ExecutionP…...

微信小程序 单选多选radio/checkbox 纯代码分享

单选按钮 <radio-group class"radiogroup" bindchange"radioChange"> <label class"radio" wx:for"{{items}}"> <radio value"{{item.name}}" checked"{{item.checked}}" /> {{item.value}} &…...

Visual Studio 2022安装教程

1、下载网址 Visual Studio 2022 IDE安装网址借助 Visual Studio 设计&#xff0c;具有自动完成、构建、调试、测试功能的代码将与 Git 管理和云部署融为一体。https://visualstudio.microsoft.com/zh-hans/vs/ 点击图片所示 双击运行 2、安装 点击C桌面开发&#xff08;右边…...

批量读取pdf发票中二维码的信息

如下代码Java类&#xff1a; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.write.builder.ExcelWriterBuilder; import com.alibaba.excel.write.metadata.Writ…...

Apache Hive常见问题

入门问题 什么是Apache Hive&#xff1f; 解释Hive的用途。Hive作为基于Hadoop的数据仓库工具是如何工作的&#xff1f;与传统关系型数据库相比&#xff0c;使用Hive有什么优势&#xff1f; Hive和关系型数据库管理系统&#xff08;RDBMS&#xff09;之间的区别是什么&#…...

SpringCloud源码分析-Gateway

Gateway核心原理&#xff0c;请求经过一系列的责任链最后到达服务端。...

基于N-HiTS神经层次插值模型的时间序列预测——cross validation交叉验证与ray tune超参数优化

论文链接&#xff1a;https://arxiv.org/pdf/2201.12886v3 N-HiTS: Neural Hierarchical Interpolation for TimeSeries Forecasting \begin{aligned} &\text{\large \color{#CDA59E}N-HiTS: Neural Hierarchical Interpolation for TimeSeries Forecasting}\\ \end{aligne…...

Windmill 实战:快速构建自动化工作流和用户界面

1. 引言 在当今快节奏的开发环境中,能够快速构建内部工具和自动化工作流的平台变得越来越重要。Windmill 就是这样一个强大的开源开发者基础设施平台,它能够将脚本自动转换为工作流程和用户界面。本文将深入探讨 Windmill 的使用,从安装到实际应用,帮助您了解如何利用这个…...

51c自动驾驶~合集44

我自己的原文哦~ https://blog.51cto.com/whaosoft/12969097 #Towards Generalist Robot Policies 清华大学&字节 | 迈向通用机器人策略&#xff1a;如何选择VLA&#xff1f; 论文标题&#xff1a;Towards Generalist Robot Policies: What Matters in Building Vision…...

设计模式 创建型 工厂模式(Factory Pattern)与 常见技术框架应用 解析

工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种封装对象创建过程的方式&#xff0c;使得对象的创建与使用分离&#xff0c;从而提高了系统的可扩展性和可维护性。 一、核心思想 工厂模式的核心思想是将“实例化对象”的操作与…...

ElasticSearch7.10-分词器

文章目录 分词器1.字符过滤器1.介绍2.过滤html标签3.mappings过滤规则&#xff08;屏蔽非文明用语&#xff09;4.正则替换 2.自定义分词器1.代码2.查询 3.中文分词器1.下载ik分词器7.10.0版本&#xff08;跟es对应&#xff09;2.应用ik分词器1.进入插件目录下创建一个ik目录2.将…...

MLP、CNN、Transformer 的区别解析

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、Java 与 Python 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在未来…...

Android Camera压力测试工具

背景描述&#xff1a; 随着系统的复杂化和业务的积累&#xff0c;日常的功能性测试已不足以满足我们对Android Camera相机系统的测试需求。为了确保Android Camera系统在高负载和多任务情况下的稳定性和性能优化&#xff0c;需要对Android Camera应用进行全面的压测。 对于压…...

[Qt] 常用控件 | QWidget | “表白程序2.0”

目录 一、控件概述 控件体系的发展阶段&#xff1a; 二、QWidget 核心属性 核心属性概览&#xff1a; 1、enabled 2、Geometry 实例 1: 控制按钮的位置 实例 2: 表白 程序 i、Window Frame 的影响 ii、API 设计理念 iii、Geometry 和 FrameGeometry 的区别 &#xf…...

word无法插入svg格式图片

插入后出现这样的窗口&#xff0c;表明word版本低&#xff0c;没有svg这个选项。 因此这就是区别。在b站找升级word视频。...

【UE5 C++课程系列笔记】20——共享指针的简单使用

目录 概念 创建共享指针示例 重设共享指针 共享指针内容转移 概念 共享指针&#xff08;主要以 TSharedPtr 为例&#xff09;&#xff0c;TSharedPtr 基于引用计数机制来工作&#xff0c;旨在解决对象所有权共享以及确保在合适的时候自动释放对象资源的问题。它允许多个 TS…...

Oracle 数据库 dmp文件从高版本导入低版本的问题处理

当前有个需求是将oracle 19c上的数据备份恢复到oracle 11g上使用。我们通过exp命令远程进行备份&#xff0c;然后通过imp进行恢复时出现IMP-00010: not a valid export file, header failed verification报错。 这是数据库版本问题&#xff0c;在使用exp命令导出的时候使用的客…...

Tomcat优化指南

以下是一份详细的Tomcat优化指南&#xff1a; 一、JVM&#xff08;Java虚拟机&#xff09;优化 内存设置 堆内存&#xff08;Heap Memory&#xff09; 调整-Xms&#xff08;初始堆大小&#xff09;和-Xmx&#xff08;最大堆大小&#xff09;参数。一般来说&#xff0c;将初始…...

本地调试自定义Maven Plugin步骤

添加自定义插件到dependencies 找到对应依赖的类&#xff0c;打上断点。 debug运行插件。...

css实现文字描边

效果 学习啦 -webkit-text-stroke-width&#xff1a; 设置文本描边的宽度&#xff0c;值可以是任何长度单位&#xff08;如 px, em, rem 等&#xff09; -webkit-text-stroke-color&#xff1a;设置文本描边的颜色&#xff0c;值可以是任何颜色值&#xff08;如 red, green, bl…...

B2B营销的新篇章:开源AI智能名片S2B2C商城小程序的应用探索

摘要&#xff1a; B2B营销&#xff0c;作为企业间营销活动的总称&#xff0c;因其独特的业务特性而呈现出不同于B2C营销的显著特征。在数字化转型的大潮中&#xff0c;B2B企业正积极探索新的营销手段以提高效率和竞争力。本文旨在探讨B2B营销的基本特性&#xff0c;并重点引入…...

坐标系统转换方法研究与实现

坐标系统转换方法研究与实现 摘要:坐标系统是测量工作中定位的基础,坐标系统有很多形式和基准,不同历史时期所建立和使用的坐标系是不同的。随着科学技术的进步,测量方法和观测技术不断改进,采用的参考椭球及定位方式也逐步完善和精化。为更加精确的确定点位信息并综合利…...

naive ui 使用地址记录

naive ui 地址Naive UI Naive UI 是一个 Vue3 的组件库。 要了解如何安装&#xff0c;参见安装。 它比较完整&#xff0c;主题可调&#xff0c;用 TypeScript 写的&#xff0c;快...

std__invoke 的使用

std__invoke 的使用 文章目录 std__invoke 的使用1. std::invoke 的功能2. 语法3. 使用场景1. 调用普通函数2. 调用成员函数3. 调用成员函数&#xff08;通过指针或引用&#xff09;4. 调用函数对象&#xff08;仿函数&#xff09;5. 调用 Lambda 表达式 4. std::invoke 的优势…...

【Vue】深入理解v-model指令-父子组件数据绑定

一、什么是v-model&#xff1f; v-model是Vue.js中的一个指令&#xff0c;用于在表单元素上实现数据的双向绑定。简单来说&#xff0c;v-model可以让我们轻松地读取和更新数据&#xff0c;无需手动操作DOM。 二、标签选择器组件分析 我们先来看一下子组件的代码&#xff1a;…...

html+css+js网页设计 美食 六角西餐厅美食3个页面

htmlcssjs网页设计 美食 六角西餐厅美食3个页面 (带js) 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取…...

ubuntu 常见问题(持续记录)

1 ubuntu server 22.04 设置静态 IP ubuntu server 在重启之后&#xff0c;IP 会变化&#xff0c;这很不利于作内网穿透&#xff0c;因此很有必要使用静态 IP。 登录进系统之后&#xff1a; cd /etc/netplan/ ls # 我这里是 50-cloud-init.yamlifconfig # 查看网卡接口&…...

网络安全 | 物联网安全:从设备到网络的全方位防护

网络安全 | 物联网安全&#xff1a;从设备到网络的全方位防护 一、前言二、物联网设备安全2.1 物联网设备的特点与安全风险2.2 物联网设备安全防护策略 三、物联网网络通信安全3.1 物联网网络通信的安全挑战3.2 物联网网络通信安全防护措施 四、物联网数据安全4.1 物联网数据的…...

浅谈torch.utils.data.TensorDataset和torch.utils.data.DataLoader

1.torch.utils.data.TensorDataset 功能定位 torch.utils.data.TensorDataset 是一个将多个张量&#xff08;Tensor&#xff09;数据进行简单包装整合的数据集类&#xff0c;它主要的作用是将相关联的数据&#xff08;比如特征数据和对应的标签数据等&#xff09;组合在一起&…...

大模型 LangChain 开发框架-初探

大模型 LangChain 开发框架-初探 一、LangChain 概述 LangChain 是一个强大的由大型语言模型&#xff08;LLM&#xff09;驱动的应用程序开发框架。它的核心价值在于提供了标准化组件接口、高效的任务编排能力以及可观察性和评估机制。通过这些特性&#xff0c;LangChain 有效…...

MySQL 窗口函数

MySQL 窗口函数 1&#xff0c;窗口函数 1.1&#xff0c;什么是窗口函数1.2&#xff0c;基本语法 2&#xff0c;函数详解 2.1&#xff0c;聚合函数2.2&#xff0c;排序函数2.3&#xff0c;偏移函数2.4&#xff0c;值函数 3&#xff0c;进阶用法 1&#xff0c;窗口函数 1.1&am…...

【大模型系列】MultiUI(2024.11)

Paper&#xff1a;https://arxiv.org/pdf/2410.13824Github&#xff1a;https://neulab.github.io/MultiUI/Author&#xff1a;Junpeng Liu et al., 卡内基梅隆 核心1&#xff1a; 先基于text-based LLMs获取网页的accessibility tree(辅助功能树&#xff0c;https://200t.w3c…...

学习笔记079——数据结构之【树】

文章目录 1、重点概念1.1、结点概念1.2、树节点声明 2、树2.1、定义2.2、结点的度2.3、结点关系2.4、结点层次2.5、树的深度 3、二叉树3.1、定义3.2、二叉树特点3.3、二叉树性质3.4、斜树3.5、满二叉树3.6、完全二叉树3.7、二叉树的存储结构3.7.1、顺序存储3.7.2、二叉链表 3.8…...

CPT203 Software Engineering 软件工程 Pt.3 系统建模(中英双语)

文章目录 5. System Modeling&#xff08;系统建模&#xff09;5.1 Context models&#xff08;上下文模型&#xff09;5.2 Interaction models&#xff08;交互模型&#xff09;5.2.1 Use case modeling&#xff08;用况建模&#xff09;5.2.2 Sequence diagram&#xff08;顺…...

vue使用vue-seamless-scroll进行轮播滚动展示内容

我这里只是记录下一些基本的东西&#xff0c;具体大家可以查看官网介绍&#xff0c;有更详细的使用文档&#xff08;目前有vue和js版本&#xff09;&#xff1a; https://chenxuan0000.github.io/vue-seamless-scroll/zh/ 安装组件&#xff1a; npm install vue-seamless-scro…...

python入门

目录 一、Python的诞生 二、Python的特点 三、Python环境的搭建 1.搭建运行环境 2.搭建开发环境 一、Python的诞生 如果大家在上大学之前有接触过一些关于编程的课程&#xff0c;Python绝对是最早接触的语言之一。 在学习任何一门编程语言之前&#xff0c;都需要了解它的…...

深度解析 Python 网络框架:Django、Tornado、Flask 和 Twisted

目录 引言Python 网络框架概述Django&#xff1a;全栈开发的首选框架 3.1 Django 的核心特性3.2 Django 的应用场景3.3 优势与不足 Tornado&#xff1a;高性能的异步框架 4.1 Tornado 的异步特性4.2 Tornado 的应用场景4.3 优势与不足 Flask&#xff1a;轻量级的微框架 5.1 Fl…...

摆脱Zotero存储限制:WebDAV结合内网穿透打造个人文献管理云平台

文章目录 前言一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 前言 如果你是科研工作者、学生或者任何需要频繁处理大量学术资料的人士&#xff0c;你一定对如何高效管理和引用文献感到头…...

Unity 对Sprite或者UI使用模板测试扣洞

新建两个材质球&#xff1a; 选择如下材质 设置如下参数&#xff1a; 扣洞图片或者扣洞UI的材质球 Sprite或者UI的材质球 新建一个单独Hole的canvas&#xff0c;将SortOrder设置为0&#xff0c;并将原UI的canvans的SortOrder设置为1 对2DSprite则需要调整下方的参数 hole的O…...

Wend看源码-Java-Arrays 工具集学习

摘要 java.util.Arrays 是 Java 标准库中的一个实用工具类&#xff0c;它提供了各种静态方法来操作数组&#xff0c;包括排序、搜索、比较、填充等。这些方法简化了对数组的操作&#xff0c;并且在很多情况下可以提高代码的可读性和效率。以下是关于Arrays类中提供的一些主要方…...

【算法复健】0102 快速选择算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、算法引入1. 冒泡排序2.快速排序3. 快速选择(1)题目&#xff1a;数组中的第K个最大元素&#xff08;2&#xff09;代码 前言 本文由快速排序算法引入快速选…...

【疑难杂症】 HarmonyOS NEXT中Axios库的响应拦截器无法拦截424状态码怎么办?

今天在开发一个HarmonyOS NEXT的应用的时候&#xff0c;发现http接口如果返回的状态码是424时&#xff0c;我在axios中定义的拦截器失效了。直接走到了业务调用的catch中。 问题表现&#xff1a; 我的拦截器代码如下&#xff1a; 解决办法&#xff1a; 先说解决办法&#xff…...

口语笔记——使动词

每个使动词都可以有三种形式&#xff0c;以move为例&#xff1a; move作为动词可表达&#xff1a;使……感动&#xff0c;让……感动&#xff0c;通常用于主谓宾结构。ed作为形容词可表达&#xff1a;感动的&#xff0c;通常用于主系表结构。ing作为形容词可表达&#xff1a;令…...