Docker--harbor

目录

一、搭建本地私有仓库

Docker容器的重启策略如下:

二、Harbor 简介

2.1Harbor是什么

2.2Harbor的特性

2.3Harbor的构成

2.4架构的数据流向

三、harbor部署以及配置文件

环境准备

部署Docker-Compose服务

下载或上传Docker-Compose:

赋予执行权限:

验证安装:

部署 Harbor 服务

下载或上传Harbor安装程序:

解压安装程序:

修改Harbor安装的配置文件:

关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数

启动Harbor

切换到Harbor安装目录:

执行prepare命令:

执行install.sh命令:

切换到Harbor安装目录:

执行docker-compose ps命令:

创建一个新项目并上传镜像到Harbor

在其他客户端上传镜像

四、维护管理harbor的项目

通过Harbor Web创建项目

要通过Harbor Web创建项目,可以按照以下步骤进行操作:

创建 Harbor 用户

创建Harbor用户并分配权限

添加项目成员

在客户端上使用普通账户操作镜像

查看日志

修改 Harbor.cfg 配置文件

移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

迁移Harbor服务:

一、搭建本地私有仓库

#首先下载 registry 镜像

docker pull registry

#配置 daemon.json 文件: 在 /etc/docker/daemon.json 文件中添加私有镜像仓库地址,同时配置其他参数

vim /etc/docker/daemon.json

{

"insecure-registries": ["192.168.86.20:5000"], #添加,注意用逗号结尾

"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]

}

重启 Docker 服务:

systemctl restart docker.service

#运行 registry 容器

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下来的镜像

Docker容器的重启策略如下:

no:默认策略,在容器退出时不重启容器

on-failure:在容器非正常退出时(退出状态非0),才会重启容器

on-failure:3 :在容器非正常退出时重启容器,最多重启3次

always:在容器退出时总是重启容器

unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

#为镜像打标签

docker tag centos:7 192.168.86.20:5000/centos:v1

#上传到私有仓库

docker push 192.168.86.20:5000/centos:v1

#列出私有仓库的所有镜像

curl http://192.168.86.20:5000/v2/_catalog

#出私有仓库的 centos 镜像有哪些tag

curl http://192.168.86.20:5000/v2/centos/tags/list

#先删除原有的 centos 的镜像,再测试私有仓库下载

docker rmi -f 8652b9f0cb4c

docker pull 192.168.86.20:5000/centos:v1

二、Harbor 简介
2.1Harbor是什么

harbor是一个开源的云原生镜像仓库, 它允许仓库用户存储,签名和分发docker镜像。 你可以将harbor看做是私有的docker hub,它提供了更新安全性和控制性, 让组织能够安全的存储和管理镜像。 harbor RBAC (基于角色访问控制),可以对不同的用户和用户组进行灵活全向控制,并且提供灵活的复制和同步策略,可以实现多个harbor实例的镜像复制和同步。

2.2Harbor的特性

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做了封装,扩展了自己的业务模板。

2.3Harbor的构成

Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

① proxy :通过一个前置的反向代理统一接收浏览器 docker 客户端请求的,并且请求转发给后端不同的服务,这是一个方向代理组件

② registry: 负责存储 docker镜像 处理docker pull/push 命令来上传和下载

③ core services:harbor核心功能,包括 UI、webhook、token 服务

webhook: 负责网站的一些服务功能

token:令牌 提供身份认证服务

UI: 显示可视化界面

④ database :为core service 提供数据的服务 数据库记录镜像的元信息及用户的身份信息

⑤ log collector: 负责收集其他组件一些日志,以供我们进行分析以及健康检查等

⑥ job services:主要做镜像复制,本地镜像可以同步到其他harbor私有仓库中

⑦ adminserver: 主要是做一个后端配置个数据管理者 ,没有太多功能

2.4架构的数据流向

① 所有的请求或认为的操作都会首先交给proxy (反向代理)

② proxy 会先请求转发给后端 core services

③ core services包含 UI token(身份认证) webhook(网站的一些服务功能)

④ 转发给registry(镜像存储),若需要下载镜像等权限操作,需要通过core services中token令牌的身份验证服务才行

⑤ 每一次下载和上传都会产生操作记录,生成日志,保存database 中

⑥ database 记录保存镜像元信息及用户与组身份的信息,通过验证授权才能允许相关操作

三、harbor部署以及配置文件
环境准备

