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

容器镜像仓库

文章目录

  • 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

文章目录 前言口味改造后语 前言 很久以前&#xff0c;作者用 Qt 仿照前端 UI 设计了一个 ministack&#xff08;https://gitee.com/icanpool/qtcanpool/blob/release-1.x/src/libs/qcanpool/ministack.h&#xff09; 控件&#xff0c;这个控件可以折叠。部分用户体验后&#…...

车载VR可视化解决方案

车载VR可视化解决方案是通过融合跟踪用户头部运动的特殊预测算法与惯性测量数据而开发的。该系统将大范围虚拟现实跟踪技术与IMU传感器相结合&#xff0c;为VR和AR应用打造了一套全面的运动跟踪与渲染流程&#xff0c;极大地方便了虚拟现实头显制造商定制可视化流程。 该车载VR…...

hhdb数据库介绍(10-43)

安全 密码安全管理 密码安全管理为用户提供了对计算节点数据库用户与存储节点的连接用户、备份用户的密码有效期监控提醒。到期后自动提示用户修改密码以提升系统的安全性。 数据库用户密码 &#xff08;一&#xff09;密码修改 用户可以在“安全->密码安全管理->数据…...

【优选算法 二分查找】二分查找入门详解:二分查找 & 在排序数组中查找元素的第一个和最后一个位置

二分查找 题目描述 题目解析 暴力解法 我们可以从左往右遍历一次数组&#xff0c;如果存在 target 则返回数组的下标&#xff0c;否则返回 -1&#xff1b; 时间复杂度 O(N)&#xff0c;因为没有利用数组有序的特点&#xff0c;每次比较只能舍弃一个要比较的数&…...

Python导入moviepy找不到editor 视频没有声音设置audio_codec参数

moviepy合成视频出错&#xff1a; 问题一&#xff1a;导入moviepy.editor找不到editor&#xff0c;No module named moviepy.editor问题二&#xff1a;合成的视频没有声音 问题一&#xff1a;导入moviepy.editor找不到editor&#xff0c;No module named moviepy.editor from …...

FreeSWITCH auto-rtp-bugs 研究

还在探索中... 抓一个现场的包&#xff0c; Fs 收 rtp 包正常&#xff0c;但 发 rtp 包有问题&#xff0c;比如上次 ts 是 1 万 &#xff0c;而这次是 1000&#xff0c;并且居然没有 marker。百思不得解。 vars.xml 增加一个全局变量的配置&#xff1a; <X-PRE-PROCESS …...

TypeScript 在 React 中的应用

文章目录 前言一、为什么要在 React 中使用 TypeScript&#xff1f;二、如何在React中使用 TypeScript三、高级类型结语 前言 随着前端开发的复杂度不断提升&#xff0c;开发者对于代码质量、可维护性和开发效率的要求也日益增高。TypeScript 作为一种为 JavaScript 添加静态类…...

汇编和C语言访问存储器

一、汇编语言访问存储器 1、读存储器 LDR R1, [R2] 2、写存储器 STR R1, [R2] 二、C语言访问存储器 1、读存储器 data *ADDR; 2、写存储器 *ADDR data;...

14.3、特洛伊木马分析与防护

目录 特洛伊木马概念与分类特洛伊木马运行机制特洛伊木马植入技术特洛伊木马隐藏技术特洛伊木马存活技术特洛伊木马防范技术Rootkit是什么? 特洛伊木马概念与分类 病毒不具备传播能力&#xff0c;但是蠕虫具备 特洛伊木马运行机制 木马攻击过程主要分为五个部分: ① 寻找攻…...

SpringBoot 分层解耦

从没有分层思想到传统 Web 分层&#xff0c;再到 Spring Boot 分层架构 1. 没有分层思想 在最初的项目开发中&#xff0c;很多开发者并没有明确的分层思想&#xff0c;所有逻辑都堆砌在一个类或一个方法中。这样的开发方式通常会导致以下问题&#xff1a; 代码混乱&#xff1…...

不一样的CSS(4)--icon图标系列之svg

序言 上一节内容我们讲解了如何利用css去画一个五角星&#xff0c;其中包括了使用svg的方法&#xff0c;有些小伙伴们对svg的使用不是很了解&#xff0c;那么本节内容我们主要来讲一下&#xff0c;关于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的相关信息&#xff1a; 最基本信息 v-model的值为当前被选中的el-option的 value 属性值 :label是选择器可以看到的内容 过滤搜索 普通过滤搜索 <el-selectv-model"selectedCountry"placeholder"请选择国家"filterable:loading"lo…...

批量将不同的工作簿合并到同一个Excel文件

批量将不同的工作簿合并到同一个Excel文件 下面是一个示例&#xff0c;展示如何批量将不同的工作簿合并到同一个Excel文件&#xff0c;并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下&#xff1a; 步骤 1: 安装必要的库 首先确保你已安装 pan…...

git遇见冲突怎么解决?

问&#xff1a; 回答&#xff1a;...

Spring和SpringBoot的关系和区别?

