docker仓库 Harbor搭建

kubeadm init 所有参数说明 是用于初始化Kubernetes集群的命令,它支持多个参数和选项。命令的一些常用参数,还有其他参数可以根据需求进行使用。命令查看完整的参数列表和说明。 阅读详情

一、Harbor简介

harbor是VMware公司中国团队为企业用户设计的 Registry server 开源项目,它是基于docker的registry的,但是又比registry多出了很多功能。

提供WEB界面,优化用户体验。

提供分层传输机制,优化网络传输。docker镜像都是分层的,重复下载同样的层,是一种浪费。

Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。

综上,比起简单的registry,Harbor更适合用作企业级的docker仓库。

二、下载

官方地址:https://github.com/goharbor/harbor/releases

有两种包可下载,离线包(很大)与在线包(很小)。

git的网速实在太慢,我们下载在线安装包。

cd /data/downlaod
wget https://github.com/goharbor/harbor/releases/download/v2.1.3/harbor-online-installer-v2.1.3.tgz

三、配置

解压缩文件到指定目录

tar -zxvf harbor-online-installer-v2.1.3.tgz -C /data/soft/

进入软件目录,准备证书,因为需要使用https,所以要制作证书。

cd /data/soft/harbor

#生成秘钥和自签名证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

#生成证书签名请求
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.master.com.key -out harbor.master.com.csr

#生成服务器证书
openssl x509 -req -days 365 -in harbor.master.com.key -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.master.com.csr

然后,生成了这些证书文件:

 

复制一份配置文件,然后修改 配置

#复制默认配置文件
cp harbor.yml.tmpl harbor.yml
#打开配置文件
vim harbor.yml

配置文件的内容修改。

1.host修改为本机的IP地址。

2.配置https的证书文件

3.Harbor管理员账户的密码

4.mysql数据库的密码

5.数据卷的位置

四、安装

注意:需要事先安装好docker与docker-compose,安装方法请自行百度。docker推荐使用yum方式安装,docker-compose推荐直接下载二进制文件。

执行安装脚本

./install.sh

 然后开始自动生成docker-compose.yml文件,并下载相关docker镜像。

之后的启停操作,就是常见的docker-compose ps/stop/start/restart/rm

五、使用

访问web页面,因为使用的https的默认443端口,直接使用IP即可访问:https:192.168.3.218

帐号密码为 admin/Harbor12345 ,密码在上一步的配置中是可以配置的。

1、推送镜像到私有仓库。

先从公共仓库下载一个hello-world镜像

dokcer pull hello-world

打上tag,私有仓库地址,以及项目名称是必须的。

docker tag hello-world:latest 192.168.3.218/library/hello-world:latest

修改/etc/docker/daemon.json,并重启docker

{
"registry-mirrors":["https://registry.docker-cn.com"],
"insecure-registries": [ "192.168.3.218"]
}
#重启docker
systemctl restart docker

登录,用户名密码可以使用管理员,也可以使用在web界面新建的用户

docker login 192.168.3.218

推送镜像到私服

docker push 192.168.3.218/library/hello-world:latest

然后再web界面的library项目下就能看到这个镜像了。

2.从私有仓库下载镜像

换一台计器,下载镜像

修改/etc/docker/daemon.json,并重启docker,同上

登录,同上。

下载镜像

docker pull 192.168.3.218/library/hello-world

 

最后,结合IDE的docker插件,就可以一键部署,十分方便。

【笔记版】k8s部署步骤---kubeadm init 原理 kubelet是Master在Node节点上的Agent,负责与master节点的apiserver进行通信,管理本机运行容器的生命周期,负责Pod对应容器的创建、启停等任务。Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,Kubernetes里所有资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。通过以上步骤,kubeadm init成功完成集群初始化,并提供了进一步操作集群的指导。用户可以根据输出的信息和命令,完成集群的配置和管理。 阅读详情

相关推荐

搭建Docker Harbor仓库

搭建 Docker Harbor 仓库是一个常见的需求,Harbor 是一个企业级的 Docker 镜像仓库,提供了镜像管理、用户权限控制、漏洞扫描等功能。

qq_44534541的博客 1612

无痛安装valhalla

无痛安装valhalla

qq_34827857的博客 894

搭建docker私有化仓库Harbor

Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为"庇护;居住;可以理解为是Docker镜像的"居住环境"或者是镜像的"庇护所”。Harbor最初由VMware公司开发,旨在解决企业级Docker镜像管理的安全和可信任性问题。VMware于2016年发布,在2017年,VMware将Harbor开源,这使得更广泛的社区和组织可以自由地使用和贡献代码。

sym的博客 2307

kubeadm online install k8s v1.18.1【kubeadm 离线部署 k8s v1.18.1】

