狂神说Java-- Docker最新超详细版教程通俗易懂 --part01-- 安装docker 等

相关链接

项目Value
https://blog.csdn.net/wei198621/article/details/109015732狂神说Java-- Docker最新超详细版教程通俗易懂 --part01-- 安装docker 等
https://blog.csdn.net/wei198621/article/details/109072891狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等
https://blog.csdn.net/wei198621/article/details/109101495狂神说Java-- Docker最新超详细版教程通俗易懂 --part03-- docker网络 等
https://blog.csdn.net/wei198621/article/details/114684423狂神说Java-- Docker Dockerfile 制作tomcat镜像 并启动测试网站
https://www.bilibili.com/video/BV1og4y1q7M4?p=6狂神说Java Docker最新超详细版教程通俗易懂
https://blog.csdn.net/xiaozecheng/article/details/106145593狂神说Java 对应的文档在下面的目录
https://docs.docker.com/engine/reference/commandline/build/docker 官方命令

【狂神说Java】

docker 常用指令总结

源自:https://blog.csdn.net/xiaozecheng/article/details/106145593

项目Value
docker官网https://www.docker.com/
文档https://docs.docker.com/ Docker的文档是超级详细的!
仓库国外https://hub.docker.com/ 用户名:gousheng8601
仓库国内ali…
帮助命令------------------------------------------
dockerversion #显示docker的版本信息。
dockerinfo #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help#帮助命令
镜像命令------------------------------------------
docker images#查看所有本地主机上的镜像
docker search搜索镜像
docker pull下载镜像 如: docker pull tomcat:8
docker rmi删除镜像 如: docker rmi -f 镜像id
容器命令------------------------------------------
docker container列出所有的容器指令
docker run镜像id 新建容器并启动 docker run -it centos /bin/bash
docker ps列出所有运行的容器 docker container list
docker rm容器id 删除指定容器
docker start容器id #启动容器
docker restart容器id #重启容器
docker stop容器id #停止当前正在运行的容器
docker kill容器id #强制停止当前容器
退出容器------------------------------------------
exit#容器直接退出
ctrl +P +Q#容器不停止退出
删除容器------------------------------------------
docker rm 容器id#删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
docker rm -f $(docker ps -aq)#删除指定的容器
docker ps -a -qxargs docker rm
启动和停止容器的操作------------------------------------------
docker start 容器id#启动容器
docker restart 容器id#重启容器
docker stop 容器id#停止当前正在运行的容器
docker kill 容器id#强制停止当前容器
常用其他命令------------------------------------------
docker run -d centos后台启动命令
docker logs -ft 容器id查看日志
docker inspect 容器id查看镜像的元数据 方式1 如: docker inspect 86818f0765a8
docker image inspect 容器id查看镜像的元数据 方式2 如: docker image inspect diytomcat:1.1
docker exec -it 55321bcae33d /bin/bash进入当前正在运行的容器
docker cp 55321bcae33d:/java.java /root/(当容器根目录有java.java文件)从容器内拷贝到主机上
镜像快照----------------------------
docker commit -a=“auth” -m=“haha” 容器id tomcat02:1.0将操作过的容器通过commit调教为一个镜像

part03 docker 历史

2010年 成立dotCloud 公司。
2013年,将docker开源。
2014年,docker 1.0 发布。
docker,十分轻巧。

Docker 是基于Go 语言开发的,

项目Value
官网https://www.docker.com/
文档https://docs.docker.com
https://hub.docker.com

part4 Docker能做什么

容器化技术不是一个完整的操作系统。

DevOps
更快速的交付和部署
更便捷的升级和扩容
更简单的系统运维
更高效的计算机资源利用率

part5 docker中的名词

https://www.bilibili.com/video/BV1og4y1q7M4?p=6

镜像:(image) 镜像是模板,用于创建容器服务。
容器:(container) 通过镜像创建的一个或者一组应用。容器理解为一个简易的linux系统
仓库:(repository) 存放镜像的地方。Docker Hub / 阿里云 /

在这里插入图片描述

安装docker注意事项

在这里插入图片描述

Docker的基本组成 image_container_repository

镜像(image):

docker镜像就好比是一个目标,可以通过这个目标来创建容器服务,tomcat镜像==>run==>容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的.
启动,停止,删除,基本命令
目前就可以把这个容器理解为就是一个简易的 Linux系统。

仓库(repository):

仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库。(很类似git)
Docker Hub是国外的。
阿里云…都有容器服务器(配置镜像加速!)

安装Docker

https://download.docker.com/ ---- docke官网 的镜像
在这里插入图片描述https://download.docker.com/linux/centos/8/x86_64/stable/Packages/
在这里插入图片描述

https://mirrors.aliyun.com/docker-ce/
在这里插入图片描述

centOS8 安装具体步骤

