Docker部署、镜像推送至Docker Hub、拉取、运行

  • Docker部署
    • Dockerfile文件内容
      • 文件内容解释
    • 制作镜像
    • 查看镜像
    • 本地运行镜像
  • 镜像推送、拉取、运行
    • 镜像推送
    • 镜像拉取
    • 镜像运行
    • 删除镜像需要注意的问题

Docker部署

1、首先需要通过Maven将项目打包可在本地运行的jar包
2、新建Dockerfile文件【直接New File–》输入DockerFile便能建立】,为了方便后续操作,本文将Dockerfile文件建立target文件夹下

Dockerfile文件内容

# Docker image for springboot file run
# VERSION 0.0.1
# Author: silentwu
# 基础镜像使用java#### 打包代码
FROM java:8
# 作者
MAINTAINER silentwu <silentwbz@163.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为vorcsbine.jar
ADD vorcsbine.jar /vorcsbine.jar
# 运行jar包
# RUN bash -c 'touch /vorcsbine.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/vorcsbine.jar"]

文件内容解释

VOLUME /tmp

可选项,VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。如若设计到文件相关操作,需要设置本配置项,/tmp目录用于存储Docker数据文件。

ADD vorcsbine.jar /vorcsbine.jar

将jar包添加到容器中并更名为vorcsbine.jar,根据你当前jar包路径设置即可。

ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/vorcsbine.jar"]

因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录,项目的 jar 文件作为“vorcsbine.jar” 添加到容器的ENTRYPOINT 执行项目 vorcsbine.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source。如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了

制作镜像

wubaozhangdeMacBook-Pro:target wubaozhang$ docker build -t vorcsbine .
Sending build context to Docker daemon  1.528GB
Step 1/5 : FROM java:8---> d23bdf5b1b1b
Step 2/5 : MAINTAINER silentwu <silentwbz@163.com>---> Running in 757cd8cf3511
Removing intermediate container 757cd8cf3511---> a260f535e5e6
Step 3/5 : VOLUME /tmp---> Running in 6338f383b1b7
Removing intermediate container 6338f383b1b7---> de97b5525493
Step 4/5 : ADD vorcsbine.jar /vorcsbine.jar---> 6fe2feaa8aba
Step 5/5 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/vorcsbine.jar"]---> Running in b5337a432769
Removing intermediate container b5337a432769---> 90f6886714ad
Successfully built 90f6886714ad
Successfully tagged vorcsbine:latest

设置镜像名为vorcsbine,默认的镜像版本为latest

查看镜像

wubaozhangdeMacBook-Pro:target wubaozhang$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
vorcsbine                latest              90f6886714ad        2 minutes ago       1.17GB
silentwu/demo            1.0.0               0f98c6499f7e        4 days ago          660MB
silentwu/silentwu        1.0.0               0f98c6499f7e        4 days ago          660MB
appbaseio/dejavu         latest              fc2748827cf7        10 months ago       230MB
mysql                    5.7                 1e4405fe1ea9        13 months ago       437MB
tomcat                   latest              8973f493aa0a        16 months ago       508MB
zookeeper                latest              eb0a01329223        16 months ago       225MB
hello-world              latest              fce289e99eb9        2 years ago         1.84kB
containerize/elastichd   latest              c2202f76db37        3 years ago         28.1MB
java                     8                   d23bdf5b1b1b        3 years ago         643MB

本地运行镜像

wubaozhangdeMacBook-Pro:target wubaozhang$ docker run -d -p 8090:8090 vorcsbine
4c0aaf6a919f21163b7794eb6af699991f4e7d7d50523c2ed765dad724ed40f2

-d 表示后台运行,-p 用于映射端口 vorcsbine是镜像名

使用docker run 命令每次会创建一个新的容器实例,一个镜像可对应多个容器实例,我们可以通过设置不同端口来实现(这里再创建两个容器实例进行运行)

wubaozhangdeMacBook-Pro:target wubaozhang$ docker run -d -p 8091:8090 vorcsbine
e2c349054bc5ed9a87111e9d24f86bc40ac74d6325b82c93dcb092a546365dea
wubaozhangdeMacBook-Pro:target wubaozhang$ docker run -d -p 8092:8090 vorcsbine
78212d6e55ec4776f0b58e51153604576527de346f7807b02da43a5dc17d9f45

使用docker ps命令来查看运行中的容器 使用docker ps -a命令来查看所有容器,包含没运行的容器实例

