【云原生】Docker私有仓库搭建以及四大容器重启策略

news2024/10/6 8:23:24

目录

一、registry私有仓库

步骤一:先拉取registry的镜像

步骤二:修改docker的配置文件重启

步骤三:基于registry镜像启动一个容器,可以设置为always重启策略

步骤四:修改想要上传的镜像的标签并上传验证

步骤五:修改另一台主机的docker配置文件重启,然后添加标签,然后上传

浏览器验证

二、基于Docker--harbor私有仓库部署与管理

步骤一:先准备docker-compose编排工具,一般本身就有

步骤二:准备harbor的安装包,然后解压至安装目录中,并修改配置文件harbor.yml

步骤三:进入harbor安装目录,先用./prepare 准备编排文件,然后用./install.sh启动,最后使用docker-compose  ps进行查看

步骤四:进入浏览器http://192.168.20.10进入harbor的客户端

关于harbor创建的排错思路与解决策略

1、实操上传镜像 以及 完成harbor镜像仓库同步

2、关于harbor账号的权限

3、多个harbor仓库,实现镜像同步

 4、如果要修改harbor配置文件

5、移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移。如需重新部署,需要移除 Harbor 服务容器全部数据

三、docker的daemon.json 配置文件里面有哪些可以设置

四、关于容器重启策略


一、registry私有仓库

步骤一:先拉取registry的镜像

[root@localhost ~]#docker pull registry

步骤二:修改docker的配置文件重启

[root@localhost ~]#vim /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.20.10:5000"]
}

[root@localhost ~]#systemctl restart docker

步骤三:基于registry镜像启动一个容器,可以设置为always重启策略

[root@localhost ~]#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:创建容器命名为registry
registry:latest:这个是刚才pull下来的镜像

步骤四:修改想要上传的镜像的标签并上传验证

[root@localhost ~]#docker tag soscscs/myapp:v1 192.168.20.10:5000/nginx:test

[root@localhost ~]#docker push 192.168.20.10:5000/nginx:test

步骤五:修改另一台主机的docker配置文件重启,然后添加标签,然后上传

[root@localhost ~]#docker tag nginx:lnmp 192.168.20.10:5000/nginx:lnmp

[root@localhost ~]#vim /etc/docker/daemon.json
[root@localhost ~]#cat /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.20.10:5000"]
}
[root@localhost ~]#systemctl restart docker
[root@localhost ~]#docker push 192.168.20.10:5000/nginx:lnmp

浏览器验证

#列出私有仓库的所有镜像
curl http://192.168.20.10:5000/v2/_catalog

#查看私有仓库的 centos 镜像有哪些tag
curl http://192.168.20.10:5000/v2/nginx/tags/list

 

二、基于Docker--harbor私有仓库部署与管理

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

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


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


(3)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 进行解密验证。

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

------------------------------------ Harbor 部署 ------------------------------------

步骤一:先准备docker-compose编排工具,一般本身就有

[root@localhost ~]#find / -name docker-compose 
/usr/libexec/docker/cli-plugins/docker-compose
[root@localhost ~]#docker-compose -v
bash: docker-compose: 未找到命令...
[root@localhost ~]#cp /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/
[root@localhost ~]#docker-compose -v
Docker Compose version v2.24.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-compose

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

docker-compose -v

步骤二:准备harbor的安装包,然后解压至安装目录中,并修改配置文件harbor.yml

[root@localhost opt]#ls
containerd  harbor-offline-installer-v1.10.18.tgz  rh
[root@localhost opt]#tar xf harbor-offline-installer-v1.10.18.tgz 
[root@localhost opt]#ls
containerd  harbor  harbor-offline-installer-v1.10.18.tgz  rh
[root@localhost opt]#mv harbor /usr/local/
[root@localhost opt]#cd !$
cd /usr/local/
[root@localhost local]#ls
bin  etc  games  harbor  include  lib  lib64  libexec  nginx  sbin  share  src
[root@localhost local]#cd harbor/
[root@localhost harbor]#ls
common.sh  harbor.v1.10.18.tar.gz  harbor.yml  install.sh  LICENSE  prepare
[root@localhost harbor]#vim harbor.yml


