容器镜像仓库

文章目录

  • 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 访问慢,在没有使用科学上网的方式下还是挺愁的。


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

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

相关文章

网站打开速度测试工具:互联网优化的得力助手

在信息飞速流转的互联网时代&#xff0c;网站如同企业与用户对话的窗口&#xff0c;其打开速度直接关乎用户体验&#xff0c;乃至业务的成败。所幸&#xff0c;一系列专业的网站打开速度测试工具应运而生&#xff0c;它们宛如幕后的技术侦探&#xff0c;精准剖析网站性能&#…

liunx docker 部署 nacos seata sentinel

部署nacos 1.按要求创建好数据库 2.创建docker 容器 docker run -d --name nacos-server -p 8848:8848 -e MODEstandalone -e SPRING_DATASOURCE_PLATFORMmysql -e MYSQL_SERVICE_HOST172.17.251.166 -e MYSQL_SERVICE_DB_NAMEry-config -e MYSQL_SERVICE_PORT3306 -e MYSQL…

PHP 与 MySQL 搭配的优势

一、PHP 与 MySQL 搭配的优势 强大的动态网页开发能力 PHP 是一种服务器端脚本语言&#xff0c;能够生成动态网页内容。它可以根据用户的请求、数据库中的数据等因素&#xff0c;实时地生成 HTML 页面返回给客户端浏览器。而 MySQL 是一个流行的关系型数据库管理系统&#xf…

爬虫项目基础知识详解

文章目录 Python爬虫项目基础知识一、爬虫与数据分析1.1 Python中的requests库Requests 库的安装Requests 库的 get() 方法爬取网页的通用代码框架HTTP 协议及 Requests 库方法Requests 库主要方法解析 1.2 python中的json库1.3 xpath学习之python中lxml库html了解html结构html…

结构型-组合模式(Composite Pattern)

什么是组合模式 又名部分整体模式&#xff0c;是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次。这种类型的设计模式属于结构型模式&#xff0c;它创建了对象组的树形结构。 结构 抽象根节点&#xff08;Co…

防止浏览器控制台修改网页数据与函数的方法

最近&#xff0c;解决了一个网络视频学习的两个问题&#xff1a;过10分钟就暂停并显示提示窗口、不能自动跳到下个章节&#xff0c;思路是&#xff1a;在控制台上运行一段编写的脚本代码&#xff0c;重定义该网页上一个函数&#xff08;解决人工确认问题&#xff09;&#xff1…

Wordpress设置固定链接形式后出现404错误

比如固定连接设置为 /archives/%post_id%.html 这种形式&#xff0c;看起来比较舒服。对搜索引擎也友好。 出现404需要设置伪静态

小程序项目的基本组成结构

分类介绍 项目根目录下的文件及文件夹 pages文件夹 用来存放所有小程序的页面&#xff0c;其中每个页面都由4个基本文件组成&#xff0c;它们分别是&#xff1a; .js文件&#xff1a;页面的脚本文件&#xff0c;用于存放页面的数据、事件处理函数等 .json文件&#xff1a;…

什么是Bug,bug怎么提交

1 bug的定义与起源 Bug在计算机科学中通常指的是程序或系统中的错误或缺陷&#xff0c;导致其无法按预期执行。这种错误可能源于代码中的逻辑错误、输入输出的意外处理、资源分配不当等问题。Bug的产生与多方面因素有关&#xff0c;包括程序员未能正确实现软件的特定规格或设定…

Agent AI: Surveying the Horizons of Multimodal Interaction---摘要、引言、代理 AI 集成

题目 智能体AI:多模态交互视野的考察 论文地址&#xff1a;https://arxiv.org/abs/2401.03568 图1&#xff1a;可以在不同领域和应用程序中感知和行动的Agent AI系统概述。Agent AI是正在成为通用人工智能&#xff08;AGI&#xff09;的一个有前途的途径。Agent AI培训已经证…

前端开发入门指南Day 17:TypeScript高级类型(泛型,类型守卫,Partial<T>和 Required<T>等)

