docker——docker基本管理(镜像制作三种方式,数据卷和数据卷容器,私有镜像仓库,容器间通信)

1. Docker概述

1.1 云计算框架结构

  • OpenStack生态圈
  • k8s生态圈
    在这里插入图片描述

1.2 docker概述

1.2.1 Docker是什么?

  • 是一种轻量级的“虚拟机”
  • 在Linux容器里运行应用的开源工具

1.2.2 Docker与虚拟机的区别

Docker虚拟机
资源
启动时间短 秒长 几分钟
安全共享内核,不安全系统逻辑隔离,安全
服务一个容器只跑一个服务虚拟机可以运行多个服务

容器不依赖系统,依赖引擎

1.2.3 Docker的使用场景

  • 打包应用程序简化部署
  • 可脱离底层硬件任意迁移
  • 例:服务器从腾讯云迁移到阿里云

1.3 Docker的核心概念及安装方式

1.3.1 Docker核心概念

  • 镜像
    • 一个面向Docker容器引擎的只读模板
  • 容器
    • 从镜像创建的运行实例
  • 仓库
    • 集中保存镜像的地方

1.3.2 CentOS安装Docker的两种方式

  • 使用CURL获得Docker的安装脚本进行安装
  • 使用YUM仓库来安装Docker

2.安装Docker

2.1 安装最新版本Docker依赖版本环境

yum install -y yum-utils device-mapper-persistent-data lvm2   #Lvm2提供存储  
yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo             # docker-ce社区板   免费的

2.2 安装Docker并设置为开机自动启动

yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker

2.3 检查Docker版本查看Docker服务

docker version

3.Docker镜像创建与操作

3.1 docker镜像操作

3.1.1 搜索镜像

docker search关键字

3.1.2 获取镜像

docker pull 仓库名称[:标签]

3.1.3 查看镜像

docker images 仓库名称[:标签]
docker inspect 镜像ID号

3.1.4 添加新标签

docket tag名称[:标签]新名称[:新标签]

3.1.5 删除镜像

docker rmi仓库名称[:标签]
或
docker rmi镜像ID号

3.1.6 存出镜像

docker save o存出文件名 存出的镜像

3.1.7 载入镜像

docker load --input存出文件名
或
docker load <存出文件名

3.1.8 上传镜像

docker push仓库名称[:标签]

3.2 Docker容器操作

3.2.1 创建容器

docker create [选项]镜像运行的程序
  • -i 让容器的标准输入保持打开
  • -t让Docker分配一个伪终端

3.2.2 查看容器运行状态

docker ps [选项]
  • -a列出所有的容器,包括末运行的容器

3.2.3 启动容器

docker start 容器的ID/名称

3.2.4 创建容器并启动执行shell命令

docker run选项镜像运行的程序执行的命令
  • -d在后台进行运行

3.2.5 终止容器

docker stop容器的ID/名称

3.2.6 进入容器

docker exec [选项]容器的ID/名称/bin/bash

3.2.7 导出容器

docker export容器的ID/名称>文件名

3.2.8 导入容器

cat文件名| docker import -生成的镜像名称:标签

3.2.9 删除容器

docker rm [选项]容器的ID/名称

4.Docker镜像

4.1 Docker镜像的分层

在这里插入图片描述

4.2 Docker镜像的创建

4.2.1 Docker镜像

  • 应用发布的标准格式
  • 支撑一个Docker容器的运行

4.3 Docker镜像的创建方法

4.3.1 基于已有镜像创建

将容器里面运行的程序及运行环境打包生成新的镜像

docker commit [选项]容器ID/名称仓库名称:[标签]
  • -m说明信息
  • -a作者信息
  • -p生成过程中停止容器的运行

4.3.2 基于本地模板创建

  • 通过导入操作系统模板文件生成新的镜像
  • 使用wget命令导入为本地镜像
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
  • 导入成功后可查看本地镜像信息
docker images |grep new

4.3.3 基于Dockerfile创建

  • Dockerfile是由一组指令组成的文件
  • Dockerfile结构四部分
    • 基础镜像信息
    • 维护者信息
    • 镜像操作指令
    • 容器启动时执行指令
  • Dockerfile每行支持一条指令, 每条指令可携带多个参数,支持使用以““号开头的注释

