简单用例

简单的创建一个工程,实现一个接口即可,然后在pom中添加docker插件,相关代码如下

@SpringBootApplication
@RestController
public class DockerApplication {@RequestMapping("/hello")public String hello() {return "<h1>Hello Spring-Boot Maven Docker</h1>";}public static void main(String[] args) {SpringApplication.run(DockerApplication.class);}
}
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.3</version><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins>
</build>

再创建一个Dockerfile,注意里面的ADD xxx.jar是你使用maven打包之后的jar包的名称,其他的不变

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD quick-docker-1.0-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

最终的目录结构如下

.
├── pom.xml
└── src└── main├── docker│   └── Dockerfile├── java│   └── com│       └── docker│           └── DockerApplication.java└── resources└── application.properties

你也可以直接下载源码https://github.com/vector4wang/spring-boot-quick/tree/master/quick-docker 
运行的效果如下 

使用Docker部署服务

将src文件和pom放在任意文件夹下,执行命令

mvn package docker:build

在打包的过程中比以往多了以下几步

[INFO] Building image vector4wang/quick-docker
Step 1 : FROM frolvlad/alpine-oraclejdk8:slim
Trying to pull repository docker.io/frolvlad/alpine-oraclejdk8 ...
Pulling from docker.io/frolvlad/alpine-oraclejdk8
ff3a5c916c92: Pull complete
51d82ddde372: Pull complete
31b0b3ea6b23: Pull complete
Digest: sha256:52864f95ade9d007fb439f9d396742a104dc1067d32b6837caf6df1e0f1a5dc1---> 7d711dabe19e
Step 2 : VOLUME /tmp---> Running in 04ce9f4dce7d---> f46d6639a6f3
Removing intermediate container 04ce9f4dce7d
Step 3 : ADD quick-docker-1.0-SNAPSHOT.jar app.jar---> 1540566b402c
Removing intermediate container e8139d4f64e5
Step 4 : RUN sh -c 'touch /app.jar'---> Running in ae7be1b36370---> 49a6d6c256ac
Removing intermediate container ae7be1b36370
Step 5 : ENV JAVA_OPTS ""---> Running in ea06fa1e72ff---> af945e1fd8b3
Removing intermediate container ea06fa1e72ff
Step 6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar---> Running in a1b9bed3a100---> d1dcc0ee4b44
Removing intermediate container a1b9bed3a100
Successfully built d1dcc0ee4b44
[INFO] Built vector4wang/quick-docker
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 36.315 s
[INFO] Finished at: 2018-01-18T21:58:53+08:00
[INFO] Final Memory: 32M/77M
[INFO] ------------------------------------------------------------------------
[root@iZ2zejaebtdc3kosrltpqaZ code]# 

Docker启动服务

先来看下服务部署完之后,docker里多了些什么吧,执行docker images 

简单的看到了docker中存在的镜像、标签、镜像ID、已经创建的时间和大小,看下vector4wang/quick-docker 这个是在pom中<imageName>${docker.image.prefix}/${project.artifactId}</imageName>配置的,比较重要,因为它和接下来要讲的将镜像提交到DockerHub有着密切的联系。 
执行docker run -d -p 8080:8080 vector4wang/quick-docker 来启动服务。 
简单解释下这个命令

  • -d 代表后台运行
  • -p 标识宿主机与docker服务的端口映射,注意谁前谁后:【宿主端口:docker内服务端口
  • vector4wang/quick-docker 就是启动镜像的名称,当然了使用IMAGE ID 也是可以的

好了,看下docker是否将服务启动成功,执行docker ps 

很顺利,运行成功了

  • CONTAINER ID 容器ID
  • PORTS宿主与docker内部的服务映射
  • NAMES 容器名称,跟容器ID对应,如果你不指定名称的话,docker会随机给你分配一个name, 名字还是很有意思的 
    接下来,就是验证的时候了,在浏览器输入对应URL 
     
    到此,docker部署springboot服务的过程就结束了,接下来就是将自己开发的镜像推送到DockerHub

DockerHub

推送镜像通俗的说就是类似把代码推送到github一样,这个是把一个完整的应用程序推送到DockerHub,供其他Docker pull与使用。 
首先你需要注册一个账号,很简单不再赘述 
创建仓库的时候,回头看看pom里的配置,两者有着密切的联系 

这个你可以理解成maven里面的依赖jar包的“坐标” 
回到终端,执行docker login 按照提示输入用户名和密码

[root@iZ2zejaebtdc3kosrltpqaZ code]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (vector4wang): vector4wang
Password:
Login Succeeded
[root@iZ2zejaebtdc3kosrltpqaZ code]# 

接下来就是推送的了,执行命令docker push vector4wang/quick-docker:latest 
latest是tag,相当于版本号 
包比较大网络传输的比较慢,等了几分钟过程如下(如果失败就多重试几次) 
 
再来看看DockerHub页面 

注意右边红框的代码,意思就是说,在任何docker执行

docker pull vector4wang/quick-docker
  • 1