Harbor服务器 192.168.86.20 docker-ce、docker-compose、harbor-offline-v1.2.2 client服务器 192.168.86.30 docker-ce

Harbor服务器是一个用于管理和存储Docker镜像的私有仓库。它安装了docker-ce(Docker的社区版)、docker-compose(用于管理多个Docker容器的工具)和harbor-offline-v1.2.2(Harbor的离线版本1.2.2)。

客户端服务器是一个使用Docker的服务器,它安装了docker-ce。它可以通过网络连接到Harbor服务器,并使用Harbor提供的功能来管理和获取Docker镜像。

这个架构允许在Harbor服务器上集中管理和存储Docker镜像,并通过客户端服务器来访问和使用这些镜像。

部署Docker-Compose服务
下载或上传Docker-Compose:

使用curl命令下载Docker-Compose二进制文件。该命令会从GitHub上的docker/compose仓库下载特定版本的Docker-Compose。请注意,uname -suname -m是用于获取操作系统和机器架构的命令。

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命令为下载的Docker-Compose二进制文件赋予执行权限。

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

验证安装:

使用docker-compose命令验证Docker-Compose的安装是否成功。

docker-compose --version

部署 Harbor 服务
下载或上传Harbor安装程序:

使用wget命令下载Harbor离线安装程序。该命令会从指定的URL下载Harbor离线安装程序的压缩包。

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

解压安装程序:

使用tar命令解压下载的Harbor离线安装程序压缩包,并将其解压到/usr/local/目录下。

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

修改Harbor安装的配置文件:

使用vim或其他文本编辑器打开Harbor的配置文件harbor.cfg。根据需要修改以下两个配置项:

vim /usr/local/harbor/harbor.cfg

第5行:将"hostname"设置为Harbor服务器的IP地址或域名。 hostname = 192.168.86.20

第59行:将"harboradminpassword"设置为管理员的初始密码。默认的用户名/密码是admin/Harbor12345。

harbor_admin_password = Harbor12345

保存并关闭文件

关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数

1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下: ●hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.86.20 或 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

在配置好了harbor.cfg文件之后,可以按照以下步骤启动Harbor:

切换到Harbor安装目录:

使用cd命令切换到Harbor的安装目录。

cd /usr/local/harbor/

执行prepare命令:

运行./prepare命令,为Harbor启动的容器生成必要的文件和环境。

./prepare

执行install.sh命令:

运行./install.sh命令,它将拉取Harbor镜像并启动容器。

./install.sh

查看 Harbor 启动镜像

要查看Harbor启动的镜像,可以按照以下步骤进行:

切换到Harbor安装目录:

使用cd命令切换到Harbor的安装目录。

cd /usr/local/harbor/

执行docker-compose ps命令:

运行docker-compose ps命令,它将显示Harbor启动的容器及其相关信息,包括容器的名称、状态和所使用的镜像。

docker-compose ps

创建一个新项目并上传镜像到Harbor

在浏览器中访问Harbor的WEB UI界面: 使用http://192.168.86.20访问Harbor的WEB UI界面。默认的管理员用户名和密码是admin/Harbor12345。

登录并创建新项目: 在登录界面输入管理员用户名和密码后,点击登录按钮。然后点击"+项目"按钮创建一个新项目。

填写项目信息: 在创建新项目的界面中,填写项目名称为"myproject-kgc",然后点击"确定"按钮创建新项目。

使用Docker命令登录并推送镜像: 使用以下Docker命令在本地登录Harbor并推送镜像。默认情况下,Registry服务器在端口80上监听。

登录Harbor:

docker login [-u admin -p Harbor12345] http://127.0.0.1

下载镜像进行测试:

docker pull nginx

打标签:

docker tag nginx:latest 127.0.0.1/myproject-kgc/nginx:v1

上传镜像到Harbor:

docker push 127.0.0.1/myproject-kgc/nginx:v1

在Harbor界面查看镜像: 在Harbor的WEB UI界面中,导航到"myproject-kgc"目录下,将看到上传的镜像及其相关信息。

在其他客户端上传镜像

docker login -u admin -p Harbor12345 http://192.168.86.20

WARNING! Using --password via the CLI is insecure. Use --password-stdin.

Error response from daemon: Get https://192.168.86.20/v2/: dial tcp 192.168.86.20:443: connect: connection refused

要在其他客户端上传镜像到Harbor,解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。

在Docker客户端配置操作: 使用vim或其他文本编辑器打开Docker服务的配置文件docker.service。

