博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第一个 spring Boot 应用通过Docker 来实现构建、运行、发布
阅读量:5993 次
发布时间:2019-06-20

本文共 4748 字,大约阅读时间需要 15 分钟。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80630072

1. Docker 简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker image 是用于运行容器化进程的方案,在本文中,我们将构建一个简单的 Spring Boot 应用程序。

2.环境搭建

  • JDK 1.8+
  • Maven 3.0+
  • Docker 最新版。

3.用 Maven 构建项目

3.1 创建目录结构

mkdir -p src/main/java/com/lidong/demo

在linux或者mac系统中。 

这里写图片描述

3.2 创建 pom.xml 文件

4.0.0
com.lidong.demo
lidong-spring-boot-demo
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
1.5.1.RELEASE
UTF-8
UTF-8
1.8
springio
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-maven-plugin
com.spotify
docker-maven-plugin
0.4.13
${docker.image.prefix}/${project.artifactId}
src/main/docker
/
${project.build.directory}
${project.build.finalName}.jar

注意:

  1. Spring Boot Maven plugin 提供了很多方便的功能: 

    1)它收集的类路径上所有 jar 文件,并构建成一个单一的、可运行的jar,这使得它更方便地执行和传输服务。 
    2)它搜索的 public static void main() 方法来标记为可运行的类。 
    3)它提供了一个内置的依赖解析器,用于设置版本号以匹配 Spring Boot 的依赖。您可以覆盖任何你想要的版本,但它会默认选择的 Boot 的版本集。

  2. Spotify 的 docker-maven-plugin 插件是用于构建 Maven 的 Docker Image 

    1)imageName指定了镜像的名字,本例为 springio/lidong-spring-boot-demo 
    2)dockerDirectory指定 Dockerfile 的位置 
    3)resources是指那些需要和 Dockerfile 放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。

4.编写 第一个Spring Boot 应用

编写一个简单的 Spring Boot 应用 :

src/main/java/com/lidong/demo/SampleController.java:

package com.lidong.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;/** * @项目名称:lidong-dubbo * @类名:SampleController * @类的描述: * @作者:lidong * @创建时间:2017/2/19 上午9:34 * @公司:chni * @QQ:1561281670 * @邮箱:lidong1665@163.com */@Controller@SpringBootApplicationpublic class SampleController {
@ResponseBody @RequestMapping(value = "/") String home(){ return "Hello Docker World"; } public static void main(String[] args) { SpringApplication.run(SampleController.class,"--server.port=8081"); }}
  • 类用 @SpringBootApplication @RestController 标识,可用 Spring MVC 来处理 Web 请求。
  • @RequestMapping 将 / 映射到 home() ,并将”Hello Docker World” 文本作为响应。
  • main() 方法使用 Spring Boot 的 SpringApplication.run() 方法来启动应用。

5.运行程序

5.1使用Maven命令
mvn package
  • 1

运行:

java -jar target/lidong-spring-boot-demo-1.0-SNAPSHOT.jar
  • 1

访问项目

如果程序正确运行,浏览器访问 ,可以看到页面 “Hello Docker World.” 字样。

5.2 使用IDEA 插件

这里写图片描述

6.将项目容器化

Docker 使用 Dockerfile 文件格式来指定 image 层,

创建文件 src/main/docker/Dockerfile:

FROM frolvlad/alpine-oraclejdk8:slimVOLUME /tmpADD lidong-spring-boot-demo-1.0-SNAPSHOT.jar app.jarRUN sh -c 'touch /app.jar'ENV JAVA_OPTS=""ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

解释下这个配置文件:

VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录 

项目的 jar 文件作为 “app.jar” 添加到容器的 
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/urandom” 作为 Entropy Source 
构建 Docker Image

执行构建成为 docker image:

mvn package docker:build

如果是在linux 可以建立一个dockerfile文件

然后 docker build -t [你要起的镜像名称]  .(这个点表示当前目录查找Dockerfile)

运行

运行 Docker Image

docker run -p 8081:8081 -t springio/lidong-spring-boot-dem

这里写图片描述

看到这个Spring的图标。就以为这我们在docker 上发布Spring boot 程序已经完成。

接下来去访问在浏览器访问 ,可以看到页面 “Hello Docker World.” 字样。

你可能感兴趣的文章
070102_赌博设计:概率的基本概念,古典概型
查看>>
【转】Faster RCNN 原理
查看>>
centos6.5环境使用RPM包离线安装MariaDB 10.0.20
查看>>
centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解...
查看>>
python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战
查看>>
从新手到专家的过程。
查看>>
QProcess 进程调用
查看>>
DataTable学习笔记2
查看>>
学习笔记之如果有人问你数据库的原理,叫他看这篇文章
查看>>
网络广告假流量盛行,查处有妙招
查看>>
CCF NOI1034 钞票兑换
查看>>
UVA232 UVALive5171 POJ1888 Crossword Answers
查看>>
hadoop 2.73‘s four xml
查看>>
struts2 文件上传
查看>>
将长输入行折叠成若干较短的行
查看>>
【转】每个Java初学者都应该搞懂的六个问题
查看>>
(二)探究本质,WebGIS前端地图显示之地图比例尺换算原理
查看>>
Effective_STL 学习笔记(二十三) 考虑用有序 vector 代替关联容器
查看>>
POI简易帮助文档--给Excel设置样式
查看>>
关于项目中状态定义优化
查看>>