也可以从网上github去下载harbor的包
部署 Harbor 服务
####下载或上传 Harbor 安装程序
Harbor的压缩包下载地址:https://github.com/goharbor/harbor/releases

wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz

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

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

 

关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:
●hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.80.10 或 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 镜像存储到其他的磁盘路径,可以修改这个参数。

步骤三:进入harbor安装目录,先用./prepare 准备编排文件,然后用./install.sh启动,最后使用docker-compose  ps进行查看

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

 

步骤四:进入浏览器http://192.168.20.10进入harbor的客户端

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

关于harbor创建的排错思路与解决策略

1、./install.sh创建容器的时候,提示nginx起不来,然后发现宿主机有nginx服务,也就是说80端口被占用了。。。。那么就把nginx停了,然后重新创建容器

docker-compose up -d      #启动
docker-compose stop       #停止
docker-compose restart    #重新启动
docker-compose down && docker-compose up -d #先停止然后启动

2、如果说浏览器无法访问页面,那么可能是没有开启ip转发

[root@localhost ~]#echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf ##开启路由转发
[root@localhost ~]#sysctl  -p 
net.ipv4.ip_forward = 1
systemctl restart network ##重启网络
systemctl restart docker ##重启docker
docker-compose down && docker-compose up -d #先停止然后启动

1、实操上传镜像 以及 完成harbor镜像仓库同步

 

 

 

2、关于harbor账号的权限

项目管理员有所有权限
维护人员可以上传 拉取 删除
开发人员可以上传拉取
访客可以拉取
受限就是黑名单

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

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

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

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

(3)在客户端上使用普通账户操作镜像
//删除上述打标签的本地镜像
docker rmi 192.168.20.10/myproject-kgc/cirros:v2

//先退出当前用户,然后使用上述创建的账户 kgc-zhangsan 登录
docker logout 192.168.20.10

docker login 192.168.20.10
或
docker login -u kgc-zhangsan -p Abc123456 http://192.168.20.10

//下载和上传镜像进行测试
docker pull 192.168.20.10/myproject-kgc/cirros:v2

docker tag cirros:latest 192.168.20.10/myproject-kgc/cirros:v3
docker push 192.168.20.10/myproject-kgc/cirros:v3

还有日志可以查看
Web 界面日志,操作日志按时间顺序记录用户相关操作 

3、多个harbor仓库,实现镜像同步

快速再部署一个harbor私有仓库

完成以后

仓库管理-----新建目标----

 

 方式二:

先把刚刚的复制规则删掉 

 

 4、如果要修改harbor配置文件