大家好&#xff0c;我是锋哥。今天分享关于【Spring和SpringBoot的关系和区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring和SpringBoot的关系和区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring和Spring Boot是两种相关但有所…...

python学习——字符串的编码和解码

在Python中&#xff0c;字符串的编码和解码是处理文本数据时非常重要的概念。以下是对字符串编码和解码的详细解释&#xff1a; 字符串编码 字符串编码是将字符串转换成字节序列的过程。Python中的字符串是Unicode编码的&#xff0c;所以在将字符串转换成字节序列时&#xff…...

Web游戏开发指南:在 Phaser.js 中读取和管理游戏手柄输入

前言 Phaser.js 是一个广受欢迎的 HTML5 游戏框架&#xff0c;为开发者提供了创建跨平台 2D 游戏的强大工具。在现代游戏开发中&#xff0c;支持游戏手柄已成为提升玩家体验的重要方面。本文将详细介绍如何在 Phaser.js 中监听和处理游戏手柄的输入&#xff0c;帮助开发者为他…...

HTML5系列(13)-- 微数据与结构化数据指南

前端技术探索系列&#xff1a;HTML5 微数据与结构化数据指南 &#x1f4ca; 致读者&#xff1a;探索数据语义化的世界 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 HTML5 微数据与结构化数据&#xff0c;学习如何让网页内容更易被搜索引擎理解和解析。 微数…...

MAA ADB问题

模拟器官方MUMU12 连接设置 | MaaAssistantArknights 参考文档&#xff0c;找谷歌platform ADB&#xff0c;放入MAA文件夹 选择谷歌ADB&#xff0c;选择MUMU12的ADB代码 MuMu 模拟器 12 127.0.0.1:16384 重新连接 ok...

基于VTX356语音识别合成芯片的智能语音交互闹钟方案

一、方案概述 本方案旨在利用VTX356语音识别合成芯片强大的语音处理能力&#xff0c;结合蓝牙功能、APP或小程序&#xff0c;打造一款功能全面且智能化程度高的闹钟产品。除了基本的时钟显示和闹钟提醒功能外&#xff0c;还拥有正计时、倒计时、日程安排、重要日提醒以及番茄钟…...

大语言模型应用开发框架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

今天接到一个需求&#xff0c;就是需要用thinkphp6链接pg(postgresql)数据库。废话不多说&#xff0c;直接上操作步骤 一、安装依赖 yum install -y sqlite-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-dev…...

【开源】A064—基于JAVA的民族婚纱预定系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

网络安全防护指南:筑牢网络安全防线(5/10)

一、网络安全的基本概念 &#xff08;一&#xff09;网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…...

集合框架(2)List

Collection的子接口&#xff1a;List、Set 1、List接口 鉴于Java中数组用来存储数据的局限性&#xff0c;我们通常使用java.util.List替代数组List集合类中元素有序、且可重复&#xff0c;集合中的每个元素都有其对应的顺序索引。JDK API中List接口的实现类常用的有&#xff…...

12.5作业

1.完成指针的练习 1.已知数组a[10]和b[10]中元素的值递增有序&#xff0c;用指针实现将两个数组中的元素按递增的顺序输出。 ex: int arr[5]{1,3,5,7,9}; int arr1[5]{2,4,6,8,10}; 程序结束后输出1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&am…...

61 基于单片机的小车雷达避障及阈值可调

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机&#xff0c;采用超声波传感器检测距离&#xff0c;通过LCD1602显示屏显示&#xff0c;三个按键&#xff0c;第一个按键是…...

116. UE5 GAS RPG 实现击杀掉落战利品功能

这一篇&#xff0c;我们实现敌人被击败后&#xff0c;掉落战利品的功能。首先&#xff0c;我们将创建一个新的结构体&#xff0c;用于定义掉落体的内容&#xff0c;方便我们设置掉落物。然后&#xff0c;我们实现敌人死亡时的掉落函数&#xff0c;并在蓝图里实现对应的逻辑&…...

原子类相关

原子引用 JUC 并发包提供了&#xff1a; AtomicReferenceAtomicMarkableReferenceAtomicStampedReference AtomicReference 使用举例 public interface DecimalAccount {// 获取余额BigDecimal getBalance();// 取款void withdraw(BigDecimal amount);/*** 方法内会启动 10…...

DeCoOp: Robust Prompt Tuning with Out-of-Distribution Detection

文章汇总 me&#xff1a;看得很迷糊 新型检测器 M D \mathcal M_D MD​的训练是为了对一个子基类去划分子基类中的base和new。 在获得每个子基类之后&#xff0c;为每个检测器训练子分类器 M C \mathcal M_C MC​ 在推理时&#xff0c;如果最高得分的检测器 M D i ( x ) \ma…...

Tinker热修复框架详解:Android应用补丁生成,提升应用稳定性

Tinker 是腾讯开源的Android热修复框架&#xff0c;通过动态更新和修复应用中的代码、资源和本地库文件&#xff0c;无需用户重新安装 APK&#xff0c;便可以及时修复应用中的 bug&#xff0c;优化用户体验。 下面是Tinker在Android项目中的详细用法&#xff0c;结合Kotlin 代…...