wubaozhangdeMacBook-Pro:~ wubaozhang$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
78212d6e55ec        vorcsbine           "java -Djava.securit…"   5 minutes ago       Up 5 minutes        0.0.0.0:8092->8090/tcp                                 nifty_fermi
e2c349054bc5        vorcsbine           "java -Djava.securit…"   5 minutes ago       Up 5 minutes        0.0.0.0:8091->8090/tcp                                 reverent_heyrovsky
4c0aaf6a919f        vorcsbine           "java -Djava.securit…"   9 minutes ago       Up 9 minutes        0.0.0.0:8090->8090/tcp                                 inspiring_bassi

本地有三个端口映射到了Docker的8090端口,这也意味着我们可以使用这三个端口去访问应用。
http://localhost:8090/vorcsbine/
http://localhost:8091/vorcsbine/
http://localhost:8092/vorcsbine/

镜像推送、拉取、运行

镜像制作完毕之后,为了方便日后使用,可以将镜像推送至Docker Hub上

镜像推送

1、使用镜像推送前需要登录Docker Hub账户,没注册的小伙伴们点击此处去注册

2、注册完毕之后,使用docker login登录

wubaozhangdeMacBook-Pro:target wubaozhang$ docker login
Authenticating with existing credentials...
Login Succeeded

我之前由于登录过了,就不用重新输入账户密码。

3、使用docker tag命令给镜像定制版本,为了方便以后查看项目版本,我们需要改动镜像的tag版本,由于我之前上传了0.0.1版本至Docker Hub,为了避免重复,我们这里改成0.0.2版本

wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker tag  vorcsbine silentwu/vorcsbine:0.0.2
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
vorcsbine                latest              90f6886714ad        29 minutes ago      1.17GB
silentwu/vorcsbine       0.0.2               90f6886714ad        29 minutes ago      1.17GB

需要主要的是,由于docker官方镜像仓库默认是以用户名为仓库的,silentwu/vorcsbine:0.0.2的含义便是将vorcsbine:0.0.2镜像推送至silentwu仓库中

4、使用docker push命令进行镜像推送

wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker push silentwu/vorcsbine:0.0.2
The push refers to repository [docker.io/silentwu/vorcsbine]
8a9d72a73ec7: Layer already exists
35c20f26d188: Mounted from silentwu/demo
c3fe59dd9556: Layer already exists
6ed1a81ba5b6: Layer already exists
a3483ce177ce: Layer already exists
ce6c8756685b: Layer already exists
30339f20ced0: Layer already exists
0eb22bfb707d: Layer already exists
a2ae92ffcd29: Layer already exists
0.0.2: digest: sha256:ddd55980532061afab63befcc2bf421894a075df1cccbbb891e161295c4344cc size: 2213

5、镜像推送结果


推送后的镜像默认是public view

镜像拉取

小伙伴后可以安装好Docker后,使用docker pull 命令进行拉取

为了方便测试,我这里先把本地的删除掉,使用docker image rm REPOSITORY:TAG或IMAGE ID

wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
vorcsbine                latest              90f6886714ad        44 minutes ago      1.17GB
silentwu/vorcsbine       0.0.2               90f6886714ad        44 minutes ago      1.17GB
silentwu/silentwu        1.0.0               0f98c6499f7e        4 days ago          660MB
silentwu/demo            1.0.0               0f98c6499f7e        4 days ago          660MB
appbaseio/dejavu         latest              fc2748827cf7        10 months ago       230MB
mysql                    5.7                 1e4405fe1ea9        13 months ago       437MB
tomcat                   latest              8973f493aa0a        16 months ago       508MB
zookeeper                latest              eb0a01329223        16 months ago       225MB
hello-world              latest              fce289e99eb9        2 years ago         1.84kB
containerize/elastichd   latest              c2202f76db37        3 years ago         28.1MB
java                     8                   d23bdf5b1b1b        3 years ago         643MB
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker image rm silentwu/vorcsbine:0.0.2
Untagged: silentwu/vorcsbine:0.0.2
Untagged: silentwu/vorcsbine@sha256:ddd55980532061afab63befcc2bf421894a075df1cccbbb891e161295c4344cc
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
vorcsbine                latest              90f6886714ad        About an hour ago   1.17GB
silentwu/demo            1.0.0               0f98c6499f7e        4 days ago          660MB
silentwu/silentwu        1.0.0               0f98c6499f7e        4 days ago          660MB
appbaseio/dejavu         latest              fc2748827cf7        10 months ago       230MB
mysql                    5.7                 1e4405fe1ea9        13 months ago       437MB
tomcat                   latest              8973f493aa0a        16 months ago       508MB
zookeeper                latest              eb0a01329223        16 months ago       225MB
hello-world              latest              fce289e99eb9        2 years ago         1.84kB
containerize/elastichd   latest              c2202f76db37        3 years ago         28.1MB
java                     8                   d23bdf5b1b1b        3 years ago         643MB