修改 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、移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移。如需重新部署,需要移除 Harbor 服务容器全部数据

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-kgc
cd /data/registry/docker/registry/v2/repositories/myproject-kgc
tar zcvf kgc-registry.tar.gz ./*

6. 如需重新部署,需要移除 Harbor 服务容器全部数据
cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry

三、docker的daemon.json 配置文件里面有哪些可以设置

配置项中可以配置
{
  "graph": "/data/docker",     #数据目录,此行可不加
  "storage-driver": "overlay2",     #存储引擎,此行可不加
  "insecure-registries": ["registry.access.redhat.com","quary.io"],  #私有仓库
  "registry-mirrors": ["https://q"],      #镜像加速,必加项
  "bip": "172.7.5.1/24",     #docker网络,必加项,当然可以把子网掩码可以改小一点,这么有更多的可分配的主机
  "exec-opts": ["native.cgroupdriver=systemd"],     #启动时候的额外参数(驱动),结合K8S使用
  "live-restore": true      #当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)	,必加项
}
以上是建议的配置项

# 配置项注意点:
# graph: 该关键字未来将被弃用,可以采用 "data-root" 替代
# storage-driver: 存储驱动,即分层文件系统,新版是overlay2
# insecure-registries: 不安全的docker registries,即使用http协议推拉镜象
# registry-mirrors: 加速站点,一般可以使用阿里、网易云、docker中国(https://registry.docker-cn.com)的地址
# bip: 指定docker bridge地址(不能以.0结尾),生产中建议采用 172.xx.yy.1/24,其中xx.yy为宿主机ip后四位,方便定位问题
# 若启动失败,查看 /var/log/message 日志排错
# live-restore     启用实时还原(必选)
默认情况下,当Docker守护程序终止时,它将关闭正在运行的容器。从Docker Engine 1.12开始,您可以配置守护程序,以便在守护程序不可用时容器仍在运行。此功能称为实时还原。实时还原选项有助于减少由于守护程序崩溃,计划内的停机或升级而导致的容器停机时间。相当于容器状态与docker进程分离

Kubernetes 推荐使用 systemd 来代替 cgroupfs
 因为systemd是Kubernetes自带的cgroup管理器, 负责为每个进程分配cgroups,  
 但docker的cgroup driver默认是cgroupfs,这样就同时运行有两个cgroup控制管理器, 
 当资源有压力的情况时,有可能出现不稳定的情况

四、关于容器重启策略

docker容器的重启策略:
docker run --restart no|always|on-failure|unless-stopped  .....

no:不管容器是正常退出还是异常退出,总是不重启容器。默认策略
always:不管容器是正常退出还是异常退出,总是重启容器。
on-failure:只在容器异常退出时重启容器。on-failure:N 表示容器异常退出时重启容器最多N次
unless-stopped:总是重启容器,但不考虑docker服务端进程启动时就已经处于退出状态的容器

实验分析 always、unless-stopped、on-failure的区别

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vulnhub靶场之Five86-2

一.环境搭建 1.靶场描述 Five86-2 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. The ultimate goal of this challenge is to get root and to read the one and only flag. Linux skills and fa…

LVGL移植准备

一.LVGL移植关键(框架) 显示驱动:实现与目标平台兼容的显示驱动程序,包括初始化显示设备、绘制像素和设置显示区域等功能。确保与LVGL库进行交互的正确性和有效性。 输入设备驱动:适配目标平台的输入设备驱动程序&…

世界渲染大赛多久一届?

世界渲染大赛,又名世界3D渲染挑战赛,是国外艺术家Pwnisher开启的知名赛事,非常受欢迎。在这个比赛中,你可以看到世界各地不同艺术家进行的创意和主题比拼,有极高的欣赏价值和审美标准。 那么这个比赛举办时间是多少呢&…

C#反射详解

一、反射是什么 1、C#编译运行过程 高级语言->编译->dll/exe文件->CLR/JIT->机器码 2、原理解析 metadata:元数据数据清单,记录了dll中包含了哪些东西,是一个描述。 IL:中间语言,编译把高级语言编译后得到的C#中…

JS之隐式转换与布尔判定

大家思考一下 [ ] [ ] ? 答案是空字符串 为什么呢? 当做加法运算的时候,发现左右两端存在非原始类型,也就是引用类型对象,就会对对象做隐式类型转换 如何执行的?或者说怎么查找的? 第一步&…

网络安全02--负载均衡下的webshell连接

目录 一、环境准备 1.1ubentu虚拟机一台,docker环境,蚁剑 1.2环境压缩包(文件已上传资源): 二、开始复原 2.1上传ubentu: 2.2解压缩 2.3版本20没有docker-compose手动下载,包已上传资源 …

netty源码前置一:Nio

NIO算是实现Reactor设计模式(单Selector 单工作线程)底层window用的是select,linux用的是epoll 网络NIO代码实现: public NIOServer(int port) throws Exception {selector Selector.open();serverSocket ServerSocketChannel.…

逻辑回归(Logistic Regression)和正则化

1.分类问题 案例: 在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们也谈到了肿瘤…

Python网络爬虫实战——实验4:Python爬虫代理的使用

【实验内容】 本实验主要介绍在爬虫采集数据的过程中代理的使用。 【实验目的】 1、掌握代理使用的基本场景; 2、解决IP封锁问题; 3、提高爬虫访问效率; 【实验步骤】 步骤1选择代理服务提供商 步骤2配置爬虫使用代理 步骤3 采集数据生成…

Ubuntu添加AppImage到桌面及应用程序菜单

将AppImage添加到桌面,以PicGo为例 效果: 在桌面创建PicGo.desktop文件,输入以下内容: [Desktop Entry] EncodingUTF-8 TypeApplication #应用名称 NamePicGo #图标路径 Icon/usr/local/AppImage/icons/PicGo.png #启动是否开启…

cmake设置Debug版本和Release版本的输出路径

项目背景:指定可执行文件和动态库输出路径都在bin目录文件夹下,由于项目中存在osg插件,然后我在项目中需要重写osg的插件,这时候就会遇到指定输出路径的问题,由于需要输出到osgPlugins-3.6.5文件夹下,所以使…

嘿嘿,vue之输出土味情话

有点好玩&#xff0c;记录一下。通过按钮调用网站接口&#xff0c;然后解构数据输出土味情话。 lovetalk.vue: <!--vue简单框架--> <template> <!-- 这是一个div容器&#xff0c;用于显示土味情话 --> <div class"talk"> <!-- 当点…

【现代密码学基础】详解完美安全与香农定理

目录 一. 介绍 二. 完美安全的密钥与消息空间 三. 完美安全的密钥长度 四. 最优的完美安全方案 五. 香农定理 &#xff08;1&#xff09;理论分析 &#xff08;2&#xff09;严格的正向证明 &#xff08;3&#xff09;严格的反向证明 六. 小结 一. 介绍 一次一密方案…

正则匹配 | 正则实际应用探索分享

这并不是一篇教正则基础的文章&#xff0c;其正则式不能对您进行使用后的结果负责&#xff0c;请以研究的眼光看待本篇文章。 技术就是懒人为了更好的懒才会想办法搞的东西&#xff0c;我最近因为某些原因需要频繁删除注释 我就想到通过替换的正则功能快速删除文件中的简单注…

Qslog开源库使用

Qslog源码下载地址&#xff1a;https://github.com/victronenergy/QsLog 1.QSLOG使用方式 &#xff08;1&#xff09;源码集成 在你的工程中&#xff0c;直接包含QsLog.pri文件&#xff0c;进行源码集成。当然你也可以包含QsLog.pri后&#xff0c;编译为xx.dll&#xff0c;在…

数据可视化练习

文章目录 试题示例 试题示例 绘制下图所示的表格 根据下表的数据&#xff0c;将班级名称一列作为x轴的刻度标签&#xff0c;将男生和女生两列的数据作为刻度标签对应的数值&#xff0c;使用bar()函数绘制下图所示的柱形图。 方式一 import numpy as np import matplotlib.p…

CUDA编程- - GPU线程的理解 thread,block,grid - 再次学习

GPU线程的理解 thread,block,grid 一、从 cpu 多线程角度理解 gpu 多线程1、cpu 多线程并行加速2、gpu多线程并行加速2.1、cpu 线程与 gpu 线程的理解&#xff08;核函数&#xff09;2.1.1 、第一步&#xff1a;编写核函数2.1.2、第二步&#xff1a;调用核函数&#xff08;使用…

跟着cherno手搓游戏引擎【12】渲染context和首个三角形

渲染上下文&#xff1a; 目的&#xff1a;修改WindowsWindow的结构&#xff0c;把glad抽离出来 WindowsWindow.h:新建m_Context #pragma once #include "YOTO/Window.h" #include <YOTO/Renderer/GraphicsContext.h> #include<GLFW/glfw3.h> #include…

iperf3网络带宽性能测试工具 局域网网络最大带宽高阶教程

iperf3 是一个 TCP, UDP, 和 SCTP (传输层协议)网络带宽测量工具&#xff0c;iperf 是一个用于主动测量 IP 网络上最大可用带宽的工具. 它支持与时间、协议和缓冲区相关的各种参数的调优. 对于每个测试&#xff0c;它报告测量的吞吐量/比特率(带宽), 丢包率和其他参数&#xff…

MySQL 覆盖索引

目录 一、什么是索引 二、索引的有哪些种类&#xff1f; 三、InnoDB的不同的索引组织结构是怎样的呢&#xff1f; 四、什么是覆盖索引 五、如何使用是覆盖索引&#xff1f; 六、如何确定数据库成功使用了覆盖索引呢 总结&#xff1a; 一、什么是索引 索引&#xff08;在 …