1.文章经常遇到bug问题的地方保持返回输出,方便您的理解。 2.为方便您的复制粘贴,无返回输出以及简单返回输出的命令前无标识符,有返回输出的命令前以“$”标识。 3.为方便你的深入理解,部分带有颜色的文字为超链接。 4.为方便你的理解,本文以一步一步部署为主,当然,如果想快速部署,请点击。 5.不要担心文字繁多,你可以尽可能复制部署命令即可,这样不会浪费太多时间。 Kubernetes 版本...

爱死亡机器人 7790

搭建Docker私有仓库Harbor

Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为"庇护;居住;可以理解为是Docker镜像的"居住环境"或者是镜像的"庇护所"。Harbor最初由VMware公司开发,旨在解决企业级Docker镜像管理的安全和可信任性问题。VMware于2016年发布,在2017年,VMware将Harbor开源,这使得更广泛的社区和组织可以自由地使用和贡献代码。

oopxiajun博客专栏 1504

Docker远程仓库--Harbor搭建

环境准备: docker、docker compose 安装docker: apt-get install docker.io sudo apt-get update sudo apt-get install apt-transport-https ca-certificates # 添加GPG密钥 curl -fsSL https://download.docker.com/linux/ubu...

lvmuheng的博客 953

kubernetes 1.18安装

一. 系统准备1.系统版本https://www.cndba.cn/hbhe0316/article/4832 [root@k8s-master home]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) 2./etc/hosts信息https://www.cndba.cn/hbhe0316/art...

hbhe0316的专栏 824

超详细docker部署搭建私有仓库harbor

harbor作为一个私有仓库,存储和管理自己的镜像

2301_78721676的博客 3480

【Docker4】使用Harbor搭建私有仓库

使用Harbor搭建私有仓库

m0_71593537的博客 1781

AAAI 2025杰出论文解读:神经符号推理与生物多样性计算的突破性进展

本文深度解读了AAAI 2025两篇杰出论文的突破性进展。南京大学周志华团队提出“溯因反射”框架,高效解决神经符号推理中的“不一致性”核心难题,为构建可靠、可解释的AI系统提供了新路径。斯坦福大学等机构的DiVShift研究,则系统分析了公民科学数据中的复杂分布偏移,为利用海量数据精准监测生物多样性及应对AI数据偏差提供了关键方法论。

weixin_29085865的博客 501

PCB之AD层次化原理图设计

PCB之AD层次化(模块化)原理图设计 软件版本:AD17.1.9(bBuild 592) 先上效果图: 可以看到,图中有RS485和W5500这两个部分是复用了原理图,当项目中需要多个功能相同的电路时,这种设计就可以大大节约PCB布局布线的时间,方法后面介绍; 1.首先确定好项目中个部分电路的功能模块 不同功能的电路分开不同原理图画,然后给出输入输出端口,这样方便复用,下面是实例项目的功能划分 2.单个模块电路的接口设计 这里以W5500以太网接口电路为例说明: 主要就分为通讯接口和电源接口:

洋洋洋的博客 3万+

Docker环境搭建,并安装Harbor仓库

在CentOS 7上安装Docker和Harbor仓库

weixin_57370131的博客 2519

AI算力网络与通信领域流量分析:优化策略探讨_副本

今天的AI就像一个"超级吃货",每天要"吃"掉海量数据、“消耗"巨量算力——训练一个千亿参数的大模型,可能需要上万块GPU同时工作数周,其间产生的数据传输量足以填满数百万个1TB硬盘。这些GPU和计算节点通过网络连接形成"AI算力网络”,而数据在节点间的流动就是"通信流量"。如果把算力比作AI的"肌肉",那流量就是"血液"——血液不通畅,肌肉再强也使不上劲。

AI天才研究院 1198

docker私有仓库harbor搭建

1.准备 1.1 harbor下载 harbor下载地址:链接添加链接描述 然后我们可以选择自己需要的版本,我这边选择的是v1.10 1.2 docker安装 docker 安装以及yum源的安装可以参考《docker入门教程(二)》文章。 2.搭建 2.1 解压harbor tar xf 解压 -C 目录 2.2 编辑harbor.yml hostname: http: port harbor_admin_password: log data_volume: 2.3 安装docker-compose 依

猿上生活 1万+

USB HID虚拟电池:Windows零驱动电源状态模拟方案