我们发现silentwu/vorcsbine:0.0.2 镜像已经在本地删除

使用docker pull命令开始拉取镜像

wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker pull silentwu/vorcsbine:0.0.2
0.0.2: Pulling from silentwu/vorcsbine
Digest: sha256:ddd55980532061afab63befcc2bf421894a075df1cccbbb891e161295c4344cc
Status: Downloaded newer image for silentwu/vorcsbine:0.0.2
wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
vorcsbine                latest              90f6886714ad        About an hour ago   1.17GB
silentwu/vorcsbine       0.0.2               90f6886714ad        About an hour ago   1.17GB
silentwu/demo            1.0.0               0f98c6499f7e        4 days ago          660MB
silentwu/silentwu        1.0.0               0f98c6499f7e        4 days ago          660MB
appbaseio/dejavu         latest              fc2748827cf7        10 months ago       230MB
mysql                    5.7                 1e4405fe1ea9        13 months ago       437MB
tomcat                   latest              8973f493aa0a        16 months ago       508MB
zookeeper                latest              eb0a01329223        16 months ago       225MB
hello-world              latest              fce289e99eb9        2 years ago         1.84kB
containerize/elastichd   latest              c2202f76db37        3 years ago         28.1MB
java                     8                   d23bdf5b1b1b        3 years ago         643MB

发现已成功拉取

镜像运行

wubaozhangdeMacBook-Pro:vorcsbine wubaozhang$ docker run -d -p 8094:8090 silentwu/vorcsbine:0.0.2
569e8a0d1a0cfb11e8b7598b2d3cbcbe9c9909aedd29eba3967ecafc97e55571

删除镜像需要注意的问题

如果镜像存在正在运行的容器实例,需要先停止容器实例的运行

wubaozhangdeMacBook-Pro:~ wubaozhang$ docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
569e8a0d1a0c        silentwu/vorcsbine:0.0.2   "java -Djava.securit…"   9 minutes ago       Up 9 minutes        0.0.0.0:8094->8090/tcp                                 heuristic_shirley
78212d6e55ec        vorcsbine                  "java -Djava.securit…"   About an hour ago   Up About an hour    0.0.0.0:8092->8090/tcp                                 nifty_fermi
e2c349054bc5        vorcsbine                  "java -Djava.securit…"   About an hour ago   Up About an hour    0.0.0.0:8091->8090/tcp                                 reverent_heyrovsky
4c0aaf6a919f        vorcsbine                  "java -Djava.securit…"   About an hour ago   Up About an hour    0.0.0.0:8090->8090/tcp                                 inspiring_bassi
5bdad1c46b6b        zookeeper

可以看到有四个容器实例正在运行,由于镜像vorcsbine对应三个容器实例,为了方便,我们这里删除silentwu/vorcsbine:0.0.2镜像实例

我们这里先不关闭容器直接删除

wubaozhangdeMacBook-Pro:~ wubaozhang$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
vorcsbine                latest              90f6886714ad        About an hour ago   1.17GB
silentwu/vorcsbine       0.0.2               90f6886714ad        About an hour ago   1.17GB
silentwu/demo            1.0.0               0f98c6499f7e        4 days ago          660MB
silentwu/silentwu        1.0.0               0f98c6499f7e        4 days ago          660MB
appbaseio/dejavu         latest              fc2748827cf7        10 months ago       230MB
mysql                    5.7                 1e4405fe1ea9        13 months ago       437MB
tomcat                   latest              8973f493aa0a        16 months ago       508MB
zookeeper                latest              eb0a01329223        16 months ago       225MB
hello-world              latest              fce289e99eb9        2 years ago         1.84kB
containerize/elastichd   latest              c2202f76db37        3 years ago         28.1MB
java                     8                   d23bdf5b1b1b        3 years ago         643MB
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker image rm 90f6886714ad
Error response from daemon: conflict: unable to delete 90f6886714ad (cannot be forced) - image is being used by running container 569e8a0d1a0c

可以发现报错无法删除,它的意思说我们要删除的镜像存在运行中的容器实例
所以,我们需要先停止容器实例,使用docker stop CONTAINERID命令停止,再进行删除