vim /usr/lib/systemd/system/docker.service

在第13行修改ExecStart参数,添加--insecure-registry选项并指定Harbor服务器的IP地址。

ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.86.20 --containerd=/run/containerd/containerd.sock

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.86.20

保存并关闭文件。

重启Docker服务: 使用systemctl命令重新加载配置文件并重启Docker服务。

systemctl daemon-reload

systemctl restart docker

再次登录Harbor: 使用docker login命令登录Harbor。可以使用用户名和密码进行登录,但请注意使用--password-stdin选项更安全。

docker login -u admin -p Harbor12345 http://192.168.86.20

登录成功后,凭据将被保存在/root/.docker/config.json文件中,以便下次登录时可以直接使用凭据登录Harbor。

下载和上传镜像: 使用docker pull命令下载镜像,并使用docker tag和docker push命令将镜像打标签并上传到Harbor。

docker pull 192.168.86.20/myproject-kgc/nginx:v1

docker pull cirros

docker tag cirros:latest 192.168.86.20/myproject-kgc/cirros:v2

docker push 192.168.86.20/myproject-kgc/cirros:v2

刷新Harbor的Web管理界面: 在Harbor的WEB UI界面中,导航到"myproject-kgc"项目下,将看到上传的镜像及其相关信息。

四、维护管理harbor的项目
通过Harbor Web创建项目
要通过Harbor Web创建项目,可以按照以下步骤进行操作:

打开Harbor Web界面并登录。

导航到仓库页面,通常位于导航栏的顶部或侧边栏中。

在仓库页面上,将看到一个项目列表。单击列表上方的"+项目"按钮。

在弹出的对话框中,填写项目的名称。

如果你希望项目是私有的(只有特定用户或团队可以访问),请确保项目级别设置为"私有",并取消勾选相关选项。

如果你希望项目是公共的(任何人都可以访问),请将项目级别设置为"公共仓库",并保持相关选项处于选中状态。

单击"创建"按钮以创建项目。

现在,就可以将镜像推送到该项目中。在推送之前,请确保已经在本地配置了正确的Docker客户端,并且已经登录到Harbor仓库(如果项目是私有的)。

推送镜像后,其他用户将能够通过Harbor Web界面或命令行下载该项目下的镜像。

创建 Harbor 用户
创建Harbor用户并分配权限

在Harbor的Web管理界面中,单击"系统管理",然后选择"用户管理"。

在用户管理页面上,单击"+用户"按钮。

填写用户名为"test-zhangsan",邮箱为"test-zhangsan@qq.com",全名为"zhangsan",密码为"Abc123456",并在注释中添加"管理员"(可选)。

单击"创建"按钮以创建用户。如果需要将该用户设置为管理员角色或进行其他操作,可以单击左侧的"…"按钮进行相应设置。

添加项目成员

导航到项目页面,找到你的项目(例如"myproject-test")并单击进入。

在项目页面上,找到"成员"选项卡并单击。

单击"+成员"按钮。

填写之前创建的用户"test-zhangsan",并将角色设置为"开发人员"。

单击"创建"按钮以添加项目成员。如果需要更改成员角色或进行其他操作,可以单击左侧的"…"按钮进行相应设置。

在客户端上使用普通账户操作镜像

首先,删除本地已经打标签的镜像

docker rmi 192.168.86.20/myproject-test/cirros:v2

退出当前用户,并使用之前创建的账户"test-zhangsan"进行登录:

docker logout 192.168.86.20

docker login 192.168.86.20

或者

docker login -u test-zhangsan -p Abc123456 http://192.168.86.20

下载和上传镜像进行测试(示例中的命令是下载名为"192.168.86.20/myproject-test/cirros:v2"的镜像,然后将其重新打标签为"192.168.86.20/myproject-test/cirros:v3"并上传):

docker pull 192.168.86.20/myproject-test/cirros:v2

docker tag cirros:latest 192.168.86.20/myproject-test/cirros:v3

docker push 192.168.86.20/myproject-test/cirros:v3

查看日志

登录到Harbor的Web管理界面。

导航到"系统管理"或"管理"选项卡,通常位于导航栏的顶部或侧边栏中。

在系统管理页面上,会找到一个名为"日志"、"日志管理"或类似的选项。单击该选项以进入日志管理页面。

在日志管理页面上,可以选择查看不同类型的日志,例如系统日志、访问日志、操作日志等。选择"操作日志"选项以查看用户相关操作的日志。