4.4 Dockerfile操作指令

指令含义
FROM镜像指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一一个镜像就需要一条FROM指令。
MAINTAINER名字说明新镜像的维护人信息
RUN命令在所基于的镜像上执行命令,并提交到新的镜像中
CMD[“要运行的程序",”参数1 , “参数2“]指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行
EXPOSE端口号指定新镜像加载到Docker时要开启的端口
ENV环境变量变量值设置一个环境变量的值,会被后面的RUN使用
ADD源文件/目录目标文件/目录将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY源文件/目录目标文件/目录将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
VOLUME[“目录"]在容器中创建一个挂载点
USER用户名/UID指定运行容器时的用户
WORKDIR路径为后续的RUN、CMD、ENTRYPOINT指定工作目录
ONBUILD命令指定所生成的镜像作为一个基础镜像时所要运行的命令
HEALTHCHECK健康检查

在这里插入图片描述

5. Docker数据管理

5.1 数据管理操作

  • 方便查看容器内产生的数据
  • 多容器间实现数据共享

5.2 两种管理方式

  • 数据卷(容器和宿主之间的数据共享)
  • 数据卷容器(容器和容器之间的数据共享)

5.2.1 数据卷

  • 数据卷是一个提供容器使用的特殊目录
  • 创建数据卷
docker run -d -v /data1 -v /data2 -name web
httpd:centos
  • 挂载主机目录作为数据卷
docker run -d -v /var/www:/data -name web-1
httpd:centos

5.2.2 数据卷容器

在这里插入图片描述

6.实验

6.1 安装docker

实验步骤
1.先卸载原来版本的docker

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine      

2.需要的安装包

yum install -y yum-utils device-mapper-persistent-data lvm2

3.设置阿里云镜像

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.更新yum软件包索引

yum makecache fast

5.安装docker-CE,安装docker相关的 docker-ce社区 ee企业版

yum -y install docker-ce docker-ce-cli containerd.io

6.启动docker

systemctl start docker

7.设置镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://sno1b9w3.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

8.使用docker version 查看是否安装成功

docker version

9.网络优化 开启路由功能

vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
sysctl -p

10.重启网络

service network restart
systemctl restart docker

11.拉取创建

docker run hello-world

12.查看一下下载的这个hello-world是否安装成功

docker images 

13.卸载docker

卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
删除资源
rm -rf /var/lib/docker

6.2 docker的增删改查

AUFS(联合文件系统)若干层下载
/var/lib/docker   docker的默认工作路径
/var/lib/docker/image/overlay2/repositories.json   #下载文件信息
docker version #查看docker版本
docker search nginx   #搜寻nginx镜像(公有仓库)
docker pull nginx      #下载nginX镜像
docker images #查看下载镜像信息
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
docker inspect image id   #获取镜像信息
docker inspect 7e4d58f0e5f3   
docker inspect nginx:latest
docker inspect nginx:web
docker tag nginx:latest nginx:web   #添加新标签

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
nginx               web                 7e4d58f0e5f3        9 days ago          133MB
docker images | grep nginx
	nginx               latest              7e4d58f0e5f3        9 days ago          133MB
	nginx               web                 7e4d58f0e5f3        9 days ago          133MB
docker rmi ngix:web    #删除带标签镜像   冒号分割名称和标签,
#删除容器不加i,删除镜像加i 

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
nginx               web                 7e4d58f0e5f3        9 days ago          133MB
[root@localhost ~]# docker rmi 7e4d58f0e5f3 
Error response from daemon: conflict: unable to delete 7e4d58f0e5f3 (must be forced) - image is referenced in multiple repositories
#当存在两个标签的时候,镜像是删除不掉的,应该先删除一个标签,在删除镜像
#如果一个镜像对应多个标签别名,则要删除多余的标签,然后才能删除镜像,直接删镜像会报错
docker save -o /opt/nginx nginx:latest   #镜像导出,备份
docker load < /opt/nginx        #导回备份文件

#容器的操作,容器是靠创建出来的
docker ps -a    #查看容器列表
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES   空的
docker create -it nginx:latest /bin/bash             #创建容器
#-i 让容器的标准输入保持打开
#-t 让docker分配一个伪终端
7bcc52df64e2d4778a3bc2f536baffa2ba543da990209a08871d74fcee79ea51
docker ps -a    #查看状态   创建状态
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
7bcc52df64e2        nginx:latest        "/docker-entrypoint.…"   39 seconds ago      Created                                 beautiful_pascal
docker start 7bcc52df64e2   #启动容器
docker ps -a           #up状态
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
7bcc52df64e2        nginx:latest        "/docker-entrypoint.…"   About a minute ago   Up 21 seconds       80/tcp              beautiful_pascal
#80端口为你不暴露端口,不是外部端口
ifconfig      #创建容器时会自动创建一个网卡,作为所有容器的网关与外部通信,172.17.0.1为内部地址
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500       
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
#启动执行命令查看系统更目录
docker pull paigeeworld/centos7
docker create -it paigeeworld/centos7 /bin/bash
docker start e37b665e6baf

docker run centos:7 /bin/bash -c ls /   #为centos:7镜像创建一个容器,载入容器后运行bash,指定操作,执行完成直接关闭,状态是Exited
docker images
centos              7                   7e6257c9f8d8        5 weeks ago         203MB
docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
e37b665e6baf        centos:7            "/bin/bash -c ls /"      43 minutes ago      Exited (0) 43 minutes ago  

docker run -d paigeeworld/centos7 /bin/bash -c "while true;do echo hello;done" #持续在后台执行
docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
ba06cd3324fb        centos:7            "/bin/bash -c 'while…"   3 seconds ago       Up 2 seconds                                    cool_tereshkova

docker stop ba06cd3324fb   #终止运行
docker ps -a 显示nginx容器状态
docker start ba06cd3324fb
docker exec -it ba06cd3324fb /bin/bash      进入容器
docker export ba06cd3324fb > /opt/centos7    导出容器
cat /opt/centos7 | docker import -生成镜像的名称:标签
删除容器
docker rm ba06cd3324fb/名称
容器运行时不可被删除,可停止
有容器时,不能删除镜像
没有容器镜像可以删除
只要有容器在,就不能删除镜像,因为有进程被占用

docker镜像操作

搜索镜像 docker search 关键词
获取镜像 docker pull 仓库名称[:标签]
查看镜像 docker images 仓库名称[:标签]
		 docker inspect 镜像ID号
添加新标签 docker rmi 仓库名称[:标签]  或  docker rmi 镜像ID号
存出镜像 docker save -o 存出文件名 存出的镜像
载入镜像 docker load < 存出文件名
上传镜像 docker push 仓库名称[:标签]

docker容器操作

创建容器 docker create [选项]镜像运行的程序
-i 让容器的标准输入保持打开
-t 让docker分配一个伪终端
查看容器运行状态 docker ps [选项]
-a 列出所有的容器,包括未运行的容器
启动容器 docker start 容器的id/名称
创建容器并启动执行shell命令 docker run [选项]镜像运行的程序 执行的命令
-d 在后台进行运行
终止容器 docker stop 容器的ID/名称
进入容器 docker exec [选项]容器的ID/名称 /bin/bash
导出容器 docker export 容器的ID/名称 > 文件名
删除容器 docker rm [选项]容器的ID/名称

6.3 docker镜像的分层——镜像制作三种方式

6.3.1 基于已有镜像创建

将容器里面运行的程序及运行环境打包生成新的镜像
docker commit [选项] 容器的ID/名称 仓库名称:[标签]
-m 说明信息
-a 作者信息
-p 生成过程中停止容器的运行

[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables -t nat -F
[root@localhost ~]# docker create -it centos:7 /bin/bash
c74040a080d88c953f60f8e373cdacdaff8eee2218cd30fe9b531e749f5b25b1
[root@localhost ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c74040a080d8        centos:7            "/bin/bash"         27 seconds ago      Created                                 cranky_fermi
[root@localhost ~]# docker start c74040a080d8
c74040a080d8
[root@localhost ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
c74040a080d8        centos:7            "/bin/bash"         About a minute ago   Up 4 seconds                            cranky_fermi
[root@localhost ~]# docker commit -m "new" -a "awei" c74040a080d8 awei:test  #创建镜像
sha256:7839f4b842e9877482b1ad50daa5524bb670d4b7c362fe8f87b68ac40bf1aa27
[root@localhost ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c74040a080d8        centos:7            "/bin/bash"         4 minutes ago       Up 3 minutes                            cranky_fermi
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
awei                test                7839f4b842e9        16 seconds ago      203MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB

6.3.2 基于本地模板创建

通过导入操作系统模板文件生成新的镜像
使用wget命令导入为本地镜像
wget http://download.openvz.org/template/precreates/debian-7.0-x86-minimal.tar.gz
导入成功后可查看本地镜像信息
docker images |grep new

[root@localhost opt]# ls
debian-7.0-x86-minimal.tar.gz
[root@localhost opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - zhou:new    #
sha256:c430cd15100e567b4dd77ff9e2c99a86470b7bc66b5efb3f15a9a2b6b8726947
[root@localhost opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zhou                new                 c430cd15100e        26 seconds ago      215MB
[root@localhost opt]# docker images | grep new
zhou                new                 c430cd15100e        8 minutes ago       215MB

6.3.3 基于Dockerfile创建

Dockerfile是由一组指令组成的文件
Dockerfile结构四部分
基础镜像信息
维护者信息
镜像操作指令
容器启动时执行指令
Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以#号开头的注释

[root@localhost ~]# mkdir apache
[root@localhost ~]# cd apache/
[root@localhost apache]# vim Dockerfile
FROM centos:7
MAINTAINER ZHOUWEI
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
[root@localhost apache]# vim index.html
<h1>this is ky03 web</h1>
[root@localhost apache]# vim run.sh
#!/bin/bash                                ####一定要加环境
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
[root@localhost apache]# ls
Dockerfile  index.html  run.sh
[root@promote apache]# docker build -t httpd:centos .
[root@promote apache]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               centos              d243fc89687b        58 seconds ago      419MB
[root@localhost apache]# docker run -d -p 2000:80 httpd:centos 
[root@localhost apache]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
42e62bdd2672        httpd:centos        "/run.sh"           5 seconds ago       Up 4 seconds        0.0.0.0:2000->80/tcp   stoic_easley
访问http://192.168.200.50:2000/

6.4 docker数据卷

docker pull centos
[root@localhost apache]# cd /var/www            #宿主机一开始没有这个目录
-bash: cd: /var/www: 没有那个文件或目录
[root@localhost apache]# docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash   #创建一个web1容器,宿主机的/var/www挂载容器中的data1,启用binbash环境
[root@3367c347298c /]# ls
anaconda-post.log  data1  etc   lib    media  opt   root  sbin  sys  usr
bin                dev    home  lib64  mnt    proc  run   srv   tmp  var
[root@3367c347298c /]# cd data1/
[root@3367c347298c data1]# ls
[root@3367c347298c data1]# touch abc.txt
[root@localhost ~]# cd /var/www/
[root@localhost www]# ls
abc.txt
[root@localhost www]# touch def.txt   #在宿主机上创建文件能被容器识别,在容器上创建文件能被宿主机识别
[root@localhost www]# ls
abc.txt  def.txt
[root@3367c347298c data1]# ls
abc.txt  def.txt

6.5 docker数据卷容器

[root@localhost apache]#  docker run --name web100 -v /data1 -v /data2 -it centos:7 /bin/bash   #创建容器web100
[root@5ccd3561d2d9 /]# ls
anaconda-post.log  data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                data2  etc  lib   media  opt  root  sbin  sys  usr
[root@localhost www]# docker run -it --volumes-from web100 --name web99 centos:7 /bin/bash #创建容器web99挂载到web10上
[root@0c76427f87a8 /]# ls
anaconda-post.log  data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                data2  etc  lib   media  opt  root  sbin  sys  usr
[root@5ccd3561d2d9 /]# cd data1           #在容器上创建文件
[root@5ccd3561d2d9 data1]# touch 123
[root@5ccd3561d2d9 data1]# cd ..
[root@5ccd3561d2d9 /]# cd data2
[root@5ccd3561d2d9 data2]# touch 456
[root@0c76427f87a8 /]# cd data1          #另一个容器查看
[root@0c76427f87a8 data1]# ls
123
[root@0c76427f87a8 data1]# cd ..
[root@0c76427f87a8 /]# cd data2
[root@0c76427f87a8 data2]# ls
456

6.6 私有镜像仓库部署

[root@localhost apache]# docker pull registry
[root@localhost apache]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            latest              2d4f4b5309b1        3 months ago        26.2MB #服务端口是5000端口
[root@localhost apache]# vim /etc/docker/daemon.json 
{
"insecure-registries":["192.168.200.50:5000"],
}
[root@localhost apache]# systemctl restart docker
[root@localhost apache]# systemctl status docker
Active: active (running) since 二 2020-09-22 12:23:47 CST; 40s ago
[root@localhost apache]# docker create -it registry /bin/bash
5c4ce2d275be76eb48ef889e6182c122c1fe2edf5d612468ec5e0e0afb7043e6
[root@localhost apache]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
5c4ce2d275be        registry            "/entrypoint.sh /bin…"   8 seconds ago       Created                                        pedantic_rubin
[root@localhost apache]# docker start 5c4ce2d275be
[root@localhost apache]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
4bc797565c3e21a53fff72641844b19a72df064659ba48a7227c8cabc6ba3f83
[root@localhost apache]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                    NAMES
4bc797565c3e        registry            "/entrypoint.sh /etc…"   32 seconds ago      Up 31 seconds                 0.0.0.0:5000->5000/tcp   kind_bardeen
[root@localhost apache]# docker pull nginx
[root@localhost apache]# docker tag nginx:latest 192.168.200.50:5000/nginx
[root@localhost apache]# docker images
192.168.200.50:5000/nginx   latest              7e4d58f0e5f3        11 days ago         133MB
[root@localhost apache]# curl -XGET http://192.168.200.50:5000/v2/_catalog   #获取私有仓库列表
{"repositories":[]}
[root@localhost apache]# docker push 192.168.200.50:5000/nginx   #上传镜像
[root@localhost apache]# docker pull 192.168.200.50:5000/nginx   #私有仓库下载镜像
[root@localhost apache]# docker run -d -P 192.168.200.50:5000/nginx
2c72b1ebfffe41fb8ce76dc5d624bd18f644b5ab5003fba7fb01eebca7ece94e
[root@localhost apache]# docker ps -a 
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                        PORTS                    NAMES
2c72b1ebfffe        192.168.200.50:5000/nginx   "/docker-entrypoint.…"   8 seconds ago       Up 7 seconds                  0.0.0.0:32768->80/tcp    condescending_curran

6.7 容器间通信

docker run -itd -P --name web1 centos:7 /bin/bash 
docker ps -a
docker run -itd -P --name web2 --link web1:web1 centos /bin/bash //创建并运行容器取名web2,链接到web1和其通信
进web2容器ping web1
[root@promote ~]# docker run -itd -P --name web11 centos:7 
387f16eed583e882db28e93e1678dba617b250d3a74aed52488946d0c397c31a
[root@promote ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
387f16eed583        centos:7            "/bin/bash"              10 seconds ago      Up 10 seconds                                      web11
[root@promote ~]# docker run -itd -P --name web22 --link web11:web11 centos:7 /bin/bash 
9b7cdc5441f5828dc072b1b47f4c1fcd31114d85c00709fe0afc823aa14dc85c
[root@promote ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                         PORTS     
9b7cdc5441f5        centos:7            "/bin/bash"              11 seconds ago       Up 11 seconds                         
[root@promote ~]# docker exec -it 9b7cdc5441f5 /bin/bash
[root@9b7cdc5441f5 /]# ping web11
PING web11 (172.17.0.2) 56(84) bytes of data.
64 bytes from web11 (172.17.0.2): icmp_seq=1 ttl=64 time=0.250 ms
64 bytes from web11 (172.17.0.2): icmp_seq=2 ttl=64 time=0.044 ms
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值