wubaozhangdeMacBook-Pro:~ wubaozhang$ docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
569e8a0d1a0c        silentwu/vorcsbine:0.0.2   "java -Djava.securit…"   15 minutes ago      Up 15 minutes       0.0.0.0:8094->8090/tcp                                 heuristic_shirley
78212d6e55ec        vorcsbine                  "java -Djava.securit…"   About an hour ago   Up About an hour    0.0.0.0:8092->8090/tcp                                 nifty_fermi
e2c349054bc5        vorcsbine                  "java -Djava.securit…"   About an hour ago   Up About an hour    0.0.0.0:8091->8090/tcp                                 reverent_heyrovsky
4c0aaf6a919f        vorcsbine                  "java -Djava.securit…"   About an hour ago   Up About an hour    0.0.0.0:8090->8090/tcp                                 inspiring_bassi
5bdad1c46b6b        zookeeper                  "/docker-entrypoint.…"   15 months ago       Up 3 days           2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   myzk
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker stop 569e8a0d1a0c
569e8a0d1a0c
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
78212d6e55ec        vorcsbine           "java -Djava.securit…"   About an hour ago   Up About an hour    0.0.0.0:8092->8090/tcp                                 nifty_fermi
e2c349054bc5        vorcsbine           "java -Djava.securit…"   About an hour ago   Up About an hour    0.0.0.0:8091->8090/tcp                                 reverent_heyrovsky
4c0aaf6a919f        vorcsbine           "java -Djava.securit…"   About an hour ago   Up About an hour    0.0.0.0:8090->8090/tcp                                 inspiring_bassi
5bdad1c46b6b        zookeeper           "/docker-entrypoint.…"   15 months ago       Up 3 days           2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   myzk

最后再进行删除

wubaozhangdeMacBook-Pro:~ wubaozhang$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
vorcsbine                latest              90f6886714ad        About an hour ago   1.17GB
silentwu/vorcsbine       0.0.2               90f6886714ad        About an hour ago   1.17GB
silentwu/silentwu        1.0.0               0f98c6499f7e        4 days ago          660MB
silentwu/demo            1.0.0               0f98c6499f7e        4 days ago          660MB
appbaseio/dejavu         latest              fc2748827cf7        10 months ago       230MB
mysql                    5.7                 1e4405fe1ea9        13 months ago       437MB
tomcat                   latest              8973f493aa0a        16 months ago       508MB
zookeeper                latest              eb0a01329223        16 months ago       225MB
hello-world              latest              fce289e99eb9        2 years ago         1.84kB
containerize/elastichd   latest              c2202f76db37        3 years ago         28.1MB
java                     8                   d23bdf5b1b1b        3 years ago         643MB
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker image rm silentwu/vorcsbine:0.0.2
Untagged: silentwu/vorcsbine:0.0.2
Untagged: silentwu/vorcsbine@sha256:ddd55980532061afab63befcc2bf421894a075df1cccbbb891e161295c4344cc
wubaozhangdeMacBook-Pro:~ wubaozhang$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
vorcsbine                latest              90f6886714ad        About an hour ago   1.17GB
silentwu/demo            1.0.0               0f98c6499f7e        4 days ago          660MB
silentwu/silentwu        1.0.0               0f98c6499f7e        4 days ago          660MB
appbaseio/dejavu         latest              fc2748827cf7        10 months ago       230MB
mysql                    5.7                 1e4405fe1ea9        13 months ago       437MB
tomcat                   latest              8973f493aa0a        16 months ago       508MB
zookeeper                latest              eb0a01329223        16 months ago       225MB
hello-world              latest              fce289e99eb9        2 years ago         1.84kB
containerize/elastichd   latest              c2202f76db37        3 years ago         28.1MB
java                     8                   d23bdf5b1b1b        3 years ago         643MB

最后成功删除

引用
Docker部署SpringBoot项目
Docker书籍《深入浅出Docker》
Docker快速入门教程Click me

