【Docker环境部署及基础命令操作】

CentOS7安装Docker(使用yum安装)

参考链接:https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.1ec41b11RJ4PKS

#step 1:安装安装必要的一些系统工具
[root@node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
[root@node1 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
[root@node1 ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
[root@node1 ~]# yum makecache fast
#安装的是默认最新版本
[root@node1 ~]# yum install docker-ce -y
# Step 5: 开启Docker服务
#配置docker镜像加速
[root@node1 ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl start docker
[root@node1 ~]# docker info
 Registry Mirrors:
  https://registry.docker-cn.com/
出现该内容表示镜像加速配置成功
如果显示如下内容:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
[root@node1 ~]# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
#从配置文件/etc/sysctl.conf加载内核参数设置
[root@localhost ~]# sysctl -p 


# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

docker基础命令操作

一、镜像操作

1、搜索官方仓库镜像 docker search

[root@node1 ~]# docker search nginx
NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                        18885     [OK]       
unit                                              Official build of NGINX Unit: Universal Web …   8         [OK]       
nginxinc/nginx-unprivileged                       Unprivileged NGINX Dockerfiles                  111                  
nginx/nginx-ingress                               NGINX and  NGINX Plus Ingress Controllers fo…   76                   
nginx/nginx-prometheus-exporter                   NGINX Prometheus Exporter for NGINX and NGIN…   33                   
nginx/unit                                        NGINX Unit is a dynamic web and application …   64                   
nginxinc/nginx-s3-gateway                         Authenticating and caching gateway based on …   1                    
nginx/nginx-ingress-operator                      NGINX Ingress Operator for NGINX and NGINX P…   0                    
nginxinc/amplify-agent                            NGINX Amplify Agent docker repository           1                    
nginx/nginx-quic-qns                              NGINX QUIC interop                              1                    
nginxinc/ingress-demo                             Ingress Demo                                    4                    
nginxproxy/nginx-proxy                            Automated Nginx reverse proxy for docker con…   101                  
nginxproxy/acme-companion                         Automated ACME SSL certificate generation fo…   122                  
bitnami/nginx                                     Bitnami nginx Docker Image                      171                  [OK]
bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   29                   [OK]
ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   97                   
nginxinc/nginmesh_proxy_debug                                                                     0                    
nginxproxy/docker-gen                             Generate files from docker container meta-da…   12                   
nginxinc/mra-fakes3                                                                               0                    
kasmweb/nginx                                     An Nginx image based off nginx:alpine and in…   6                    
rancher/nginx-ingress-controller                                                                  11                   
nginxinc/ngx-rust-tool                                                                            0                    
nginxinc/mra_python_base                                                                          0                    
nginxinc/nginmesh_proxy_init                                                                      0                    
rancher/nginx-ingress-controller-defaultbackend                                                   2                    

参数说明
NAME镜像名称
DESCRIPTION镜像说明
STARS点赞数量
OFFICIAL是否是docker官方发布的
AUTOMATED是否是自动构建的

2、拉取镜像 docker pull

Docker Hub上有大量的高质量的镜像可以用。从Docker镜像仓库获取镜像的命令是docker pull,其命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

docker镜像仓库地址:地址的格式一般是<域名/IP>:[端口号],默认地址是Docker Hub。

仓库名:仓库名是两段式名称,即<用户名>/<软件名>。对于Docker Hub,如果不给出用户名,则默认为library,也就是官方镜像。

一个仓库会包含同一个软件不同版本的镜像, 而标签就常用于对应该软件的各个版本。

根据镜像名称(tag指定版本)拉取镜像

#alpine 版本:构建容器小镜像的发型版本
[root@node1 ~]# docker pull nginx:1.14-alpine
1.14-alpine: Pulling from library/nginx
bdf0201b3a05: Pull complete 
3d0a573c81ed: Pull complete 
8129faeb2eb6: Pull complete 
3dc99f571daf: Pull complete 
Digest: sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
Status: Downloaded newer image for nginx:1.14-alpine
docker.io/library/nginx:1.14-alpine

#标记本地镜像,将其归入某一仓库
[root@node1 ~]# docker tag nginx:1.14-alpine test/nginx:v1

[root@node1 ~]# docker images
REPOSITORY   TAG           IMAGE ID       CREATED       SIZE
nginx        1.14-alpine   8a2fb25a19f5   4 years ago   16MB
test/nginx   v1            8a2fb25a19f5   4 years ago   16MB

#查看镜像的层数
[root@node1 ~]# docker history nginx:1.14-alpine
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
8a2fb25a19f5   4 years ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      4 years ago   /bin/sh -c #(nop)  STOPSIGNAL SIGTERM           0B        
<missing>      4 years ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
<missing>      4 years ago   /bin/sh -c #(nop) COPY file:ebf4f0eb33621cc0…   1.09kB    
<missing>      4 years ago   /bin/sh -c #(nop) COPY file:4c82b9f10b84c567…   643B      
<missing>      4 years ago   /bin/sh -c GPG_KEYS=B0F4253373F8F6F510D42178…   10.5MB    
<missing>      4 years ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.14.2     0B        
<missing>      4 years ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      4 years ago   /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B        
<missing>      4 years ago   /bin/sh -c #(nop) ADD file:2e3a37883f56a4a27…   5.53MB 
#从下载过程中可以看到镜像是由多层存储所构成,下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的ID的前12位。并且下载结束后,给出该镜像完整的sha256的摘要,以确保下载一致性。

3、查看当前主机镜像列表 docker image

[root@node1 ~]#  docker images
REPOSITORY   TAG           IMAGE ID       CREATED       SIZE
nginx        1.14-alpine   8a2fb25a19f5   4 years ago   16MB
test/nginx   v1            8a2fb25a19f5   4 years ago   16MB
#列表包含了仓库名、标签、镜像ID、创建时间以及所占用的空间。
#其中镜像ID则是镜像的唯一标识,一个镜像可以对应多个标签。

[root@node1 ~]# docker image ls
REPOSITORY   TAG           IMAGE ID       CREATED       SIZE
nginx        1.14-alpine   8a2fb25a19f5   4 years ago   16MB
test/nginx   v1            8a2fb25a19f5   4 years ago   16MB
[root@node1 ~]# docker image ls nginx
REPOSITORY   TAG           IMAGE ID       CREATED       SIZE
nginx        1.14-alpine   8a2fb25a19f5   4 years ago   16MB

(1)如果查看镜像的显示结果中出现了没有仓库名,也没有标签,均为的镜像,可能是因为旧的镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了。除了 docker pull 可能导致这种情况, docker build 也同样可以导致这种现象。 由于新旧镜像同名, 旧镜像名称被取消,从而出现仓库名、 标签均为 的镜像。 这类无标签镜像也被称为虚悬镜像 (dangling image) , 可以用下面的命令专门显示这类镜像:

[root@node1 ~]# docker image ls -f dangling=true

一般来说, 虚悬镜像已经失去了存在的价值, 是可以随意删除的, 可以用下面的命令删除。

[root@node1 ~]# docker image prune

(2)为了加速镜像构建、 重复利用资源, Docker 会利用中间层镜像。 所以在使用一段时间后, 可能会看到一些依赖的中间层镜像。 默认的 docker image ls 列表中只会显示顶层镜像, 如果希望显示包括中间层镜像在内的所有镜像的话, 需要加 -a 参数。

[root@node1 ~]# docker image ls -a

4、导出镜像 docker image save

[root@node1 ~]# docker image save nginx > docker-nginx.tar.gz
[root@node1 ~]# ls docker-nginx.tar.gz
docker-nginx.tar.gz

[root@node1 ~]# docker pull ubuntu:latest
[root@node1 ~]# docker image save -o ./ubuntu_nginx.tar.gz ubuntu:latest nginx:1.14-alpine
[root@node1 ~]# ls 
anaconda-ks.cfg  docker-nginx.tar.gz  ubuntu_nginx.tar.gz

注:
#-o:指定导出镜像的位置;
#可以同时导出多个镜像为一个文件;
#指定.tar.gz 可以导出并压缩。 

5、删除镜像 docker image rm

[root@node1 ~]# docker image rm nginx:1.14-alpine
Untagged: nginx:1.14-alpine
Untagged: nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
[root@node1 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    01f29b872827   13 days ago   77.8MB
test/nginx   v1        8a2fb25a19f5   4 years ago   16MB

#也可以使用ID删除镜像
[root@node1 ~]# docker image ls -a
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    01f29b872827   13 days ago   77.8MB
test/nginx   v1        8a2fb25a19f5   4 years ago   16MB
[root@node1 ~]# docker image rm 01f
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:ec050c32e4a6085b423d36ecd025c0d3ff00c38ab93a3d71a460ff1c44fa6d77
Deleted: sha256:01f29b872827fa6f9aed0ea0b2ede53aea4ad9d66c7920e81a8db6d1fd9ab7f9
Deleted: sha256:bce45ce613d34bff6a3404a4c2d56a5f72640f804c3d0bd67e2cf0bf97cb950c
#查看
[root@node1 ~]# docker image ls -a
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
test/nginx   v1        8a2fb25a19f5   4 years ago   16MB

6、导入镜像 docker image load

[root@node1 ~]# docker image load -i ubuntu_nginx.tar.gz 
bce45ce613d3: Loading layer [==================================================>]  80.35MB/80.35MB
Loaded image: ubuntu:latest
Loaded image: nginx:1.14-alpine
[root@node1 ~]# docker images
REPOSITORY   TAG           IMAGE ID       CREATED       SIZE
ubuntu       latest        01f29b872827   13 days ago   77.8MB
nginx        1.14-alpine   8a2fb25a19f5   4 years ago   16MB
test/nginx   v1            8a2fb25a19f5   4 years ago   16MB

7、查看镜像的详细信息 docker image inspect

[root@node1 ~]# docker image inspect ubuntu

二、 容器操作

1、启动容器 docker run

docker run 镜像名
(1)格式
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
(2)options 常用命令选项
-t :打开一个终端,像使用交换机一样使用容器
-i:交互式访问
–name:容器名字
–network:指定网络
–rm:容器一停,自动删除
-d:后台运行容器,返回容器ID;否则会一直占据着终端
-p:端口映射,将容器内服务的端口映射在宿主机的指定端口,格式为:主机(宿主)端口:容器端口
-P: 随机端口映射,容器内部端口随机映射到主机的端口

(3)运行容器

[root@node1 ~]# docker run --name web1 -d -p 8888:80 nginx:1.14-alpine
6a0745591dae815edcda2a42832f00b9040e72ecaec3ff0680f7bdb18621e09a

#查询docker端口映射
[root@node1 ~]# docker port web1
80/tcp -> 0.0.0.0:8888
80/tcp -> [::]:8888

#在运行容器时,交互式进入容器
[root@node1 ~]# docker run --name ubuntu1 -it ubuntu /bin/bash
root@e41a01e5d3a7:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
root@e41a01e5d3a7:/# exit  #退出

(4)查询容器运行状态命令 docker ps

[root@node1 ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS         PORTS                                   NAMES
6a0745591dae   nginx:1.14-alpine   "nginx -g 'daemon of…"   4 minutes ago   Up 4 minutes   0.0.0.0:8888->80/tcp, :::8888->80/tcp   web1

#-a查询所有的容器,包括未运行的容器
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS                     PORTS                                   NAMES
e41a01e5d3a7   ubuntu              "/bin/bash"              2 minutes ago   Exited (0) 2 minutes ago                                           ubuntu1
6a0745591dae   nginx:1.14-alpine   "nginx -g 'daemon of…"   4 minutes ago   Up 4 minutes               0.0.0.0:8888->80/tcp, :::8888->80/tcp   web1
#注:容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态! 

2、停止运行的容器 docker stop/kill

docker stop 关闭运行的容器
docker kill 杀死运行的容器
-s:指定信号,和kill 用法一样;-9 强制停止容器

[root@node1 ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS         PORTS                                   NAMES
6a0745591dae   nginx:1.14-alpine   "nginx -g 'daemon of…"   6 minutes ago   Up 6 minutes   0.0.0.0:8888->80/tcp, :::8888->80/tcp   web1
[root@node1 ~]# docker kill web1
web1
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3、激活关闭的容器 docker start

docker start/restart
格式
docker start [OPTIONS] CONTAINER [CONTAINER…]
Options
-a:附加到当前终端
-i:交互式

[root@node1 ~]# docker start web1
web1
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS         PORTS                                   NAMES
6a0745591dae   nginx:1.14-alpine   "nginx -g 'daemon of…"   8 minutes ago   Up 4 seconds   0.0.0.0:8888->80/tcp, :::8888->80/tcp   web1

4、查看容器的详细信息 docker inspect

[root@node1 ~]# docker inspect web1 | grep -i address
            "LinkLocalIPv6Address": "",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "GlobalIPv6Address": "",
            "IPAddress": "172.17.0.2",
            "MacAddress": "02:42:ac:11:00:02",
                    "IPAddress": "172.17.0.2",
                    "GlobalIPv6Address": "",
                    "MacAddress": "02:42:ac:11:00:02",
[root@node1 ~]# curl 172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

通过当前虚拟机IP+端口号,可在浏览器上访问
在这里插入图片描述

6、 对运行的容器执行指定命令 docker exec

docker exec 或者 docker container exec
格式
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]

options 选项
-d:在后台运行命令
-e:设置环境变量
-i:交互式
-t:打开一个终端

[root@node1 ~]# docker run --name web1 -d nginx:1.14-alpine
27d9def6c05bc9a90e2d55d965b7203d4bfc4553b6f3fff027fe5efb4c89fac6
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS     NAMES
27d9def6c05b   nginx:1.14-alpine   "nginx -g 'daemon of…"   19 seconds ago   Up 19 seconds   80/tcp    web1

[root@node1 ~]# docker exec -it web1 /bin/sh
/ # ls /
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # exit

[root@node1 ~]# docker exec web1 ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

7、 删除容器 docker rm

[root@node1 ~]# docker kill web1
web1
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS                          PORTS     NAMES
27d9def6c05b   nginx:1.14-alpine   "nginx -g 'daemon of…"   2 minutes ago    Exited (137) 4 seconds ago                web1
d48ee683c80e   eea7b3dcba7e        "/docker-entrypoint.…"   4 minutes ago    Exited (0) About a minute ago             web2
e41a01e5d3a7   ubuntu              "/bin/bash"              18 minutes ago   Exited (0) 18 minutes ago                 ubuntu1
[root@node1 ~]# docker rm web1
web1
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                          PORTS     NAMES
d48ee683c80e   eea7b3dcba7e   "/docker-entrypoint.…"   5 minutes ago    Exited (0) About a minute ago             web2
e41a01e5d3a7   ubuntu         "/bin/bash"              18 minutes ago   Exited (0) 18 minutes ago                 ubuntu1

#删除所有容器,-f强制删除
[root@node1 ~]# docker rm -f `docker ps -a -q` 
d48ee683c80e
e41a01e5d3a7
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#删除所有处于终止状态的容器
[root@localhost ~]# docker container prune 

8、容器中管理数据

数据卷是一个可供一个或多个容器使用的特殊目录, 它绕过 UFS, 可以提供很多有用的特性:

  1. 数据卷可以在容器之间共享和重用
  2. 对数据卷的修改会立马生效
  3. 数据卷的更新,不会影响镜像
  4. 数据卷默认会一直存在,即使容器被删除

注意: 数据卷的使用, 类似于 Linux 下对目录或文件进行 mount, 镜像中的被指定为挂载点的目录中
的文件会隐藏掉, 能显示看到的是挂载的数据卷 。

1、创建一个数据卷
[root@node1 ~]# docker volume create my-vol
my-vol
[root@node1 ~]# docker volume ls
DRIVER    VOLUME NAME
local     my-vol

2、查看指定数据卷的信息:
[root@node1 ~]# docker volume inspect my-vol
[
    {
        "CreatedAt": "2023-08-18T08:23:53+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": null,
        "Scope": "local"
    }
]

3、启动一个挂载数据卷的容器:
#在用 docker run 命令的时候, 使用 -v 标记来将数据卷挂载到容器里。 在一次 docker run 中可以挂载多个数据卷。
#下面创建一个名为 web 的容器, 并加载一个数据卷到容器的 /usr/share/nginx/html/ 目录。
[root@node1 ~]# docker run -d -P --name web -v my-vol:/usr/share/nginx/html nginx:1.14-alpine
b5f7c39c110079781f2833554e0f2383c6bdb4654e59948f6e095b75a42dcd1a
[root@node1 ~]# docker inspect web
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                                     NAMES
b5f7c39c1100   nginx:1.14-alpine   "nginx -g 'daemon of…"   53 seconds ago   Up 52 seconds   0.0.0.0:32768->80/tcp, :::32768->80/tcp   web

[root@node1 ~]# docker volume rm my-vol
Error response from daemon: remove my-vol: volume is in use - [b5f7c39c110079781f2833554e0f2383c6bdb4654e59948f6e095b75a42dcd1a]
[root@node1 ~]# docker rm -f web
web
[root@node1 ~]# docker volume rm my-vol
my-vol
#数据卷是被设计用来持久化数据的, 它的生命周期独立于容器, Docker不会在容器被删除后自动删除数据卷, 并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。 如果需要在删除容器的同时移除数据卷。 可以在删除容器的时候使用 docker rm -v 这个命令。

#无主的数据卷可能会占据很多空间, 要清理请使用以下命令:
[root@node1 ~]# docker volume prune

#查看镜像、容器、数据卷所占用的空间
[root@node1 ~]#  docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          3         0         280.5MB   280.5MB (100%)
Containers      0         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值