虚拟电池是一种在硬件测试与功耗分析中替代真实电池、实现可控电源状态注入的关键技术。其核心原理是通过标准USB HID协议(特别是UPS设备类)向操作系统上报可编程的AC/DC状态、剩余电量、容量参数等,绕过内核驱动限制,达成毫秒级响应与跨Windows版本兼容。该技术显著提升SoC能效验证、电池健康度校准及低电量行为触发等场景的可重复性与精度。本文基于CH554微控制器实现符合HID UPS规范的物理层虚拟电池设备,支持零驱动安装、USB原生识别与实时参数调控,适用于笔记本平台功耗建模、电源管理策略验证及自

weixin_35755188的博客 354

OpenDataLab 大模型训练数据集下载记录

大模型 训练数据集

u013558123的博客 3341

Docker搭建Harbor私有仓库

转载:https://blog.youkuaiyun.com/aixiaoyang168/article/details/73549898 1、Harbor 介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docke...

灬勿忘丶心安 2万+

基于STM32设计的心率脉搏测量仪(项目资料ID:9)

本设计基于STM32F103单片机开发了一款便携式心率脉搏测量仪,通过光电传感器采集脉搏信号,经放大(约1200倍)、滤波(低通及四阶低通滤波)、比较及偏置电压调理后,由STM32进行ADC采样与数据处理。硬件采用Altium Designer设计,包含信号调理电路(限定心率范围43.4-800次/分钟)及电源管理模块;软件基于STM32CubeMX开发,利用队列存储和时间间隔平均算法优化精度,实现多终端显示(OLED实时心率/动画、MATLAB波形分析、蓝牙传输至手机)。系统支持自动启停(检测脉搏启

以培养嵌入式工程师为己任 1万+

Docker 私有仓库 harbor 搭建

优快云博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

Muti-Agent 5324

【AI智能体】Claude Code 高级编程技巧实战项目详解

Claude Code 高级编程技巧实战项目详解

congge 1万+

Linux下搭建简易的HTTP服务器完成图片显示

篇文章作为Linux下socket(TCP)网络编程的练习,使用C语言代码搭建一个简单的HTTP服务器,完成与浏览器之间的交互,最终在浏览器上显示一张图片;通过这个例子可以巩固socket里多线程使用,也可以方便学习了解HTTP协议。

2588

harbor仓库搭建和docker-compose语法

harbor仓库搭建和docker-compose语法 文章目录harbor仓库搭建和docker-compose语法HarborHarbor简介Harbor的功能Docker composeHarbor部署docker-compose语法1、image2、build3、command4、links5、external_links6、ports7、expose8、volumes9、volunes_from10、environment11、env_file12、extends13、net14、pid15、dn

Cadillac_Yuhuang的博客 2725

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Docker搭建Harbor公开仓库

Docker搭建Harbor公开仓库 博文目录Registry和Harbor的区别Docker Harbor的优点Docker Harbor依赖的程序一、搭建Harbor仓库1、配置Docker Compose2、配置Docker Harbor公开仓库3、配置Docker客户端4、配置Docker Harbor私有仓库上一篇博文讲到...

weixin_38920945的博客 1310

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

使用Harbor搭建Docker仓库

Harbor github项目地址:https://github.com/goharbor/harborHarbor是一个开源的可信云本机注册表项目,用于存储,签名和扫描内容。Harbor通过添加用户通常需要的功能(如安全性,身份和管理)来扩展开源Docker Distribution。使注册表更接近构建和运行环境可以提高图像传输效率。Harbor支持在注册表之间复制映像,还提供用户管理,访问控制和活动审计等高级安全功能。① 配置参数位于文件harbor.yml中;② 在harbor.yml。......

JohnnyG2000的博客 2014

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

docker私有化仓库harbor搭建

例:wget https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64。hostname: www.kubemsb.com 修改为域名,而且一定是证书签发的域名 没有域名用ip。添加/etc/docker/daemon.json文件,默认不存在,需要手动添加。harbor_admin_password: 12345 访问密码。"insecure-registries": ["ip地址"]

zzChoose的博客 1226

Linux 搭建 Docker 私有化仓库 Harbor 教程

Harbor 是一个开源的企业级 Docker Registry 服务,提供了镜像管理、访问控制、身份验证等功能,适用于容器化环境下的镜像存储管理。它最初由 VMware 公司开发,2017 年开源,为企业容器化应用的部署和管理提供了强大的支持。通过以上步骤,您已经成功搭建了自己的 Docker 私有仓库 Harbor。Harbor 提供了丰富的功能,可以帮助您更好地管理 Docker 镜像。您可以根据实际需求进行进一步的配置和优化,如配置镜像复制、漏洞扫描等高级功能。

广阔天地,大有作为 800
上一篇: k8s(Kubernetes)实战(一)之部署etcd与flannel
下一篇: k8s(Kubernetes)实战(二)之部署api-server、controller-manager、scheduler、kubelet
Valhalla6416
博客等级 码龄10年 3粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值