泛型&#xff1a;代码的"变色龙" &#x1f98e; 为什么需要泛型&#xff1f; 想象一个快递员&#xff0c;每天要处理不同类型的包裹。如果为每种类型的包裹都写一套处理程序&#xff0c;那会很麻烦。泛型就像是一个"通用的包裹处理系统"&#xff0c;它能…

LRU Cache替换算法

目录 1.什么是LRU Cache&#xff1f; 2.LRU Cache 的底层结构 3.LRU Cache的实现 LRUCache类中的接口总览 构造函数 get操作 put操作 打印 4.LRU Cache的测试 5.LRU Cache相关OJ题 6.LRU Cache类代码附录 1.什么是LRU Cache&#xff1f; 首先我想解释一下什么是cach…

小米二面:JVM 触发类加载的条件有哪些?

类加载生命周期 类加载的生命周期包括&#xff1a;加载&#xff08;Loading&#xff09;、链接&#xff08;Linking&#xff09; 和 初始化&#xff08;Initialization&#xff09;。而其中&#xff0c;初始化阶段是决定类是否被真正加载的关键。 JVM 在什么时候启动类加载过…

数字孪生与大型模型强强联合,共塑工业制造崭新前景

随着新一代信息技术与实体经济的加速融合&#xff0c;工业领域的数字化、智能化转型趋势愈发显著&#xff0c;孕育出一系列制造业数字化转型的新模式与新业态。在此背景下&#xff0c;数字孪生技术作为关键支撑力量&#xff0c;正在全球范围内迅速崛起并得到广泛应用&#xff0…

【笔记2-5】ESP32:freertos消息队列

主要参考b站宸芯IOT老师的视频&#xff0c;记录自己的笔记&#xff0c;老师讲的主要是linux环境&#xff0c;但配置过程实在太多问题&#xff0c;就直接用windows环境了&#xff0c;老师也有讲一些windows的操作&#xff0c;只要代码会写&#xff0c;操作都还好&#xff0c;开发…

Qt Chart 模块化封装曲线图

一 版本说明 二 完成示例 此文章包含:曲线轴设置,曲线切换,单条曲线显示,坐标轴。。。 三 曲线图UI创建 在UI界面拖放一个QWidget,然后在 Widget里面放一个 graphicsView 四 代码介绍 1 头文件 #include <QString> #include <QTimer> #include <QMessa…

a7678 食品添加剂健康小助手系统微信小程序的的设计与实现 后台php+mysql+layui+thinkphp 源码 配置 文档 全套资料

食品添加剂健康小助手 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 食品添加剂健康小助手系统是一个能够帮助消费者更好地了解食品添加剂相关信息的智能系统。在现代食品生产过程中&#xff0c;许多食品添加剂被广泛使用&#xff0c;以提高食品的质…

HTTP(超文本传输协议)

HTTP是万维网通信的基础构成&#xff0c;是一个简单的请求相应协议&#xff0c;基于TCP之上80号端口 通信原理 DNS解析 将域名甩个DNS服务器解析&#xff0c;将域名化为IP访问 建立TCP连接 如图&#xff0c;客户端先发送一个sys置位seq为x&#xff08;任意值&#xff09;的…

如何设置合理的爬取频率避免被网站封锁?

要合理设置爬取频率以避免被网站封锁&#xff0c;可以采取以下几种策略&#xff1a; 遵守robots.txt规范&#xff1a;确保爬虫程序遵守目标网站的robots.txt文件中定义的爬取规则&#xff0c;避免爬取被网站禁止的内容。 设置请求头信息&#xff1a;在爬取时&#xff0c;设置合…

LeetCode Hot100 51~60

图论51. 岛屿问题52. 腐烂的橘子53. 课程表54. 前缀树55. 全排列56. 子集57. 电话号码58. 组合总和59. 括号生成60. 单词搜索 图论 51. 岛屿问题 经典洪水问题算法 class Solution { public:int numIslands(vector<vector<char>>& grid) {int nr grid.size…