https://docs.docker.com/engine/install/centos/

阿里服务器上面执行 yum 操作,不成功,
yum install docker-ce docker-ce-cli containerd.io
提示
“ Problem: package docker-ce-3:19.03.13-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed”

版本不兼容

解决办法01
通过dnf 指令 制定版本 安装
具体的地址是从 https://download.docker.com 找到的制定版本
具体命令:
dnf install https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.3.7-3.1.el8.x86_64.rpm
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-19.03.13-3.el8.x86_64.rpm
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-19.03.13-3.el8.x86_64.rpm

解决办法02
手动下载并安装, wget 网址 ; yum install 上一步下载的rpmbao
在这里插入图片描述

centOS7 安装具体步骤

方法一: 参考 https://blog.csdn.net/wei198621/article/details/114733994
此方法实践起来有问题,个别安装不上

方法二: 自己找包(不推荐)
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/

centOS7 卸载docker

/var/lib/docker 是docker默认的工作路径

1.Uninstall the Docker Engine, CLI, and Containerd packages
yum remove docker-ce docker-ce-cli containerd.io

2. configuration files on your host are not automatically removed
 rm -rf /var/lib/docker     
 rm -rf /var/lib/containerd
 

centOS7 安装docker具体步骤 (失败了)

安装步骤

step1:   卸载旧的版本
 yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
step2 : 需要的安装包
[root@shell38 ~]# yum install -y yum-utils

step3:设置镜像仓库
------国外的不可取
 yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
----国内的 使用阿里国内源安装docker
 yum-config-manager \
 --add-repo \
  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 软件包索引
yum makecache fast

step4: 安装docker  ce : 社区版   ee: 企业版 
----使用最新版会有问题,推荐用指定版本,
yum install docker-ce docker-ce-cli containerd.io
-----指定版本的 docker 
yum install docker-ce-17.03.1 docker-ce-cli-17.03.1 containerd.io
---- 查看有哪些docker 版本
yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64            3:20.10.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:20.10.4-3.el7                     docker-ce-stable
...
...

[root@hell39 ~]# systemctl start docker
Failed to start docker.service: Unit not found.
[root@hell39 ~]# docker version
bash: docker: command not found...

为什么Docker比Vm快

在这里插入图片描述1、docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
2、docker利用的是宿主机的内核,而不需要Guest OS。

在这里插入图片描述

因此,当新建一个 容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引导、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此新建一个docker容器只需要几秒钟

卸载docker(两步)

#1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2. 删除资源
rm -rf /var/lib/docker
#/var/lib/docker 是docker的默认工作路径!

Docker的常用命令

帮助命令
docker version #显示docker的版本信息。
docker info #显示docker的系统信息,包括镜像和容器的数量
docker ** --help #帮助命令
帮助文档的地址:
https://docs.docker.com/engine/reference/commandline/build/

docker 镜像命令

https://www.bilibili.com/video/BV1og4y1q7M4?p=9
镜像命令
docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
docker search 搜索镜像
docker pull 下载镜像 docker image pull
docker rmi 删除镜像 docker image rm

容器基本命令
https://www.bilibili.com/video/BV1og4y1q7M4?p=10

docker 容器命令

docker run [可选参数] image
#参数
--name=Name
-d     后台方式运行
-it    使用交互方式运行,进入容器查看内容
-p     方式一:
     方式一:ip:主机端口:容器端口 
     方式二:主机端口:容器端口 (常用)
     方式三:容器端口
     方式四:

-P     随机执行端口

docker run -it centos /bin/bash
启动并进入centos主机
在这里插入图片描述

退出容器两种方式

exit #容器停止直接退出
ctrl + P +Q #容器不停止退出

docker ps
docker run -it centos /bin/bash

在这里插入图片描述

删除容器

docker rm 容器id   #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
docker rm -f $(docker ps -aq)  #删除指定的容器
docker ps -a -q|xargs docker rm  #删除所有的容器

docker ps -aq   
docker rm -f $(docker ps -aq) 

在这里插入图片描述

启动和停止容器的操作

docker start 容器id	#启动容器
docker restart 容器id	#重启容器
docker stop 容器id	#停止当前正在运行的容器
docker kill 容器id	#强制停止当前容器

11 日志、进程、元数据查看

(以上 20201011 )
(以下 20201012 )
日志、源数据、进程查看
https://www.bilibili.com/video/BV1og4y1q7M4?p=11

后台启动

-- docker run -d  镜像名 
[root@hell39 ~]# docker run -d centos

查看日志

-t            : timestamp 
-f            : follow
--tail number : 要显示的日志的条数 
[root@hell39 ~]# docker logs -f -t --tail 10  d535a3079834

示例: 后台开启一个 centos , 不断打印 Leo , 用docker logs 监控输出

