容器镜像仓库
文章目录
- 1、docker hub
- 1_注册
- 2_登录
- 3_创建容器镜像仓库
- 4_在本地登录Docker Hub
- 5_上传容器镜像
- 6_下载容器镜像
- 2、harbor
- 1_获取 docker compose二进制文件
- 2_获取harbor安装文件
- 3_获取TLS文件
- 4_修改配置文件
- 5_执行预备脚本
- 6_执行安装脚本
- 7_验证运行情况
- 8_访问harborUI界面
- 9_harbor重启时存在的问题
- 3、docker镜像上传至Harbor及镜像下载
- 1_修改docker daemon使用harbor
- 2_docker tag
- 3_docker push
- 4_docker pull
- 5_向 Harbor 和 Docker 提供证书
- 4、阿里云容器镜像仓库
- 1_创建命名空间
- 2_创建镜像仓库
- 3_本地登录
- 4_使用容器镜像仓库
- 5、总结
容器镜像仓库(Container Image Registry)是用来存储、管理、分发和共享容器镜像的系统。
容器镜像本质上是一个包含所有必要代码、库、配置文件以及环境依赖的可执行包,而镜像仓库则提供了一个集中管理这些镜像的平台,使得容器可以跨环境、跨平台共享和分发。
容器镜像仓库的出现解决了本地存储镜像占用空间大且管理困难等多个问题,尤其是在大规模应用和分布式系统的环境中,带来了很大的便利。
1、docker hub
Docker Hub 是 Docker 官方推出的容器镜像仓库,旨在为开发者提供一个集中的公共存储库来存放和共享Docker 镜像。
Docker Hub 的推出使得开发人员能够快速地上传、下载和分享容器镜像,大大简化了容器的分发和管理过程。
Docker Hub 提供了数千个官方和社区镜像,包括操作系统镜像、数据库镜像、编程语言环境镜像等。
用户可以通过 Docker Hub 提供的 API 进行自动化操作,同时也可以直接使用命令行工具 docker pull
来从Docker Hub 拉取镜像,或者通过 docker push
上传镜像。
官方网址:https://hub.docker.com/ 。
1_注册
准备邮箱及用户ID,访问网址:https://www.docker.com/
2_登录
3_创建容器镜像仓库
创建时注意命名规范
我们这里是个人版,所以只能创建一个仓库,如果想要创建多个需要花钱$。
这里提示了我们推送镜像的命令,格式就是:docker push namespace/repository_name:tagname
。
4_在本地登录Docker Hub
默认可以不添加docker hub
容器镜像仓库地址
docker login
执行后可以看到如下输出:
USING WEB-BASED LOGIN
To sign in with credentials on the command line, use 'docker login -u <username>'Your one-time device confirmation code is: VBZB-SCWC
Press ENTER to open your browser or submit your device code here: https://login.docker.com/activateWaiting for authentication in the browser…
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/#credential-stores
访问控制台提示地址(https://login.docker.com/activate)并填写验证码
完成后控制台将会输出登陆成功的消息
Login Succeeded 成功
登出
docker logout
5_上传容器镜像
在登录 Docker Hub 主机上传容器镜像,向全球用户共享容器镜像。
查看原始容器镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 3 years ago 231MB
重新为容器镜像打标记
docker tag centos:latest shenyang112/centos:v1
重新打标记后容器镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
shenyang112/centos v1 5d0da3dc9764 3 years ago 231MB
centos latest 5d0da3dc9764 3 years ago 231MB
上传容器镜像至docker hub
[root@localhost ~]# docker push shenyang112/centos:v1
The push refers to repository [docker.io/shenyang112/centos]
74ddd0ec08fa: Pushed
v1: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529
可以看到v1镜像已经成功上传至 docker hub
仓库中。
6_下载容器镜像
在其它主机上下载(我创建的时候仓库其实设置的是public
所以都可以下载到)
docker pull shenyang112/centos:v1
控制台打印如下信息:
v1: Pulling from shenyang112/centos
a1d0c7532777: Pull complete
Digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
Status: Downloaded newer image for shenyang112/centos:v1
docker.io/shenyang112/centos:v1
查看下载后容器镜像,下载成功
[root@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
shenyang112/centos v1 5d0da3dc9764 3 years ago 231MB
2、harbor
Harbor 是一个开源的企业级 Docker 镜像仓库管理平台,它旨在提供高效、安全、易于使用的镜像管理功能,主要用于存储、管理和分发 Docker 镜像。
Harbor 提供了很多增强功能,使其适用于企业环境中的大规模容器化应用,我们主要了解如何使用 Harbor 搭建私有镜像仓库。
如果想要真正将 Harbor 应用到企业开发中的话,最低配置不要低于:cpu 2 mem 4g disk 160G
的标准。
1_获取 docker compose二进制文件
下载 docker-compose
二进制文件
wget https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64
注意 docker 20.10 以上版本自动集成 v2 的
docker compose
( 没有连词符-
)
查看已下载二进制文件
[root@localhost ~]# ls
docker-compose-Linux-x86_64
查看当前环境变量,这几个目录选择哪个都可以
[root@localhost ~]# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
移动二进制文件到/usr/bin
目录,并更名为docker-compose
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
为二进制文件添加可执行权限
chmod +x /usr/bin/docker-compose
安装完成后,查看docker-compse
版本,v2 版本使用docker compose version
(无连词符)
[root@localhost ~]# docker-compose version
docker-compose version 1.25.0, build 0a186604
docker-py version: 4.1.0
CPython version: 3.7.4
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
觉得版本比较老可以选择较新的稳定版,本机已经有
docker compose
的小伙伴可以选择跳过该步骤。
2_获取harbor安装文件
以/home
目录作为基础环境
cd /home
下载 harbor
离线安装包( 大约590MB,注意网络环境 )
wget https://github.com/goharbor/harbor/releases/download/v2.11.2/harbor-offline-installer-v2.11.2.tgz
查看已下载的离线安装包
[root@localhost home]# ls
harbor-offline-installer-v2.11.2.tgz
3_获取TLS文件
创建自签证书参考官网:https://goharbor.io/docs/2.11.0/install-config/configure-https/。
编辑如下系统文件
vim /etc/hosts
添加域名解析(添加本机IP):
192.168.150.145 hub.harbor.com # 这里的值与下面的证书的名称都需要保持一致
创建存放各种证书的文件夹
mkdir ssl
cd ssl
生成 CA 证书私有密钥
openssl genrsa -out ca.key 4096
生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=MyPersonal Root CA" \-key ca.key \-out ca.crt
生成 Harbor 服务器私钥
openssl genrsa -out hub.harbor.com.key 4096
生成 Harbor 服务器证书签名请求(CSR)
openssl req -sha512 -new \-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=hub.harbor.com" \-key hub.harbor.com.key \-out hub.harbor.com.csr
生成域名配置 v3 扩展文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names[alt_names]
DNS.1=hub.harbor.com
EOF
使用v3.ext
文件为 Harbor 主机生成证书。
openssl x509 -req -sha512 -days 3650 \-extfile v3.ext \-CA ca.crt -CAkey ca.key -CAcreateserial \-in hub.harbor.com.csr \-out hub.harbor.com.crt
crt
转换为cert
,以供 Docker 使用。
openssl x509 -inform PEM -in hub.harbor.com.crt -out hub.harbor.com.cert
完成后可以看到共计 8 个文件
[root@localhost ssl]# ls
ca.crt ca.key ca.srl hub.harbor.com.cert hub.harbor.com.crt hub.harbor.com.csr hub.harbor.com.key v3.ext
想要真实证书可以根据域名去阿里云进行申请,本地测试环境就不这么做了。
4_修改配置文件
回到/home
下
cd /home
解压harbor
离线安装包
tar xf harbor-offline-installer-v2.11.2.tgz
查看解压出来的目录
[root@localhost home]# ls
harbor
查看harbor
目录
[root@hub home]# ls harbor
common.sh harbor.v2.11.2.tar.gz harbor.yml.tmpl install.sh LICENSE prepare
创建配置文件
cd harbor/
mv harbor.yml.tmpl harbor.yml
修改配置文件内容
[root@localhost harbor]# vim harbor.yml# Configuration file of Harbor# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: hub.harbor.com 修改为域名,而且一定是证书签发的域名# http related config
http:# port for http, default is 80. If https enabled, this port will redirect to https portport: 80# https related config
https:# https port for harbor, default is 443port: 443# The path of cert and key files for nginxcertificate: /home/ssl/hub.harbor.com.crt 证书(绝对路径)private_key: /home/ssl/hub.harbor.com.key 密钥 绝对路径# enable strong ssl ciphers (default: false)# strong_ssl_ciphers: false.....# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: 123456 访问密码
.....
注意:配置文件中不要出现带有自定义的注释。
5_执行预备脚本
./prepare
输出
prepare base dir is set to /home/harbor
Generated configuration file: /config/portal/nginx.conf
Generated configuration file: /config/log/logrotate.conf
Generated configuration file: /config/log/rsyslog_docker.conf
Generated configuration file: /config/nginx/nginx.conf
Generated configuration file: /config/core/env
Generated configuration file: /config/core/app.conf
Generated configuration file: /config/registry/config.yml
Generated configuration file: /config/registryctl/env
Generated configuration file: /config/registryctl/config.yml
Generated configuration file: /config/db/env
Generated configuration file: /config/jobservice/env
Generated configuration file: /config/jobservice/config.yml
Generated and saved secret to file: /data/secret/keys/secretkey
Successfully called func: create_root_cert
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir
6_执行安装脚本
./install.sh
输出
[Step 0]: checking if docker is installed ...Note: docker version: 27.3.1[Step 1]: checking docker-compose is installed ...Note: Docker Compose version v2.29.7[Step 2]: loading Harbor images ...[Step 3]: preparing environment ...[Step 4]: preparing harbor configs ...
prepare base dir is set to /home/harbor[Step 5]: starting Harbor ...
WARN[0000] /home/harbor/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 10/10✔ Network harbor_harbor Created 0.5s ✔ Container harbor-log Started 0.7s ✔ Container registry Started 3.1s ✔ Container harbor-db Started 3.2s ✔ Container redis Started 3.0s ✔ Container harbor-portal Started 3.1s ✔ Container registryctl Started 3.7s ✔ Container harbor-core Started 4.0s ✔ Container harbor-jobservice Started 4.7s ✔ Container nginx Started 4.7s
✔ ----Harbor has been installed and started successfully.----
这里运行了9个服务,如果有一个出现了问题,就会导致整体不可用,需要检查启动数量是否足够。
7_验证运行情况
[root@localhost harbor]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
674230487f7b goharbor/nginx-photon:v2.11.2 "nginx -g 'daemon of…" 5 minutes ago Up 5 minutes (healthy) 0.0.0.0:80->8080/tcp, [::]:80->8080/tcp, 0.0.0.0:443->8443/tcp, [::]:443->8443/tcp nginx
eb1ca760d0d7 goharbor/harbor-jobservice:v2.11.2 "/harbor/entrypoint.…" 5 minutes ago Up 5 minutes (healthy) harbor-jobservice
e14e3c327b39 goharbor/harbor-core:v2.11.2 "/harbor/entrypoint.…" 5 minutes ago Up 5 minutes (healthy) harbor-core
eba3e5fb662c goharbor/redis-photon:v2.11.2 "redis-server /etc/r…" 5 minutes ago Up 5 minutes (healthy) redis
3403899c9bb8 goharbor/registry-photon:v2.11.2 "/home/harbor/entryp…" 5 minutes ago Up 5 minutes (healthy) registry
f144bcd948ce goharbor/harbor-db:v2.11.2 "/docker-entrypoint.…" 5 minutes ago Up 5 minutes (healthy) harbor-db
5df0ee35e953 goharbor/harbor-portal:v2.11.2 "nginx -g 'daemon of…" 5 minutes ago Up 5 minutes (healthy) harbor-portal
6e5c3c09473e goharbor/harbor-registryctl:v2.11.2 "/home/harbor/start.…" 5 minutes ago Up 5 minutes (healthy) registryctl
23a05a72e27f goharbor/harbor-log:v2.11.2 "/bin/sh -c /usr/loc…" 5 minutes ago Up 5 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log
8_访问harborUI界面
在物理机通过浏览器访问
在DockerHost主机通过域名访问
将证书添加到系统的 CA 证书存储库 来信任证书(CentOS):
sudo cp /home/ssl/ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
我们这里是使用OS级别信任证书来访问hub.harbor.com
这里是通过Linux本机的浏览器进行访问的,如果需要使用windows测试请编辑本机的hosts
文件,并将ca.crt
证书导入到本地受信根证书下(将证书下载本地后,双击安装即可)。
9_harbor重启时存在的问题
如果你的机器或docker
重启了,你会发现原来如果有9个服务最终只启动了5个,即使将剩余的服务启动后依然无法正常访问。
如果出现这一问题,使用如下命令重启 Harbor 服务进行解决:
cd /home/harbor # 这就是服务单独存放一个固定目录的好处
docker compose down # 关闭 harbor 容器
docker compose up -d # 启动
docker ps # 查看启动的harbor服务是不是9个
注意: v1 版本的 docker compose
不要忘记添加连词符-
。
3、docker镜像上传至Harbor及镜像下载
在一台新的机器上尝试以下操作,原来配置 Harbor 的主机仅当做管理容器镜像的私有仓库。
1_修改docker daemon使用harbor
首先添加域名映射
vim /etc/hosts
192.168.150.145 hub.harbor.com
编辑etc/docker/daemon.json
文件,如果不存在,需要手动添加
vim /etc/docker/daemon.json
添加如下内容,这段配置的意思是这是个非安全的仓库(跳过了HTTPS验证)
{"insecure-registries": ["hub.harbor.com"]
}
重启加载daemon
配置
systemctl daemon-reload
重启 docker
systemctl restart docker
如果可以再将机器的时钟也顺便同步了,以防证书由于时间问题不生效。
2_docker tag
查看已有容器镜像文件
[root@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 31f08b90668e 20 months ago 117MB
为已存在镜像重新添加tag
docker tag redis:latest hub.harbor.com/library/redis:v1
再次查看本地容器镜像
[root@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 31f08b90668e 20 months ago 117MB
hub.harbor.com/library/redis v1 31f08b90668e 20 months ago 117MB
3_docker push
登录到私有仓库
[root@centos ~]# docker login hub.harbor.com
Username: admin 用户名 admin
Password: 密码 12345
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 登陆成功
推送本地容器镜像到harbor
仓库
docker push hub.harbor.com/library/redis:v1
4_docker pull
在其它主机上下载使用harbor
容器镜像仓库中的容器镜像
在本地域名解析文件中vim /etc/hosts
添加如下内容
192.168.150.145 hub.harbor.com
在/etc/docker/daemon.json
文件中添加本地主机访问的容器镜像仓库
{"insecure-registries": ["hub.harbor.com"]
}
更新配置
systemctl daemon-reload
systemctl restart docker
下载容器镜像
[root@centos ~]# docker pull hub.harbor.com/library/redis:v1
v1: Pulling from library/redis
Digest: sha256:94a25c195c764f7962087eda247471989797001c222f079d5d4dbb1c34cc4854
Status: Downloaded newer image for hub.harbor.com/library/redis:v1
hub.harbor.com/library/redis:v1
查看已下载的容器镜像
[root@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.harbor.com/library/redis v1 31f08b90668e 20 months ago 117MB
5_向 Harbor 和 Docker 提供证书
之前配置的docker
都是使用 insecure-registries
跳过证书验证来访问 Harbor 的,也就是说避免了配置docker
的信任证书。
那么docker
配置HTTPS验证该怎样操作呢? 所需证书在获取TLS文件这一小节都已经提前准备好了。
将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹和certficates
文件夹中。
cd /home/ssl # cd 到我们存放证书的目录下
# 向 docker 提供证书, 目录不存在一定要先创建
mkdir -p /etc/docker/certs.d/hub.harbor.com/ # 文件夹的名字一定要对
cp hub.harbor.com.cert /etc/docker/certs.d/hub.harbor.com/
cp hub.harbor.com.key /etc/docker/certs.d/hub.harbor.com/
cp ca.crt /etc/docker/certs.d/hub.harbor.com/
# 向 Harbor 提供证书, 目录不存在一定要先创建
mkdir -p /data/cert/ # 文件夹的名字一定要对
cp hub.harbor.com.crt /data/cert/
cp hub.harbor.com.key /data/cert/
# 无论是向docker还是Harbor提供完证书都需要重启
systemctl restart docker # 重启后如果harbor不能提供正常服务,详见2_9小节
官网提供的示例证书的配置:
/etc/docker/certs.d/└── yourdomain.com:port # 如果将默认端口 443 映射到其他端口,创建此文件夹添加端口├── yourdomain.com.cert <-- Server certificate signed by CA├── yourdomain.com.key <-- Server key signed by CA└── ca.crt <-- Certificate authority that signed the registry certificat
因为我们的 Harbor 主机本身就没有配置/etc/docker/daemon.json insecure-registry
,所以我们在此服务器上直接尝试推送或拉取镜像即可,如果进行了相关配置,可以删掉再进行测试。
如果其他主机的 docker 容器想要访问 Harbor,将相关证书下载并拷贝到对应的目录下就可以使用了,只用向 docker 提供证书。
千万别忘记创建对应的目录、重启docker容器以及配置域名解析,另外多台机器之间的时钟一定要同步。
4、阿里云容器镜像仓库
在阿里云中搜索容器镜像服务,进行个人身份认证。根据需要选择个人版或企业版开通服务。个人版可免费使用,但功能可能受限。(我以个人版为例进行讲解)
1_创建命名空间
在容器镜像服务控制台中,选择“命名空间”进行创建,命名空间用于组织和管理多个镜像仓库。
输入命名空间名称时注意遵循命名规范,如使用公司名称或项目名称作为命名空间。
2_创建镜像仓库
在命名空间下,选择“创建镜像仓库”(也可以不创建,上传时自动创建)
输入仓库名称,选择仓库类型(如公开或私有),并设置其他相关属性(如仓库描述、是否启用自动构建等)。
3_本地登录
在本地 Docker环境中,使用docker login
命令登录阿里云 Docker Registry 。
docker login --username=aliyunaccount registry.cn-your-region.aliyuncs.com
其中,--username
后跟你的阿里云账号全名(或邮箱),registry.cn-your-region.aliyuncs.com
替换为你的阿里云区域对应的镜像仓库地址。
也可以选择在阿里云控制台的访问凭证中直接复制
执行后输入创建时设置的登录密码即可成功。
4_使用容器镜像仓库
和我们之前使用的方式一样,都是 打tag
、推送、拉取。
1 标记本地镜像:
docker tag [ImageId] registry.cn-your-region.aliyuncs.com/namespace/repository-name:[ImageVersion]
2 推送镜像:
docker push registry.cn-your-region.aliyuncs.com/namespace/repository-name:[ImageVersion]
测试推送redis:v1
成功:
3 从阿里云私有镜像仓库拉取镜像
docker pull registry.cn-your-region.aliyuncs.com/namespace/repository-name:[ImageVersion]
标志 | 说明 |
---|---|
ImageId | 镜像ID,使用 镜像名称:tag 也可以 |
namespace | 创建的命名空间名字 |
repository-name | 仓库名称,阿里云中没有创建,会自动创建 |
ImageVersion | 镜像版本号,也就是我们自己打的tag |
如果想要看到使用的详细操作指导,点击仓库就可以了
5、总结
在量小时云服务免费、方便,比较适合我们个人使用;作为企业来说还是搭建 harbor 这种企业私有镜像仓库统一管理、分发再合适不过了;而 docker hub 访问慢,在没有使用科学上网的方式下还是挺愁的。
相关文章:
容器镜像仓库
文章目录 1、docker hub1_注册2_登录3_创建容器镜像仓库4_在本地登录Docker Hub5_上传容器镜像6_下载容器镜像 2、harbor1_获取 docker compose二进制文件2_获取harbor安装文件3_获取TLS文件4_修改配置文件5_执行预备脚本6_执行安装脚本7_验证运行情况8_访问harborUI界面9_harb…...
qtcanpool 知 08:Docking
文章目录 前言口味改造后语 前言 很久以前,作者用 Qt 仿照前端 UI 设计了一个 ministack(https://gitee.com/icanpool/qtcanpool/blob/release-1.x/src/libs/qcanpool/ministack.h) 控件,这个控件可以折叠。部分用户体验后&#…...
车载VR可视化解决方案
车载VR可视化解决方案是通过融合跟踪用户头部运动的特殊预测算法与惯性测量数据而开发的。该系统将大范围虚拟现实跟踪技术与IMU传感器相结合,为VR和AR应用打造了一套全面的运动跟踪与渲染流程,极大地方便了虚拟现实头显制造商定制可视化流程。 该车载VR…...
hhdb数据库介绍(10-43)
安全 密码安全管理 密码安全管理为用户提供了对计算节点数据库用户与存储节点的连接用户、备份用户的密码有效期监控提醒。到期后自动提示用户修改密码以提升系统的安全性。 数据库用户密码 (一)密码修改 用户可以在“安全->密码安全管理->数据…...
【优选算法 二分查找】二分查找入门详解:二分查找 & 在排序数组中查找元素的第一个和最后一个位置
二分查找 题目描述 题目解析 暴力解法 我们可以从左往右遍历一次数组,如果存在 target 则返回数组的下标,否则返回 -1; 时间复杂度 O(N),因为没有利用数组有序的特点,每次比较只能舍弃一个要比较的数&…...
Python导入moviepy找不到editor 视频没有声音设置audio_codec参数
moviepy合成视频出错: 问题一:导入moviepy.editor找不到editor,No module named moviepy.editor问题二:合成的视频没有声音 问题一:导入moviepy.editor找不到editor,No module named moviepy.editor from …...
FreeSWITCH auto-rtp-bugs 研究
还在探索中... 抓一个现场的包, Fs 收 rtp 包正常,但 发 rtp 包有问题,比如上次 ts 是 1 万 ,而这次是 1000,并且居然没有 marker。百思不得解。 vars.xml 增加一个全局变量的配置: <X-PRE-PROCESS …...
TypeScript 在 React 中的应用
文章目录 前言一、为什么要在 React 中使用 TypeScript?二、如何在React中使用 TypeScript三、高级类型结语 前言 随着前端开发的复杂度不断提升,开发者对于代码质量、可维护性和开发效率的要求也日益增高。TypeScript 作为一种为 JavaScript 添加静态类…...
汇编和C语言访问存储器
一、汇编语言访问存储器 1、读存储器 LDR R1, [R2] 2、写存储器 STR R1, [R2] 二、C语言访问存储器 1、读存储器 data *ADDR; 2、写存储器 *ADDR data;...
14.3、特洛伊木马分析与防护
目录 特洛伊木马概念与分类特洛伊木马运行机制特洛伊木马植入技术特洛伊木马隐藏技术特洛伊木马存活技术特洛伊木马防范技术Rootkit是什么? 特洛伊木马概念与分类 病毒不具备传播能力,但是蠕虫具备 特洛伊木马运行机制 木马攻击过程主要分为五个部分: ① 寻找攻…...
SpringBoot 分层解耦
从没有分层思想到传统 Web 分层,再到 Spring Boot 分层架构 1. 没有分层思想 在最初的项目开发中,很多开发者并没有明确的分层思想,所有逻辑都堆砌在一个类或一个方法中。这样的开发方式通常会导致以下问题: 代码混乱࿱…...
不一样的CSS(4)--icon图标系列之svg
序言 上一节内容我们讲解了如何利用css去画一个五角星,其中包括了使用svg的方法,有些小伙伴们对svg的使用不是很了解,那么本节内容我们主要来讲一下,关于svg标签的的使用。 目录 序言一、svg的介绍二、安装SVG扩展插件三、SVG基…...
Go-知识依赖管理2
Go-知识依赖管理2 1. go.sum1.1 go.sum 文件记录1.2 生成1.3 校验1.4 校验和数据库2. 模块代理2.1 GOPROXY 介绍2.2 代理协议2.2.1 获取模块列表2.2.2 获取模块元素数据2.2.3 获取 go.mod 文件2.2.4 获取代码压缩包2.2.5 获取模块的最新可用版本2.2.6 下载过程2.3 观察下载步骤…...
el-select的搜索功能
el-select的相关信息: 最基本信息 v-model的值为当前被选中的el-option的 value 属性值 :label是选择器可以看到的内容 过滤搜索 普通过滤搜索 <el-selectv-model"selectedCountry"placeholder"请选择国家"filterable:loading"lo…...
批量将不同的工作簿合并到同一个Excel文件
批量将不同的工作簿合并到同一个Excel文件 下面是一个示例,展示如何批量将不同的工作簿合并到同一个Excel文件,并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下: 步骤 1: 安装必要的库 首先确保你已安装 pan…...
git遇见冲突怎么解决?
问: 回答:...
Spring和SpringBoot的关系和区别?
大家好,我是锋哥。今天分享关于【Spring和SpringBoot的关系和区别?】面试题。希望对大家有帮助; Spring和SpringBoot的关系和区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring和Spring Boot是两种相关但有所…...
python学习——字符串的编码和解码
在Python中,字符串的编码和解码是处理文本数据时非常重要的概念。以下是对字符串编码和解码的详细解释: 字符串编码 字符串编码是将字符串转换成字节序列的过程。Python中的字符串是Unicode编码的,所以在将字符串转换成字节序列时ÿ…...
Web游戏开发指南:在 Phaser.js 中读取和管理游戏手柄输入
前言 Phaser.js 是一个广受欢迎的 HTML5 游戏框架,为开发者提供了创建跨平台 2D 游戏的强大工具。在现代游戏开发中,支持游戏手柄已成为提升玩家体验的重要方面。本文将详细介绍如何在 Phaser.js 中监听和处理游戏手柄的输入,帮助开发者为他…...
HTML5系列(13)-- 微数据与结构化数据指南
前端技术探索系列:HTML5 微数据与结构化数据指南 📊 致读者:探索数据语义化的世界 👋 前端开发者们, 今天我们将深入探讨 HTML5 微数据与结构化数据,学习如何让网页内容更易被搜索引擎理解和解析。 微数…...
MAA ADB问题
模拟器官方MUMU12 连接设置 | MaaAssistantArknights 参考文档,找谷歌platform ADB,放入MAA文件夹 选择谷歌ADB,选择MUMU12的ADB代码 MuMu 模拟器 12 127.0.0.1:16384 重新连接 ok...
基于VTX356语音识别合成芯片的智能语音交互闹钟方案
一、方案概述 本方案旨在利用VTX356语音识别合成芯片强大的语音处理能力,结合蓝牙功能、APP或小程序,打造一款功能全面且智能化程度高的闹钟产品。除了基本的时钟显示和闹钟提醒功能外,还拥有正计时、倒计时、日程安排、重要日提醒以及番茄钟…...
大语言模型应用开发框架LangChain
大语言模型应用开发框架LangChain 一、LangChain项目介绍1、简介2、LangChain的价值3、实战演练 二、LangChain提示词大语言模型应用1、简介1.1、提示词模板化的优点1.2、提示词模板LLM 的应用1.3、Prompt 2、应用实战2.1、PromptTemplate LLM2.2、PromptTemplate LLM Outpu…...
php7.4安装pg扩展-contos7
今天接到一个需求,就是需要用thinkphp6链接pg(postgresql)数据库。废话不多说,直接上操作步骤 一、安装依赖 yum install -y sqlite-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-dev…...
【开源】A064—基于JAVA的民族婚纱预定系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...
网络安全防护指南:筑牢网络安全防线(5/10)
一、网络安全的基本概念 (一)网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代,网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…...
集合框架(2)List
Collection的子接口:List、Set 1、List接口 鉴于Java中数组用来存储数据的局限性,我们通常使用java.util.List替代数组List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。JDK API中List接口的实现类常用的有ÿ…...
12.5作业
1.完成指针的练习 1.已知数组a[10]和b[10]中元素的值递增有序,用指针实现将两个数组中的元素按递增的顺序输出。 ex: int arr[5]{1,3,5,7,9}; int arr1[5]{2,4,6,8,10}; 程序结束后输出1,2,3,4,5,6&am…...
61 基于单片机的小车雷达避障及阈值可调
所有仿真详情导航: PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机,采用超声波传感器检测距离,通过LCD1602显示屏显示,三个按键,第一个按键是…...
116. UE5 GAS RPG 实现击杀掉落战利品功能
这一篇,我们实现敌人被击败后,掉落战利品的功能。首先,我们将创建一个新的结构体,用于定义掉落体的内容,方便我们设置掉落物。然后,我们实现敌人死亡时的掉落函数,并在蓝图里实现对应的逻辑&…...
原子类相关
原子引用 JUC 并发包提供了: AtomicReferenceAtomicMarkableReferenceAtomicStampedReference AtomicReference 使用举例 public interface DecimalAccount {// 获取余额BigDecimal getBalance();// 取款void withdraw(BigDecimal amount);/*** 方法内会启动 10…...
DeCoOp: Robust Prompt Tuning with Out-of-Distribution Detection
文章汇总 me:看得很迷糊 新型检测器 M D \mathcal M_D MD的训练是为了对一个子基类去划分子基类中的base和new。 在获得每个子基类之后,为每个检测器训练子分类器 M C \mathcal M_C MC 在推理时,如果最高得分的检测器 M D i ( x ) \ma…...
Tinker热修复框架详解:Android应用补丁生成,提升应用稳定性
Tinker 是腾讯开源的Android热修复框架,通过动态更新和修复应用中的代码、资源和本地库文件,无需用户重新安装 APK,便可以及时修复应用中的 bug,优化用户体验。 下面是Tinker在Android项目中的详细用法,结合Kotlin 代…...
手写—— netty 实现 rabbitMq客户端
要使用 Netty 实现一个 RabbitMQ 客户端,你可以将 RabbitMQ 协议封装在 Netty 中,通过自定义编码和解码来实现与 RabbitMQ 的通信。RabbitMQ 使用 AMQP (Advanced Message Queuing Protocol) 协议,因此我们需要创建合适的协议封装和处理逻辑。…...
调用高德地图天气查询api
之前使用的api一直用不了,才发现web端类型的没有天气查询功能 web服务才有 然后在linux的环境变量中配置一下 发现linux中配的环境变量不行,于是给输入amap_weather给的字典明文token。 # 选用RolePlay 配置agent from modelscope_agent.agents.role_p…...
【Vulkan入门】03-创建Device
目录 先叨叨git信息关键代码VulkanEnv::CreateDevice() 编译并运行程序题外话 先叨叨 在上篇已经选择了一个合适的PhysicalDevice。 本篇要为这个PhysicalDevice创将一个Device。Device可以理解为APP与PhysicalDevice之间的代理。 所有APP与PhysicalDevice之间交互的资源都通过…...
【Axios】如何在Vue中使用Axios请求拦截器
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
query did not return a unique result: 2;
文章目录 错误原因分析关键位置可能原因解决方法1. 检查数据库数据2. 修改查询方法3. 限定查询返回唯一结果4. 检查业务逻辑 总结 1、LoginLogRepository2、LoginLogService3、LoginLogApiService4、MyAuthenticationSuccessHandler 微信小程序开发者工具控制台报错 {"tim…...
PHP升级
PHP升级CentOs8 wget http://rpms.famillecollet.com/enterprise/remi-release-8.rpm rpm -ivh remi-release-8.rpm --nodeps --force rpm -qa | grep remi dnf module list php dnf module enable php:remi-7.4首先,重置当前的 PHP 模块,以便清理所有已…...
C++设计模式(原型、代理、适配器、组合)
一、原型模式 1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式允许通过复制现有的对象来创建新对象,而不是通过实例化类来创建。这种方式可以避免创建重复的对象,从而提高性能和降低内存消耗。 2.组成 …...
超详细搭建PhpStorm+PhpStudy开发环境
刚开始接触PHP开发,搭建开发环境是第一步,网上下载PhpStorm和PhpStudy软件,怎样安装和激活就不详细说了,我们重点来看一看怎样搭配这两个开发环境。 前提:现在假设你已经安装完PhpStorm和PhpStudy软件。 我的PhpStor…...
Axure RP在智慧农场可视化大屏系统设计中的应用
随着科技的飞速发展,智慧农业已成为现代农业的重要发展方向。智慧农场可视化大屏系统作为智慧农业的重要组成部分,正逐步成为农场管理、决策和展示的核心工具。Axure RP,作为一款强大的原型设计工具,其在智慧农场可视化大屏系统的…...
《嵌入式硬件设计》
一、引言 嵌入式系统在现代科技中占据着至关重要的地位,广泛应用于消费电子、工业控制、汽车电子、医疗设备等众多领域。嵌入式硬件设计作为嵌入式系统开发的基础,直接决定了系统的性能、可靠性和成本。本文将深入探讨嵌入式硬件设计的各个方面ÿ…...
【C语言篇】C 语言总复习(上):点亮编程思维,穿越代码的浩瀚星河
我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 在计算机科学的广袤宇宙中,C语言犹如一颗璀璨的恒星,散发着持久而耀眼的光芒。它作为一种基础且强大的编程语言,承载…...
多线程——04
本节目标 1. wait 和 notify 方法 2. 代码案例 1. wait 和 notify 方法 1. 方法使用 多个线程的执行顺序本身是随机的(抢占式执行) wait —— 让指定线程进入阻塞状态 notify —— 唤醒对应的阻塞状态的线程 注意: wait, notify, notifyAl…...
使用ECS和OSS搭建个人网盘
在linux服务器 一、下载cloudreve安装包。 执行如下命令,下载cloudreve安装包。 wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/cloudreve_3.3.1_linux_amd64.tar.gz 下载完毕后,执行如下命令,解压cloudreve安装包。 tar -zxvf c…...
Android 单元测试断言校验方法 org.junit.Assert
判断布尔值 assertTrue assertFalse 判断对象非空 assertNull(object); 案例: PersistableBundle result Util.getCarrierConfig(mockContext, subId);assertNull(result); 判断是否相等 assertEquals("mocked_string", result.toString()); package or…...
SpringSecurity学习
介绍 SpringSecurity是一个作用于身份认证和权限控制的框架,其针对的主要就是网站的安全问题 页面代码 要使用SpringSecurity的前提是有一个可以正常访问业务逻辑的代码,再使用SpringSecurity实现权限控制和身份验证。 后端代码 package com.learn.…...
Eureka和Zookeeper、Nacos的区别
目录 一、Eureka与Zookeeper的区别 适用场景: 架构设计: 功能特性: 社区生态: 二、Eureka与Nacos的区别 接口方式: 实例类型: 健康检测: 服务发现: 一致性与可用性&#…...
基于gitlab API刷新MR的commit的指定status
场景介绍 自己部署的gitlab Jenkins,并已经设置好联动(如何设置可以在网上很容易搜到)每个MergeRequest都可以触发多个Jenkins pipeline,pipeline结束后会将状态更新到gitlab这个MR上希望可以跳过pipeline运行,直接将指定的MR的指定pipeline状态刷新为…...