Docker上部署SpringBoot项目并推送镜像到Docker Hub上---以MacOS为例相关推荐

  1. k8s管理java项目_Kubernetes集群部署项目-部署Java项目(推送镜像

    Kubernetes(简称k8s)是谷歌开源的一套容器化集群管理系统,当下已被众多大厂及中小企业采用,容器化技术是目前的大势所趋. 本套教程k8s版本升级为最新版1.18.0,内容由浅入深,且更加深化 ...

  2. IDEA配置Docker一键部署SpringBoot项目(企业级做法)

    Docker一键部署SpringBoot项目 前言 一.开启Linux的Docker远程访问 1.1 安装vim工具: 1.2 修改`daemon.json`的配置: 1.3 加入配置: 1.4 重新 ...

  3. 【docker系列】docker之部署springboot项目

    目录 一.项目依赖 二.引入docker依赖 三.项目打包 四.编写Dockerfile文件 五.构建镜像 六.启动容器 七.测试 一.项目依赖 本篇主题主要实战如何使用Docker部署springb ...

  4. [基于harbor部署私有仓库] 4 推送镜像到harbor

    目录 1 场景解释 2 配置推送docker 3 推送 3.1 准备 3.2 标记镜像 3.3 登录docker(可省) 3.4 推送镜像 3.5 查看 4 参考 5 你们可能遇到的问题 5.1 se ...

  5. 如何在虚拟主机上部署java项目_如何在购买的虚拟主机上部署java项目

    如何在购买的虚拟主机上部署java项目?要选购的虚拟主机来部署Java新项目,第一步要确保虚拟主机能够支持Java的项目,随后采用ftp客户端软件将Java的项目上传至虚拟主机的主目录下,如此一来就能 ...

  6. docker一键部署springboot项目(三)

    上一篇,大概讲了下早docker中部署redis.tomcat(JavaWeb项目)和nginx,当我们做了那么多,终于部署好一套完整的环境之后,要是移植怎么办,这里呢,就算是docker的好处了吧, ...

  7. Jenkins+Pipline+Docker 自动部署SpringBoot项目流程

    以下所有内容 仅做日常笔记,如有错误 请自行排查 一.运行环境及版本 Ubuntu 20.x.x Docker 20.x Docker-compose 二.Jenkins安装 1.目录结构 服务器上 ...

  8. 通过容器提交镜像(docker commit)以及推送镜像(docker push)笔记

    在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 查看镜像 [root@docker-test1 ~]# docker image ...

  9. 超级详细:公网环境下登录 Docker 仓库: Docker Hub 或 国内阿里镜像仓库!超级解惑!(推送镜像到docker hub 或 国内阿里云镜像仓库)

    文章目录 前言: 1.登录 Docker Hub : ①.注册 或 登录 Docker Hub: ②.创建储存库: ③.开始上传镜像: ④.下载镜像: 2.使用 国内阿里云 镜像仓库: ①.开通 容器 ...

最新文章

  1. java BigDecimal实现精确加减乘除运算
  2. 小白们应当知道的配置系统变量PATH 的小技巧。
  3. 使用OpenGL绘制圆环体(Torus)
  4. 互联网1分钟 |1109
  5. 论文浅尝|简单高效的知识图谱表示学习负样本采样方法
  6. “渠道之王”2.0   百丽携手乐淘的背后
  7. PRML第四章之分类的线性模型
  8. QT出现“d:\Program Files (x86)\SogouInput\Components\”的错误分析
  9. Python 正则表达式匹配中文
  10. MAC中文输入法消失
  11. 基于余弦适应性骨架的差分进化算法
  12. Guided Anchoring:在线稀疏anchor生成方案,嵌入即提2AP | CVPR 2019
  13. 论文笔记之:Co-saliency Detection via A Self-paced Multiple-instance Learning Framework
  14. neon浮点运算_ARM Linux Kernel浮点运算(软浮点、硬浮点)
  15. Android遥控车软件设计,手机APP控制,Wifi遥控小车设计资料分享
  16. VLAN规划原则与建议
  17. python作业:学生成绩表数据包括:学号、姓名,高数、英语和计算机3门课成绩
  18. 安装计算机一级出现appcrash,appcrash,详细教您运行程序出现appcrash错误该如何解决...
  19. 软件测试的基础知识(1)
  20. 【QuartusⅡ设计的bdf文件调用Modelsim仿真的方法】

热门文章

  1. html如何让网页的字变小,网页的字变小了怎么办 网页字体调整方法【图文】
  2. 浅析eBay联盟营销的上下文广告机制
  3. 和数软件新增6项计算机软件著作权登记证书
  4. 2021安徽省高考成绩排名查询,2021年安徽高考成绩排名查询系统,安徽高考位次排名表...
  5. 中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)
  6. php程序员的自白,程序员考试前的内心独白
  7. 系统重启后 sda sdb顺序变化 pv vg lv dm
  8. 原生JS实现黑猩猩测试
  9. java课程表_用Java做个课程表(5)
  10. SAP BP最佳业务实践