就能快速部署并启动一个应用,网络快的话,能达到秒级别的

快速部署

现在来感受下docker的强大之处 
我把docker所有容器和镜像清空,快速的去部署quick-docker服务 

注意看右下角时间,刚刚好一分钟~~~~

最后

Docker的强大之处你也见识了,真的是再一次解放了程序员,让程序员不再关心如何去配置项目需要的环境。接下来我会持续记录学习和使用Docker的过程,并从以下几个问题着手:

  • 什么是Docker
  • Docker常用命令
  • Image和Continer两者的关系
  • Dockerfile的应用
  • 容器的生命周期
  • Docker内部服务的监控与性能调优
  • 。。。

学习Docker之Docker初体验 简单用例---SpringBoot集成Docker的部署、发布与应用相关推荐

  1. PyTorch学习笔记:PyTorch初体验

    PyTorch学习笔记:PyTorch初体验 一.在Anaconda里安装PyTorch 1.进入虚拟环境mlcc 2.安装PyTorch 二.在PyTorch创建张量 1.启动mlcc环境下的Spy ...

  2. Python学习笔记:pandas初体验

    Python学习笔记:pandas初体验 一.安装pandas模块 1.安装Python3.7 注意:必须勾选pip(python install package). 2.配置环境变量 3.下载 pa ...

  3. JeecgBoot学习_Online表单初体验

    JeecgBoot学习Online表单初体验 在这几个地方改起来 在页面属性里选择类型 再建一个商品表 为了使得选择有树形结构 我们修改这两处 备注: 1.字典table 填写树控件对应的表名 { 例 ...

  4. 来一起学习一下vue3.0 初体验---comeon

    vue3.0 初体验 第一步创建项目 第二步对vue项目进行升级 接下来你就可以尽情的开发啊 第一步创建项目 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Ma ...

  5. sentinel接入网关应用_微服务初体验(三):集成Gateway网关和Sentinel限流

    前言 最近笔者在对微服务架构进行学习,参考了各种项目的技术文章.框架文档以及视频网站,最终选择使用Nacos+Dubbo+Gateway+Sentinel来搭建一个项目练手.其中Nacos作为服务的注 ...

  6. ES入门学习:ElasticSearch、Kibana、ik分词器的安装、简单使用及SpringBoot集成

    前言 es是采用Java语言开发,因此,想要安装运行es需要提前准备好jdk环境,关于linux配置jdk在前文linux配置jdk 本文主要介绍es的安装.kibana的安装和简单使用及ik分词器的 ...

  7. 使用Docker for Windows初体验

    这是第二次使用Docker for Windows了. 最近准备研究一下Docker的一些高级特性如Swarm Clusters,需要用到docker-machine,docker-machine目前 ...

  8. 老司机实战Windows Server Docker:1 初体验之各种填坑

    前言 Windows Server 2016正式版发布已经有近半年时间了,除了看到携程的同学分享了一些Windows Server Docker的实践经验,网上比较深入的资料,不管是中文或英文的,都还 ...

  9. 【云原生】Docker 进阶 -- 阿里云服务器安装Docker Compose与初体验

最新文章

  1. 【青少年编程竞赛交流】11月份微信图文索引
  2. 谷歌TF2.0凌晨发布!“改变一切,力压PyTorch”
  3. spring 事务-使用@Transactional 注解(事务隔离级别)
  4. 算法-连续项的最大和问题(最大子数组问题)三种不同解法
  5. 关于如何用od反汇编win32 控制台程序
  6. 基于spring注解AOP的异常处理
  7. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌1.33%
  8. c:forTokens
  9. Gateway WebSSH
  10. Redies安装,修配置,设置密码,
  11. 2021 年“泰迪杯”数据分析技能赛 B 题 肥料登记数据分析
  12. 北京50年代到90年代的春节老照片,终于找全了!
  13. 神奇的量子世界——量子纠缠(Matlab实现)
  14. php支付宝手机网站支付源码,Ecshop 支付宝手机网页支付免费版
  15. 当当网按关键字搜索商品教程
  16. 聊天气泡图片的动态拉伸、适配与镜像
  17. Xubuntu22.04装有道词典:报错has unexpected type “float“(一百四十一)
  18. iOS 免越狱修改微信运动步数
  19. kso经验记录 -- Global .asax各个方法的使用说明!
  20. 瑞盟高精度模数转换器,MS1242,MS1243,

热门文章

  1. React从零开始搭建项目
  2. forever warn: --minUptime not set. Defaulting to: 1000ms
  3. 在ubuntu下使用Vim学习C++
  4. CSS(三):CSS特性与盒子模型
  5. JAVA-超大文件上传-如何上传文件-大文件上传
  6. Java从零开始实现导出excel(一)
  7. 如何重启MySQL服务
  8. Acrel-3000在青岛中冶圣乔维斯南区智能住宅小区的应用
  9. git是什么,git怎么用?
  10. 数据的物理独立性和数据的逻辑独立性