根据你的需求,可以按时间顺序浏览日志,也可以使用搜索功能来筛选特定的操作日志。

如果需要导出日志,通常会有一个"导出"或"下载"按钮,可以使用该按钮将日志保存到本地。

修改 Harbor.cfg 配置文件

要修改Harbor的配置文件harbor.cfg中的可选参数

停止现有的Harbor实例: 在Harbor安装目录中运行以下命令,停止并删除现有的Harbor容器和相关卷。

cd /usr/local/harbor

docker-compose down -v

编辑harbor.cfg文件: 使用vim或其他文本编辑器打开harbor.cfg文件,对其中的可选参数进行修改。

vim harbor.cfg

注意:只能修改harbor.cfg文件中的可选参数,不要修改其他部分。

运行prepare脚本: 运行./prepare命令,它将根据新的配置文件填充配置。

./prepare

重新创建并启动Harbor实例: 运行docker-compose up -d命令,它将重新创建并启动Harbor容器。

docker-compose up -d

如果遇到防火墙相关的报错,请确保firewalld服务已启动,并执行以下命令重启防火墙服务:

systemctl restart firewalld.service

docker-compose up -d

移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

在Harbor服务器上操作:

切换到Harbor安装目录: 使用cd命令切换到Harbor的安装目录。

cd /usr/local/harbor

移除Harbor服务容器: 运行docker-compose down -v命令,它将停止并删除Harbor服务容器,并删除相关的卷。

docker-compose down -v

打包镜像数据: 如果你希望保留镜像数据,可以将镜像数据目录打包为一个压缩文件。

ls /data/registry/docker/registry/v2/repositories/myproject-test

cd /data/registry/docker/registry/v2/repositories/myproject-test

