Docker私有仓库Harbor

Docker私有仓库Harbor

1,Harbor介绍

软件简介
Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理 (RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。
Harbor是由很多容器组成实现完整功能。
官方网址:https://goharbor.io/
在这里插入图片描述
功能
作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。如下功能

  • 基于角色的访问控制 - 用户与 Docker 镜像仓库通过 “项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制 - 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面 - 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
  • AD/LDAP 支持 - Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
  • 审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API - RESTful API 提供给管理员对于 Harbor 更多的操控,使得与其它管理软件集成变得更容易。
  • 部署简单 - 提供在线和离线两种安装工具,也可以安装到 vSphere 平台 (OVA 方式) 虚拟设备。

组成
在这里插入图片描述

2,Harbor安装

Harbor 可以安装在任何 Kubernetes 环境或支持 Docker 的系统上。
可以将其部署在任何支持 Docker 的 Linux 发行版上。支持在线安装和离线安装。

Harbor安装先决条件

目标主机需要安装 Docker 和 Docker Compose。
硬件
在这里插入图片描述
软件
在这里插入图片描述
网络端口
在这里插入图片描述
因为依赖关系所以先安装Docker再安装Docker-Compose最后安装Harbor。

2.1 安装Docker

root@ubuntu2204:~# docker info
Command 'docker' not found, but can be installed with:
snap install docker         # version 20.10.17, or
apt  install docker.io      # version 20.10.12-0ubuntu4
apt  install podman-docker  # version 3.4.4+ds1-1ubuntu1
See 'snap info docker' for additional versions.
root@ubuntu2204:~# apt  install docker.io  -y

root@ubuntu2204:~# docker version 
Client:
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.17.3
 Git commit:        20.10.12-0ubuntu4
 Built:             Mon Mar  7 17:10:06 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.3
  Git commit:       20.10.12-0ubuntu4
  Built:            Mon Mar  7 15:57:50 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.5.9-0ubuntu3
  GitCommit:        
 runc:
  Version:          1.1.0-0ubuntu1.1
  GitCommit:        
 docker-init:
  Version:          0.19.0
  GitCommit:        
root@ubuntu2204:~# 

2.2 安装Docker-Compose

官方文档:https://docs.docker.com/compose/install/

# 1,要下载并安装独立撰写,请运行:
从官网下载,慢
root@ubuntu2204:~# curl -SL https://github.com/docker/compose/releases/download/v2.15.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0 42.8M    0 58463    0     0    217      0 57:30:27  0:04:28 57:25:59     0^C

从国内下载,快
root@ubuntu2204:~# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   423  100   423    0     0    287      0  0:00:01  0:00:01 --:--:--   287
100 16.4M  100 16.4M    0     0  5675k      0  0:00:02  0:00:02 --:--:-- 9536k
root@ubuntu2204:~# 


# 2,将可执行权限应用于安装目标路径中的独立二进制文件。
root@ubuntu2204:~# ll  /usr/local/bin/docker-compose 
-rw-r--r-- 1 root root 17213176 Jan  9 12:28 /usr/local/bin/docker-compose
root@ubuntu2204:~# chmod +x /usr/local/bin/docker-compose 
root@ubuntu2204:~# ll !$
ll /usr/local/bin/docker-compose
-rwxr-xr-x 1 root root 17213176 Jan  9 12:28 /usr/local/bin/docker-compose*

 #3,使用 测试和执行撰写命令。
 root@ubuntu2204:~# docker-compose -v
docker-compose version 1.25.3, build d4d1b42b

2.3安装Harbor

支持离线安装和在线安装,步骤基本相同
下载地址:https://github.com/goharbor/harbor/releases
在这里插入图片描述

#在线下载Harbor压缩包包,不推荐
root@ubuntu2204:~# wget https://github.com/goharbor/harbor/releases/download/v2.6.3/harbor-online-installer-v2.6.3.tgz
#离线下载,用wget命令有时候不成功,还比较慢,这里用迅雷下载之后在倒入
root@ubuntu2204:~# wget https://github.com/goharbor/harbor/releases/download/v2.6.3/harbor-online-installer-v2.6.3.tgz
--2023-01-09 13:01:59--  https://github.com/goharbor/harbor/releases/download/v2.6.3/harbor-online-installer-v2.6.3.tgz
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... failed: Connection refused.
root@ubuntu2204:~# 
root@ubuntu2204:~# mkdir /apps
root@ubuntu2204:~# tar xfz harbor-offline-installer-v2.6.3.tgz -C /apps/
root@ubuntu2204:~# ll /apps/
total 12
drwxr-xr-x  3 root root 4096 Jan  9 13:19 ./
drwxr-xr-x 20 root root 4096 Jan  9 13:18 ../
drwxr-xr-x  2 root root 4096 Jan  9 13:19 harbor/
root@ubuntu2204:~# 

在这里插入图片描述
通过harbor.yml install.sh 初始部署和启动 Harbor
官方文档:https://goharbor.io/docs/2.7.0/install-config/configure-yml-file/

#查看harbor主目录,如果没有特殊要求直接执行启动脚本install.sh也是可以的。
root@ubuntu2204:~# ls /apps/harbor/
common.sh  harbor.v2.6.3.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare
root@ubuntu2204:~# 
#修改配置harbor配置文件
root@ubuntu2204:/apps/harbor# cp harbor.yml.tmpl harbor.yml  #因为harbor配置文件是yml文件,所以需要改名
root@ubuntu2204:/apps/harbor# vim harbor.yml

#只需要修改下面两行
hostname = 10.0.0.223 #修改此行,指向当前主机IP 或 FQDN,建议配置IP
harbor_admin_password = 123456 #默认用户/密
码:admin/Harbor12345 ;修改此行指定harbor登录用户admin的密码,123456方便实验,生产环境中需要复杂一些
#可选项
ui_url_protocol = http #默认即可,如果修改为https,需要指定下面证书路径
ssl_cert = /data/cert/server.crt #默认即可,https时,需指定下面证书文件路径
ss_cert_key = /data/cert/server.key #默认即可,https时,需指定下面私钥文件路径



#运行 harbor 安装脚本,先安装Python,在运行install.sh
root@ubuntu2204:~# docker ps      #运行harbor安装脚本之前的容器情况
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES



root@ubuntu2204:~# cat -n  /apps/harbor/install.sh |tail 
   109	then
   110	    warn "
   111	    Notary will be deprecated as of Harbor v2.6.0 and start to be removed in v2.8.0 or later.
   112	    You can use cosign for signature instead since Harbor v2.5.0.
   113	    Please see discussion here for more details. https://github.com/goharbor/harbor/discussions/16612"
   114	fi
   115	
   116	$DOCKER_COMPOSE up -d         #可以看出harbor是docker-compose执行文件启动,只是这个文件不需要我们编写
   117	
   118	success $"----Harbor has been installed and started successfully.----"

root@ubuntu2204:~# cat -n  /apps/harbor/install.sh |tail -30 |head 
    89	fi
    90	
    91	./prepare $prepare_para    #在启动之前脚本./prepare对harbor进行了初始化,install sh脚本调用了prepare脚本
    92	echo ""
    93	
    94	if [ -n "$DOCKER_COMPOSE ps -q"  ]
    95	    then
    96	        note "stopping existing Harbor instance ..." 
    97	        $DOCKER_COMPOSE down -v
    98	fi

root@ubuntu2204:/apps/harbor# ls
common.sh  harbor.v2.6.3.tar.gz  harbor.yml  harbor.yml.tmpl  install.sh  LICENSE  prepare
root@ubuntu2204:/apps/harbor# ./install.sh 

[Step 0]: checking if docker is installed ...

Note: docker version: 20.10.12

[Step 1]: checking docker-compose is installed ...

Note: docker-compose version: 1.25.3

[Step 2]: loading Harbor images ...
。。。。。。。。。。。。。。。       #如果不注释https,会报错
[Step 3]: preparing environment ...

[Step 4]: preparing harbor configs ...
prepare base dir is set to /apps/harbor
Error happened in config validation...
ERROR:root:Error: The protocol is https but attribute ssl_cert is not set

root@ubuntu2204:/apps/harbor# vim harbor.yml    #对https进行注释
# https related config
#https:
  # https port for harbor, default is 443
  # port: 443
  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

root@ubuntu2204:/apps/harbor# docker ps  ##安装harbor后会自动开启很多相关容器
CONTAINER ID   IMAGE                                COMMAND                  CREATED          STATUS                             PORTS                                   NAMES
a7d4aeb8ed02   goharbor/harbor-jobservice:v2.6.3    "/harbor/entrypoint.…"   8 seconds ago    Up 3 seconds (health: starting)                                            harbor-jobservice
26831813e904   goharbor/nginx-photon:v2.6.3         "nginx -g 'daemon of…"   8 seconds ago    Up 6 seconds (health: starting)    0.0.0.0:80->8080/tcp, :::80->8080/tcp   nginx
ada3b996e4f0   goharbor/harbor-core:v2.6.3          "/harbor/entrypoint.…"   8 seconds ago    Up 7 seconds (health: starting)                                            harbor-core
8c231c3ed0d4   goharbor/harbor-db:v2.6.3            "/docker-entrypoint.…"   11 seconds ago   Up 8 seconds (health: starting)                                            harbor-db
a297e30ec32e   goharbor/redis-photon:v2.6.3         "redis-server /etc/r…"   11 seconds ago   Up 8 seconds (health: starting)                                            redis
ec9ec9df5b98   goharbor/harbor-portal:v2.6.3        "nginx -g 'daemon of…"   11 seconds ago   Up 8 seconds (health: starting)                                            harbor-portal
6fdd4025580d   goharbor/harbor-registryctl:v2.6.3   "/home/harbor/start.…"   11 seconds ago   Up 9 seconds (health: starting)                                            registryctl
16305dbc1cdf   goharbor/registry-photon:v2.6.3      "/home/harbor/entryp…"   11 seconds ago   Up 9 seconds (health: starting)                                            registry
8b42da25ce87   goharbor/harbor-log:v2.6.3           "/bin/sh -c /usr/loc…"   12 seconds ago   Up 11 seconds (health: starting)   127.0.0.1:1514->10514/tcp               harbor-log
root@ubuntu2204:/apps/harbor# 



在这里插入图片描述
验证是否安装成功
在这里插入图片描述
在这里插入图片描述

2.4 设置harbor开机自启动

通过 rc.local实现harbor开机自启动

root@ubuntu2204:~# vim /etc/rc.local
root@ubuntu2204:~# cat /etc/rc.local
#!/bin/bash
cd /apps/harbor
/usr/local/bin/docker-compose up
root@ubuntu2204:~# chmod +x /etc/rc.local
root@ubuntu2204:~# 

3 Harbor配置HTTPS服务

Harbor 不提供任何证书,在 1.9.x 之前(包括 1.9.x)的版本中,默认情况下,Harbor 使用 HTTP 来处理请求。可以使用由受信任的第三方 CA 签名的证书,也可以使用自签名证书,让CA对服务器证书和客户端证书进行签名。
大楷步骤:DNS 记录指向–>运行 Harbor 的主机生成证书颁发机构CA–>生成服务器证书–>向 Harbor 和 Docker 提供证书–>部署或重新配置Harbor–>验证 HTTPS 连接
知识回顾
在这里插入图片描述

在这里插入图片描述
HTTP 会面临中间人攻击,在生产环境中,最好使用 HTTPS。要配置 HTTPS,必须创建 SSL 证书。HTTP协议使用SSL进行安全通信时,称为安全HTTP,简记为HTTPS。

DNS 记录指向您运行 Harbor 的主机

[root@localhost ~]# hostname -I
10.0.0.202 
[root@localhost ~]# vim  /etc/hosts
#插入如下内容 
10.0.0.223 www.harbor.com
[root@localhost ~]# curl www.harbor.com

生成证书颁发机构CA
在生产环境中,应从 CA 获取证书。在测试或开发环境中,可以生成自己的 CA。若要生成 CA 证书,运行以下命令。
1,生成 CA 证书私钥。

root@ubuntu2204:~# openssl genrsa -out ca.key 4096 
root@ubuntu2204:~# ls
ca.key  harbor-offline-installer-v2.6.3.tgz  snap

2,生成 CA 自签名证书。

root@ubuntu2204:~# openssl req -x509 -new -nodes -sha512 -days 3650 \
>  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=www.harbor.com" \  #这里填写域名
>  -key ca.key \
>  -out ca.crt
root@ubuntu2204:~# ls
ca.crt  ca.key  harbor-offline-installer-v2.6.3.tgz  snap

生成Harbor服务器证书
证书通常包含如.crt .key yourdomain.com.crt yourdomain.com.key文件
1,生成Harbor服务器私钥。

root@ubuntu2204:~# openssl genrsa -out www.harbor.com.key 4096
root@ubuntu2204:~# ls
ca.crt  harbor-offline-installer-v2.6.3.tgz  www.harbor.com.key
ca.key  snap

2,生成证书签名请求 (CSR)。

root@ubuntu2204:~# openssl req -sha512 -new \
> >     -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=www.harbor.com" \
> >     -key www.harbor.com.key \
> >     -out www.harbor.com.csr
req: Use -help for summary.
root@ubuntu2204:~# ls
ca.crt  harbor-offline-installer-v2.6.3.tgz  -out  -subj
ca.key  -key                                 snap  www.harbor.com.key



3,生成 x509 v3 扩展文件。
无论使用 FQDN 还是 IP 地址连接到 Harbor 主机,都必须创建此文件,以便可以为 Harbor 主机生成符合使用者备用名称 (SAN) 和 x509 v3 扩展要求的证书。替换条目以反映您的域。DNS。

root@ubuntu2204:~# cat > v3.ext <<-EOF
> authorityKeyIdentifier=keyid,issuer
> basicConstraints=CA:FALSE
> keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
> extendedKeyUsage = serverAuth
> subjectAltName = @alt_names
> 
> [alt_names]
> DNS.1=harbor.com       #域名
> DNS.2=harbor
> DNS.3=www.harbor.com   #hostname主机名
> EOF
root@ubuntu2204:~# ls
ca.crt                               -key  -subj
ca.key                               -out  v3.ext  #X509 V3扩展文件
harbor-offline-installer-v2.6.3.tgz  snap  www.harbor.com.key

4,使用该文件为 Harbor 主机生成证书。v3.ext,将 CRS 和 CRT 文件名中的 替换为 Harbor 主机名。即给harbor服务器颁发证书

root@ubuntu2204:~# openssl x509 -req -sha512 -days 3650 \
>     -extfile v3.ext \
>     -CA ca.crt -CAkey ca.key -CAcreateserial \
>     -in www.harbor.com.csr \
>     -out www.harbor.com.crt

向 Harbor 和 Docker 提供证书
1,将服务器证书和密钥复制到 Harbor 主机上的证书文件夹中。

root@ubuntu2204:~# mkdir -p /data/cert
root@ubuntu2204:~# cp www.harbor.com.crt /data/cert/
root@ubuntu2204:~# cp www.harbor.com.key /data/cert/

2,Docker 守护程序将文件解释为 CA 证书,将文件解释为客户端证书

root@ubuntu2204:~# openssl x509 -inform PEM -in www.harbor.com.crt -out www.harbor.com.cert

3,将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。必须先创建相应的文件夹。

root@ubuntu2204:~# mkdir -p /etc/docker/certs.d/www.harbor.com/
root@ubuntu2204:~# cp www.harbor.com.key /etc/docker/certs.d/www.harbor.com/ root@ubuntu2204:~# cp ca.crt  /etc/docker/certs.d/www.harbor.com/ 
root@ubuntu2204:~# cp www.harbor.com.cert /etc/docker/certs.d/www.harbor.com/

4,重新启动 Docker 引擎

root@ubuntu2204:~# systemctl restart docker 
root@ubuntu2204:~# tree /etc/docker/certs.d/
/etc/docker/certs.d/
└── www.harbor.com
    ├── ca.crt
    ├── www.harbor.com.cert
    └── www.harbor.com.key

1 directory, 3 files
root@ubuntu2204:~# 

部署或重新配置Harbor
已经使用 HTTP 部署了 Harbor,并希望将其重新配置为使用 HTTPS,执行以下步骤。

root@ubuntu2204:~# ls /apps/harbor/
common     docker-compose.yml    harbor.yml       install.sh  prepare
common.sh  harbor.v2.6.3.tar.gz  harbor.yml.tmpl  LICENSE
root@ubuntu2204:~# cd  /apps/harbor/
root@ubuntu2204:/apps/harbor# vim harbor.yml

:

1,运行脚本以启用 HTTPS。


root@ubuntu2204:~# cd /apps/harbor/
root@ubuntu2204:/apps/harbor# ./prepare 
prepare base dir is set to /apps/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
loaded secret from file: /data/secret/keys/secretkey
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir
root@ubuntu2204:/apps/harbor# 


2,如果 Harbor 正在运行,请停止并删除现有实例。镜像数据保留在文件系统中,因此不会丢失任何数据。

root@ubuntu2204:/apps/harbor# docker-compose down -v
Stopping harbor-db     ... done
Stopping harbor-portal ... done
Stopping registryctl   ... done
Stopping harbor-log    ... done
Removing harbor-jobservice ... done
Removing nginx             ... done
Removing harbor-core       ... done
Removing harbor-db         ... done
Removing redis             ... done
Removing harbor-portal     ... done
Removing registryctl       ... done
Removing registry          ... done
Removing harbor-log        ... done
Removing network harbor_harbor

3,重新启动Harbor:

oot@ubuntu2204:/apps/harbor# docker-compose up -d
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registry      ... done
Creating registryctl   ... done
Creating harbor-db     ... done
Creating harbor-portal ... done
Creating redis         ... done
Creating harbor-core   ... done
Creating harbor-jobservice ... done
Creating nginx             ... done

验证 HTTPS 连接

[root@localhost ~]# curl www.harbor.com
<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx/1.22.0</center>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
验证Docker客户端登录

root@ubuntu2204:~# docker login www.harbor.com 
Username: admin
Password: 
Error response from daemon: Get "https://www.harbor.com/v2/": Get "https://10.0.0.223/service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry": x509: cannot validate certificate for 10.0.0.223 because it doesn't contain any IP SANs    #报错,可以通过一下步骤解决
root@ubuntu2204:~# 

https://blog.csdn.net/min19900718/article/details/87920254?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167323654116800186594372%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=167323654116800186594372&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-2-87920254-null-null.142v70control,201v4add_ask&utm_term=ip%20sans&spm=1018.2226.3001.4187

4 Harbor管理

身份认证
在数据库身份验证模式下,用户帐户存储在本地数据库中。默认情况下,只有 Harbor 系统管理员可以创建用户帐户以将用户添加到 Harbor。
如果启用自助注册选项,用户可以在 Harbor 中自行注册。默认情况下,自助注册处于停用状态。如果启用自助注册,则未注册的用户可以通过单击“Harbor 登录”页面中的“注册帐户”来注册 Harbor 帐户。
在这里插入图片描述

用户管理
Harbor 通过项目管理镜像。通过将用户包含在项目中并为其分配不同角色,可以向用户提供对这些映像的不同访问权限。
按角色划分用户权限,系统管理员拥有项目的所有权限。
在这里插入图片描述

用户创建
在这里插入图片描述
在这里插入图片描述
项目管理
Harbor 中的项目包含应用程序的所有存储库。在创建项目之前,无法将映像推送到 Harbor。基于角色的访问控制 (RBAC) 应用于项目,以便只有具有相应角色的用户才能执行某些操作。
在这里插入图片描述

项目配额
默认情况下,所有项目都有无限的存储使用配额。
选择“项目配额”视图–>若要在单个项目上设置配额,请选择该项目,然后单击“修改”。
在这里插入图片描述

垃圾回收
可以从 Harbor 界面的“管理>清理”页面上的“垃圾回收”选项卡上在 Harbor 界面上安排垃圾回收。
在这里插入图片描述

5 使用单机Harbor

5.1 建立项目

在创建项目之前,无法将映像推送到 Harbor。harbor上必须先建立项目,才能上传镜像
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 命令行登录Harbor

oot@ubuntu2204:~# vim /etc/docker/daemon.json 
root@ubuntu2204:~# cat /etc/docker/daemon.json 
{
"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"],   #镜像加速器
"insecure-registries": ["10.0.0.223:80"]      #:80可省略
}
root@ubuntu2204:~# systemctl daemon-reload
root@ubuntu2204:~# systemctl restart docker

待续

6 Harbor高可用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值