[root@hell39 ~]# docker run -d centos /bin/bash -c "while true; do echo leo ; sleep 2 ; done"
65620cf42bcad98e18a0b4f86fee79da5563b11688e2dfdcf2befba003b00275

[root@hell39 ~]# docker logs -f -t --tail 10  65620cf42bca
2021-03-14T06:30:59.521575020Z leo
2021-03-14T06:31:01.524789667Z leo

查看容器内进程信息 docker top

[root@hell39 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
65620cf42bca   centos    "/bin/bash -c 'while…"   6 minutes ago   Up 6 minutes             heuristic_blackwell
[root@hell39 ~]# docker top 65620cf42bca
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                126257              126232              0                   22:28               ?                   00:00:00            /bin/bash -c while true; do echo leo ; sleep 2 ; done
root                129899              126257              0                   22:35               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 2
[root@hell39 ~]# 

查看容器元数据 docker inspect

docker inspect 容器ID

[root@hell39 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
65620cf42bca   centos    "/bin/bash -c 'while…"   9 minutes ago   Up 9 minutes             heuristic_blackwell
[root@hell39 ~]# docker inspect 65620cf42bca
....   很多的。。。

进入容器

docker exec -it ID /bin/bash
docker attach ID

docker exec

进入容器,新开启一个窗口

[root@hell39 ~]# docker exec -it d535a3079834 /bin/bash

docker attach

进入容器,进入正在运行的命令行,而不是新开启一个窗口

[root@hell39 ~]# docker attach 65620cf42bca
leo
leo

在主机上执行指令: 从容器内CP文件到主机

后期使用-v 容器卷技术,实现自动同步

  1. 进入容器,新建 /home/a124.txt 文件 ,并退出容器
[root@65620cf42bca home]# touch a124.txt
[root@65620cf42bca home]# ls
a124.txt
[root@65620cf42bca home]# pwd
/home
  1. 进入主机页面,执行,将容器/home/a124.txt 文件copy到本地/root目录下的指令
[root@hell39 ~]# docker cp 65620cf42bca:/home/a124.txt /root
[root@hell39 ~]# ll
total 12
-rw-r--r--. 1 root root    0 Mar 13 22:54 a124.txt
...
...

13 命令小结

在这里插入图片描述



  attach      Attach local standard input, output, and error streams to a running container
  #当前shell下 attach连接指定运行的镜像
  build       Build an image from a Dockerfile # 通过Dockerfile定制镜像
  commit      Create a new image from a container's changes #提交当前容器为新的镜像
  cp          Copy files/folders between a container and the local filesystem #拷贝文件
  create      Create a new container #创建一个新的容器
  diff        Inspect changes to files or directories on a container's filesystem #查看docker容器的变化
  events      Get real time events from the server # 从服务获取容器实时时间
  exec        Run a command in a running container # 在运行中的容器上运行命令
  export      Export a container's filesystem as a tar archive #导出容器文件系统作为一个tar归档文件[对应import]
  history     Show the history of an image # 展示一个镜像形成历史
  images      List images #列出系统当前的镜像
  import      Import the contents from a tarball to create a filesystem image #从tar包中导入内容创建一个文件系统镜像
  info        Display system-wide information # 显示全系统信息
  inspect     Return low-level information on Docker objects #查看容器详细信息
  kill        Kill one or more running containers # kill指定docker容器
  load        Load an image from a tar archive or STDIN #从一个tar包或标准输入中加载一个镜像[对应save]
  login       Log in to a Docker registry #
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

14 Docker 安装Nginx



#1. docker search nginx 搜索镜像 search 建议大家去docker搜索,可以看到帮助文档
#2. docker pull nginx 拉取镜像 pull
#3、运行测试
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
➜  ~ docker run -d --name nginx00 -p 3344:80 nginx
75943663c116f5ed006a0042c42f78e9a1a6a52eba66311666eee12e1c8a4502
➜  ~ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
75943663c116        nginx               "nginx -g 'daemon of…"   41 seconds ago      Up 40 seconds       0.0.0.0:82->80/tcp   nginx00
➜  ~ curl localhost:3344   #测试
<!DOCTYPE html>,,,,
可以看到本地启动nginx成功了

leo测试是在aliyun上面进行的需要配置宿主机(阿里云)的3344端口开放
https://jingyan.baidu.com/article/92255446fe79bac51648f497.html

http://47.105.***.247:3344/   可以看到网页正常运行 
配置原理,见下图 

在这里插入图片描述

15 安装tomcat

----   官方使用方式 
docker run -it --rm tomcat:9.0
# 我们之前启动都是后台启动,停止了容器之后,容器还是可以查到,docker run -it --rm ,一般用来测试,用完就删除
----   我们使用的方式  
docker pull tomcat:9.0
docker images
-- 后台方式启动 tomcat:9.0  暴露3301端口 
[root@aliyunleo ~]# docker run -d -p 3301:8080 --name tomcat01 tomcat:9.0
bdea6e54a521479aca14873eee537d996bc9f2361ac3ca8c5b947cd4c41322e5
[root@aliyunleo ~]# docker run -d -p 3301:8080 --name tomcat01 tomcat:9.0
bdea6e54a521479aca14873eee537d996bc9f2361ac3ca8c5b947cd4c41322e5
...
...

docker ps 

新开一个terminal 访问 
curl localhost:3355  
docker exec -it tomcat9.0 /bin/bash

curl localhost:3355
此时没有相应,因为aliyun默认没有开发3355接口


在这里插入图片描述
在这里插入图片描述docker exec -it tomcat9.0 /bin/bash —进入docker容器内
root@6f8537f04c25:/usr/local/tomcat/webapp# —webapp目录为空所以显示页面没有数据
在这里插入图片描述

root@6f8537f04c25:/usr/local/tomcat# cp -r webapps.dist/* webapps
将webapps.dist 目录下的文件copy到webapps目录下

在这里插入图片描述

16 安装es 及 kibana


# es 暴露的端口很多!
# es 十分耗内存 
# es 的数据一般需要放置到安全目录!挂载
# --net somenetwork ? 网络配置
----------官方脚本-----------
# 下载 启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
# 测试一下es是否成功启动
➜  ~ curl localhost:9200

#关闭,添加内存的限制,修改配置文件 -e 环境配置修改
➜  ~ docker rm -f d73ad2f22dd3
----限制使用内存大小方式启动es                                                   
➜  ~ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

docker stats ----查看docker 的内存 CPU 占用情况  
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
[root@aliyunleo ~]# curl localhost:9200
{
  "name" : "0e5912548083",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "acuL70xEQrC0h0YoinKs4w",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}


在这里插入图片描述

在这里插入图片描述

es 暴露很多端口
es 十分耗费内存
es 数据需要放置到安全目录
–net somenetwork ---- 网络配置以后讲


-- 从hub.docker.com 官网上面取到的原始数据是这个  
 $ docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag

 //启动elasticsearch 代码 
 //–net somenetwork ---- 网络配置以后讲,删除它 
 $ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2  
 
 docker ps -a  --- 查看有哪些运行的镜像(包含已经stop的)
 docker stop *** 
 docker rm  ***

 //修改配置文件 -e  环境配置
 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

在这里插入图片描述— 删除当前容器
docker stop 3f45535d8087 && docker rm 3f45535d8087

— 查看当前容器是否删除成功
docker ps -a

//修改配置文件 -e 环境配置
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

docker ps

curl localhost:9200 – 验证网站是否运行

网页方式验证

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
网页方式验证

网页方式验证

在这里插入图片描述

17 可视化工具portainer

docker 的图形化界面管理面板


docker run -d -p 8080:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

//简化相当于  当前宿主机端口 8080 映射 container 9000 端口
docker run -d -p 8080:9000 *** portainer/portainer

//  安装完成后 运行 如下指令查看是否 安装成功
curl localhost:8080

// 开通aliyun 8080 端口  
// 网页访问  

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

18 Docker镜像原理

获取镜像方式
1.下载
2.从朋友处获取
3.自己制作一个 用 DockerFile

UnionFS 联合文件系统

bootfs: 包括Kernel 的最底层的文件系统 ,当系统加载完成,会卸载bootfs
rootfs: 是不同的系统发行版本如centos,ubuntu 等

在这里插入图片描述

19 镜像原理之分层

docker image inspect redis
在这里插入图片描述

20 commit镜像


docker commit 提交容器成为一个新的副本

# 命令和git原理类似
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]


# 1、启动一个默认的tomcat
docker run -d -p 8080:8080 tomcat
# 2、发现这个默认的tomcat 是没有webapps应用,官方的镜像默认webapps下面是没有文件的!
docker exec -it 容器id
# 3、拷贝文件进去

# 4、将操作过的容器通过commit调教为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像。
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker commit -a="kuangshen" -m="add webapps app" 容器id tomcat02:1.0

-------------------------- 详细过程  ----------------------------

docker images 
docker run -it -p 8080:8080 tomcat   -- 启动一个镜像 
docker ps 
docker exec -it 容器id /bin/bash 
cd webapps   -- 查看当前目录无数据 
cd ../webaps.dist   ---  当前目录有数据 
cd .. 
cp -r webapps.dist/*  webapps    //--- 将 webapps.dist 目录下的文件copy到目录 webapps */
cd webapp 
ls       ------ 已经有数据了  

docker commit -a="leo" -m="add webapps app"  containerID  自定义name 
docker commit -a="leo" -m="add webapps app"  893487    tomcat_leo:1.1   
docker images -- 看到 有 tag 为1.2 的tomcat  镜像 


在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值