tar zcvf test-registry.tar.gz ./*

这将在当前目录下创建一个名为test-registry.tar.gz的压缩文件,其中包含myproject-test项目的镜像数据。

迁移Harbor服务:

如果需要重新部署Harbor并移除所有Harbor服务容器的数据,可以按照以下步骤进行操作:

切换到Harbor安装目录: 使用cd命令切换到Harbor的安装目录。

cd /usr/local/harbor

移除Harbor服务容器和数据: 运行docker-compose down -v命令,它将停止并删除Harbor服务容器,并删除相关的卷和数据。

docker-compose down -v

删除数据库和镜像数据: 运行rm -r命令,删除Harbor的数据库和镜像数据目录。

rm -r /data/database

rm -r /data/registry

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

验证回文串[简单]

优质博文:IT-BLO-CN 一、题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。 字母和数字都属于字母数字字符。 给你一个字符串s,如果它是回文串&#xff…

MySQL---视图索引

表定义: 学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系 Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名 Cno为主键 学生选课表:S…

【JavaEE】文件操作 —— IO

文件操作 —— IO 1. 文件的属性 文件内容文件大小文件路径文件名称 2. 文件的管理 采用树形结构进行管理。 3. 文件路径 分为两种:相对、绝对路径。 相对路径:相对于当前位置的路径,以“./xxx.xxx”为标志绝对路径:以从盘符…

MySQL作业

目录 1.实验需求1: (1) (2) (3) (4) (5) 2.实验步骤1: (1)完成上述实验需求1,需要先创建一…

DAY13--learning English

一、积累 1.jog Riding rollercoaster is even like a daily jog for this man, 对这个男人来说坐过山车甚至就像每天散步一样轻松. 2.admission Admission to guilt. 承认有罪 3.summon I love the guy hes literally summon Karpov into material plane. 我喜欢这家伙他真…

牛牛的猜球游戏

置换群 前缀和 思想 学好线性代数 做这题很有意思,记得多校也有一道置换群的好题~ 把多次变换看成一个置换矩阵就好也就是 I (一开始为单位矩阵) ->经过A作用产生了B->经过C作用产生了D 即 CAI D 现在让我们求一下 CI ? 两边右…

C++浮点数比较

根据资料&#xff0c;C浮点数计算时存在精度误差&#xff0c;在一些情况下比较浮点数可能应使用特定的比较函数&#xff1b; #include "stdafx.h" #include<iostream>using namespace std;#define EPS 1e-9int main(int argc, char* argv[]) {double a 0.3;do…

利用appium自动控制移动设备并提取数据

安装appium-python-client模块并启动已安装好的环境 安装appium-python-client模块 在window的虚拟环境下执行pip install appium-python-client 启动夜神模拟器&#xff0c;进入夜神模拟器所在的安装路径的bin目录下&#xff0c;进入cmd终端&#xff0c;使用adb命令建立adb…

Klocwork—符合功能安全要求的自动化静态测试工具

产品概述 Klocwork是Perforce公司产品&#xff0c;主要用于C、C、C#、Java、 python和Kotlin代码的自动化静态分析工作&#xff0c;可以提供编码规则检查、代码质量度量、测试结果管理等功能。Klocwork可以扩展到大多数规模的项目&#xff0c;与大型复杂环境、各种开发工具集成…

在k8s上部署ClickHouse

概述 clickhouse的容器化部署&#xff0c;已经有非常成熟的生态了。在一些互联网大厂也已经得到了大规模的应用。 clickhouse作为一款数据库&#xff0c;其容器化的主要难点在于它是有状态的服务&#xff0c;因此&#xff0c;我们需要配置PVC。 目前业界比较流行的部署方式有…

使用pyechart创建基础柱状图

from pyecharts.charts import Bar# 构建柱状图对象 bar Bar()# 添加X轴数据 bar.add_xaxis(["中国","美国","英国"])# 添加Y轴数据 bar.add_yaxis("GDP",[30,20,10])# 绘图 bar.render("基础柱状图.html")效果演示&#x…

Git学习笔记(第6章):GitHub操作(远程库操作)

目录 6.1 远程库操作 6.1.1 创建远程库 6.1.2 命名远程库 6.1.3 本地库推送到远程库(push) 6.1.4 远程库拉取到本地库(pull) 6.1.5 远程库克隆到本地库(clone) 6.2 团队内协作 6.3 跨团队协作 6.4 SSH免密登录 6.1 远程库操作 命令 作用 git remote -v 查看所有远程…

C语言·预处理详解

1. 预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的 __FILE__ 进行编译的源文件 __LINE__ 文件当前的行号 __DATE__ 文件被编译的日期 __TIME__ 文件被编译的时间 __STDC__ 如果编译器遵循ANSI C&#xff0c;…

正则表达式..

1.字符串的合法检验 现在有一个字符串验证码 我们需要检验其的合法性 什么条件才能够使得字符串合法呢&#xff1f;就是6-10个字符串长度 并且以字母开头 并且其中由字母、数字、下划线构成 那么我们可以先通过自定义的方式进行检验 public class Main {public static void m…

CodeWave智能开发平台--03--目标:应用创建--10初级采购管理系统总结

摘要 本文是网易数帆CodeWave智能开发平台系列的第14篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成10初级采购管理系统总结 CodeWave智能开发平台的14次接触 CodeWave参考资源 网易数帆CodeWave…

day3:基于UDP模型的简单文件下载

思维导图 tftp文件下载客户端实现 #include <head.h> #define SER_PORT 69 #define SER_IP "192.168.125.223" int link_file() {int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}return sfd; } int filedownloa…

luffy商城项目(一)

企业项目类型 # 1 面向互联网用户&#xff1a;商城类项目 -微信小程序商城 # 2 面向互联网用户&#xff1a;二手交易类的 -咸鱼 -转转 # 3 公司内部项目&#xff1a;python写的重点 -oa系统 -打卡系统工资核算系统 -第三方公司做的&#xff1a…

Vue+ElementUI技巧分享:el-table 中实现灵活的文本换行

文章目录 前言一、使用 CSS 选择器实现换行二、使用 HTML 标签和 CSS 类实现换行三、利用数组实现每项数据单独一行四、动态生成带换行文本的表格五、完整代码演示总结 前言 Element UI 是 Vue.js 的一个流行组件库&#xff0c;广泛应用于构建企业级前端界面。在数据密集型的应…

Go语言基础快速上手

1、Go语言关键字 2、Go数据类型 3、特殊的操作 3.1、iota关键字 Go中没有明确意思上的enum&#xff08;枚举&#xff09;定义&#xff0c;不过可以借用iota标识符实现一组自增常亮值来实现枚举类型。 const (a iota // 0b // 1c 100 // 100d // 100 (与上一…

图像比特级置乱加密的安全性

一、概述 Liu等人[1] 提出一种冗余空间转移&#xff08;简称&#xff1a;RST&#xff09;加密算法。RST加密中&#xff0c;用户首先将图像分解为8个位平面&#xff0c;根据位平面置乱秘钥置乱图像的位平面以改变图像的像素值。接着&#xff0c;将位平面置乱图像分块&#xff0…