详解如何将Spring Boot应用跑在Docker容器中

 更新时间:2019年07月16日 10:21:46   作者:java互联网架构  
这篇文章主要介绍了详解如何将Spring Boot应用跑在Docker容器中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

日常的Rest服务开发我都会首选SpringBoot,因为它本身的易用性以及自带的各种方便功能、生态等,今天就简单讲一下如何将Spring Boot应用跑在Docker容器中

项目搭建

首先打开Idea,选择初始化一个Spring Boot应用,然后一路回车下去,待Idea下载完依赖,开始编码


这里写一个简单的接口:

@RestController 
@SpringBootApplication 
public class DemoApplication { 
 
  @GetMapping("/hello") 
  public String hello() { 
    return "Hello World"; 
  } 
 
  public static void main(String[] args) { 
    SpringApplication.run(DemoApplication.class, args); 
  } 
} 

然后运行下面的命令验证服务是否正常:

mvn clean package -Dmaven.test.skip=true 
java -jar target/demo-0.0.1-SNAPSHOT.jar 

容器化

下面我们就开始容器化这个简单的Spring Boot应用

创建Dockerfile文件

首先在项目的根目录创建一个Dockerfile文件,主要不要搞成驼峰命名:

From java:8 
 
 
VOLUME /tmp 
 
#将打包好后的Jar文件放到image中 
Add target/demo-0.0.1-SNAPSHOT.jar app.jar 
# change file access and modification times 
RUN bash -c 'touch /app.jar' 
 
EXPOSE 8080 
#容器启动的时候运行Jar文件 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 

构建镜像

接下来就去构建Docker镜像,不过通常这一步都会用Jenkins的去做:

docker build -t demo8 . 

如果看到下面的输出说明执行成功了:

Sending build context to Docker daemon 14.84MB 
Step 1/6 : FROM java:8 
 ---> d23bdf5b1b1b 
Step 2/6 : VOLUME /tmp 
 ---> Using cache 
 ---> 91086d8b7c77 
Step 3/6 : ADD target/demo-0.0.1-SNAPSHOT.jar app.jar 
 ---> d161bed06e8b 
Step 4/6 : RUN bash -c 'touch /app.jar' 
 ---> Running in 9fbaff628989 
 ---> 1fc0498bbb06 
Removing intermediate container 9fbaff628989 
Step 5/6 : EXPOSE 8080 
 ---> Running in a5c44244b267 
 ---> 3b5150c5bdd0 
Removing intermediate container a5c44244b267 
Step 6/6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar 
 ---> Running in b7a3baac9d47 
 ---> 23ef7cc5e1b0 
Removing intermediate container b7a3baac9d47 
Successfully built 23ef7cc5e1b0 
Successfully tagged demo8:latest 

运行镜像

到这一步构建完成后,我们就顺利的开始运行:

docker run -d -p 4000:8080 demo8 

然后curl一下刚才的接口看看是否正常:

± % curl localhost:4000/hello 
Hello World% 

我们看到这里是将4000端口映射到了容器中的8080端口,我们进入容器看一下验证一下:

± % docker ps !10172 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
5f1b7f29a0b6 988ed6f466b5 "java -Djava.secur..." 29 minutes ago Up 29 minutes 0.0.0.0:4000->8080/tcp practical_jones 
± % docker exec -it 5f1b7f29a0b6 /bin/bash 
root@5f1b7f29a0b6:/ curl localhost:8080/hello 
Hello World 

总结

SpringBoot打包后直接生成一个可执行的JAR包,天然就非常适合搭配Docker一起使用,正如本文演示的一样非常简单。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解析Mybatis判断表达式源码分析

    解析Mybatis判断表达式源码分析

    这篇文章主要介绍了Mybatis判断表达式源码分析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • Java 实战项目锤炼之小区物业管理系统的实现流程

    Java 实战项目锤炼之小区物业管理系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+SSM+jsp+mysql+maven实现一个小区物业管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Spring boot集成spring session实现session共享的方法

    Spring boot集成spring session实现session共享的方法

    这篇文章主要介绍了Spring boot集成spring session实现session共享的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Java8 Instant 时间戳实例讲解

    Java8 Instant 时间戳实例讲解

    Instant类是Java8 中补充的一个 时间戳类,nstant 可以使用静态方法 now()或者of()方法来创建一个实例对象,本文通过实例代码讲解Java8 Instant 时间戳,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • SpringBoot+Redis执行lua脚本的5种方式总结

    SpringBoot+Redis执行lua脚本的5种方式总结

    Lua是一种快速、轻量级的脚本语言,广泛应用于各种领域,包括数据库,Redis作为一个内嵌Lua解释器的NoSQL数据库,允许通过Lua脚本在服务器端执行一些复杂的操作,本文给大家介绍了使用SpringBoot Redis执行lua脚本的五种方式,需要的朋友可以参考下
    2023-11-11
  • Java Process类的详解及实例代码

    Java Process类的详解及实例代码

    这篇文章主要介绍了Java Process类的详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java IO文件过滤器对命令设计模式的使用

    Java IO文件过滤器对命令设计模式的使用

    java io流里面使用到了很多的设计模式,最典型的就是装饰模式,还有命令模式,下面分两部分来讲Java IO文件过滤器对命令设计模式的使用,一起看看吧
    2017-06-06
  • Spring实战之Qualifier注解用法示例

    Spring实战之Qualifier注解用法示例

    这篇文章主要介绍了Spring实战之Qualifier注解用法,结合实例形式详细分析了spring Qualifier注解相关配置、定义与使用方法,需要的朋友可以参考下
    2019-12-12
  • SpringBoot在 POM 中引入本地 JAR 包的方法

    SpringBoot在 POM 中引入本地 JAR 包的方法

    在开发 Spring Boot 应用程序时,您可能需要使用本地 JAR 包来添加自定义库或功能,本文将介绍在 Spring Boot 项目的 POM 文件中如何引入本地 JAR 包,感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • java:try...catch跳过异常继续处理循环问题

    java:try...catch跳过异常继续处理循环问题

    这篇文章主要介绍了java:try...catch跳过异常继续处理循环问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论