手写—— netty 实现 rabbitMq客户端

要使用 Netty 实现一个 RabbitMQ 客户端&#xff0c;你可以将 RabbitMQ 协议封装在 Netty 中&#xff0c;通过自定义编码和解码来实现与 RabbitMQ 的通信。RabbitMQ 使用 AMQP (Advanced Message Queuing Protocol) 协议&#xff0c;因此我们需要创建合适的协议封装和处理逻辑。…...

调用高德地图天气查询api

之前使用的api一直用不了&#xff0c;才发现web端类型的没有天气查询功能 web服务才有 然后在linux的环境变量中配置一下 发现linux中配的环境变量不行&#xff0c;于是给输入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请求拦截器

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

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首先&#xff0c;重置当前的 PHP 模块&#xff0c;以便清理所有已…...

C++设计模式(原型、代理、适配器、组合)

一、原型模式 1.定义 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。 原型模式允许通过复制现有的对象来创建新对象&#xff0c;而不是通过实例化类来创建。这种方式可以避免创建重复的对象&#xff0c;从而提高性能和降低内存消耗。 2.组成 …...

超详细搭建PhpStorm+PhpStudy开发环境

刚开始接触PHP开发&#xff0c;搭建开发环境是第一步&#xff0c;网上下载PhpStorm和PhpStudy软件&#xff0c;怎样安装和激活就不详细说了&#xff0c;我们重点来看一看怎样搭配这两个开发环境。 前提&#xff1a;现在假设你已经安装完PhpStorm和PhpStudy软件。 我的PhpStor…...

Axure RP在智慧农场可视化大屏系统设计中的应用

随着科技的飞速发展&#xff0c;智慧农业已成为现代农业的重要发展方向。智慧农场可视化大屏系统作为智慧农业的重要组成部分&#xff0c;正逐步成为农场管理、决策和展示的核心工具。Axure RP&#xff0c;作为一款强大的原型设计工具&#xff0c;其在智慧农场可视化大屏系统的…...

《嵌入式硬件设计》

一、引言 嵌入式系统在现代科技中占据着至关重要的地位&#xff0c;广泛应用于消费电子、工业控制、汽车电子、医疗设备等众多领域。嵌入式硬件设计作为嵌入式系统开发的基础&#xff0c;直接决定了系统的性能、可靠性和成本。本文将深入探讨嵌入式硬件设计的各个方面&#xff…...

【C语言篇】C 语言总复习(上):点亮编程思维,穿越代码的浩瀚星河

我的个人主页 我的专栏&#xff1a;C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 在计算机科学的广袤宇宙中&#xff0c;C语言犹如一颗璀璨的恒星&#xff0c;散发着持久而耀眼的光芒。它作为一种基础且强大的编程语言&#xff0c;承载…...

多线程——04

本节目标 1. wait 和 notify 方法 2. 代码案例 1. wait 和 notify 方法 1. 方法使用 多个线程的执行顺序本身是随机的&#xff08;抢占式执行&#xff09; wait —— 让指定线程进入阻塞状态 notify —— 唤醒对应的阻塞状态的线程 注意&#xff1a; wait, notify, notifyAl…...

使用ECS和OSS搭建个人网盘

在linux服务器 一、下载cloudreve安装包。 执行如下命令&#xff0c;下载cloudreve安装包。 wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/cloudreve_3.3.1_linux_amd64.tar.gz 下载完毕后&#xff0c;执行如下命令&#xff0c;解压cloudreve安装包。 tar -zxvf c…...

Android 单元测试断言校验方法 org.junit.Assert

判断布尔值 assertTrue assertFalse 判断对象非空 assertNull(object); 案例&#xff1a; PersistableBundle result Util.getCarrierConfig(mockContext, subId);assertNull(result); 判断是否相等 assertEquals("mocked_string", result.toString()); package or…...

SpringSecurity学习

介绍 SpringSecurity是一个作用于身份认证和权限控制的框架&#xff0c;其针对的主要就是网站的安全问题 页面代码 要使用SpringSecurity的前提是有一个可以正常访问业务逻辑的代码&#xff0c;再使用SpringSecurity实现权限控制和身份验证。 后端代码 package com.learn.…...

Eureka和Zookeeper、Nacos的区别

目录 一、Eureka与Zookeeper的区别 适用场景&#xff1a; 架构设计&#xff1a; 功能特性&#xff1a; 社区生态&#xff1a; 二、Eureka与Nacos的区别 接口方式&#xff1a; 实例类型&#xff1a; 健康检测&#xff1a; 服务发现&#xff1a; 一致性与可用性&#…...

基于gitlab API刷新MR的commit的指定status

场景介绍 自己部署的gitlab Jenkins,并已经设置好联动(如何设置可以在网上很容易搜到)每个MergeRequest都可以触发多个Jenkins pipeline&#xff0c;pipeline结束后会将状态更新到gitlab这个MR上希望可以跳过pipeline运行&#xff0c;直接将指定的MR的指定pipeline状态刷新为…...