首页 > 其他分享 >在Docker容器中运行Spring Boot应用

在Docker容器中运行Spring Boot应用

时间:2023-06-27 19:31:53浏览次数:40  
标签:容器 Spring Boot jar Docker docker


Spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配置。另一方面,Spring Boot还具备将代码直接构建为可执行jar包的能力,这个jar包是一个可以独立运行的部署单元。基于以上特性,现在普遍认为Spring Boot提供了一种快速构造微服务(Micro-Service)的能力。

Docker与Spring Boot

Docker是一种Linux容器的实现,Linux容器是基于进程的轻量级资源隔离技术,每一个容器对应操作系统中的一个进程,但是它又会有自己的网络空间、文件系统、PID等。Docker除了实现Linux容器,还使得容器具有“社会化”的功能,用户可以将容器镜像发布在Docker Hub与其他开发者共享、协作。安装Docker的教程请参考官方文档

Spring Boot应用通常被构建为一个可单独执行的jar包,通过java -jar ...运行,但是框架本身并没有提供以服务形式运行在后台的方法,通常需要借助Systemd, Supervisord等进程管理工具来实现。另一方面,虽然应用运行环境非常的简单,但是将他们容器化为Docker容器镜像并运行,对于自动化部署、运维都是非常有利的。

本文将以一个最简单的Spring Boot开发的Web应用为例,讲解如何将其容器化运行。本文的重点是构建Docker镜像、运行Docker容器,关于Spring Boot开发Web应用可以参考Spring Boot应用开发

构建并Spring Boot应用

在应用代码编写完成后,可以直接将其打包并运行:

  • Maven: mvn package && java -jar target/spring-boot-docker-0.1.0.jar
  • Gradle: gradle build && java -jar build/libs/gs-spring-boot-docker-0.1.0.jar

在浏览器地址栏种输入[http://localhost:8080/](http://localhost:8080/)可以访问应用

Dockerfile构建镜像

Docker提供了Dockerfile格式的文件来构建应用镜像,现在开始创建一个Spring Boot应用的Dockerfile:

 

FROM java:8
VOLUME /tmp
ADD spring-boot-docker-0.1.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

java:8是指Docker Hub上官方提供的java镜像,版本号是8也就是jdk1.8,有了这个基础镜像后,Dockerfile可以通过FROM指令直接获取它的状态——也就是在容器中java是已经安装的,接下来通过自定义的命令来运行Spring Boot应用:

  • VOLUME /tmp创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录
  • ADD spring-boot-docker-0.1.0.jar app.jar 将应用jar包复制到/app.jar
  • ENTRYPOINT表示容器运行后默认执行的命令

Dockerfile非常的简单,编辑完成后运行docker构建镜像命令:

 

docker build -t tmy/spring-boot-app .

然后运行Docker容器:

 

docker run -d -p 8080:8080 --name sample-app tmy/spring-boot-app

其中-d表示后台运行容器,这也就自然地解决的Spring Boot不支持后台运行应用程序的问题。-p 8080:8080表示将容器内部的8080端口映射到宿主机器的8080端口,这样就可以通过宿主机器直接访问应用。--name sample-app给容器取一个容易记住的名字方便日后管理。

使用Maven/Gradle创建Docker镜像

为了方便Java开发者创建Docker镜像,Maven/Gradle都提供了响应的插件。

Maven

<properties>
      <docker.image.prefix>springio</docker.image.prefix>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.2.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>

上述pom.xml包含了docker-maven-plugin的配置:

  • imageName指定了镜像的名字
  • dockerDirectory指定Dockerfile的位置
  • resources是指那些需要和Dockerfile放在一起,在构建镜像时使用的文件,一般应用jar包需要纳入

经过以上配置后,运行下列命令可以在本地Docker中创建一个镜像:

$ mvn package docker:build

Gradle

Gradle同样也有支持Docker的插件:

buildscript {
    ...
    dependencies {
        ...
        classpath('se.transmode.gradle:gradle-docker:1.2')
    }
}

group = 'springio'

...
apply plugin: 'docker'

task buildDocker(type: Docker, dependsOn: build) {
  push = true
  applicationName = jar.baseName
  dockerfile = file('src/main/docker/Dockerfile')
  doFirst {
    copy {
      from jar
      into stageDir
    }
  }
}

上述配置和Maven基本类似,执行以下命令构建镜像:

$ gradle build buildDocker

 

https://www.tianmaying.com/tutorial/spring-boot-docker


标签:容器,Spring,Boot,jar,Docker,docker
From: https://blog.51cto.com/nethub/6565130

相关文章

  • dockerhub私有仓库搭建
    1.安装以及使用:#安装sudomkdir/opt/docker/registrysudodockerrun-d-p5000:5000-v/opt/docker/registry:/var/lib/registryregistry用curl查看仓库中的镜像。$curl127.0.0.1:5000/v2/_catalog{"repositories":["tomcat"]}使用dockertag将tomca......
  • 【深入浅出Docker原理及实战】「Docker安装说明」零基础+全方位带你学习探索Docker容
    安装DockerDocker中的容器是一种轻量级的虚拟化技术,它基于镜像运行并具有自己的状态。下面是Docker容器的安装操作。Docker有三种更新频道:stable、test和nightly。官方网站提供了各种环境下的安装指南,主要包括Linux、Windows10和macOS。这里我们侧重点去介绍和分析说明对应......
  • spring mvc 和ajax异步交互完整实例
    spring MVC异步交互demo:1.jsp页面: 1.<%@pagelanguage="java"contentType="text/html;charset=utf-8"2."utf-8"%>3.<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/......
  • 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串
    一、概述    不同格式的JSON串传到后台来实现功能这个是我们经常要做的一件事,本篇博客就给大家介绍四种不同的JSON串传到后台后台如何用@RequestBody解析这些不同格式的JSON串的。二、代码展示需要引用的jar包1.xml配置  Web.xml1.<?xmlversion="1.0"encoding="UTF-8......
  • 基于vue +Java+springboot+element-ui开发的智慧班牌系统源码
    电子班牌系统又称之为智慧班牌,是当前校园数字化信息化建设、文化建设的主流,是校园日常工作安排、校园信息发布、班级文化风采展示、课堂交流、家校互通的重要应用载体。在每个班级门口安装一台电子班牌终端,实现学校日常管理、校园信息化建设数据对接,为学生提供一个德智教育文化环境......
  • docker 安装 influxDB
    1.拉取官方的镜像dockerpullinfluxdb2.启动dockerrun-d-p8083:8083-p8086:8086--expose8090--expose8099--nameinfluxDbServiceinfluxdb-d:deamon,后台启动-p:port,端口映射,宿主机端口:容器内端口;8083是influxdb的web管理工具端口,8086是influxdb的HTTPAPI端口......
  • Spring @Configuration 和@Bean的使用
    http://www.tuicool.com/articles/M3MVr2 虽然2.0版本发布以来,Spring陆续提供了十多个注解,但是提供的这些注解只是为了在某些情况下简化XML的配置,并非要取代XML配置方式。这一点可以从SpringIoC容器的初始化类可以看出: ApplicationContext接口的最常用的实现类是它们......
  • Spring中什么时候用@Resource,@service,及Spring注解@Component、@Repository、@Servic
    参考资料http://crabboy.iteye.com/blog/339840文章正文<context:annotation-config/> <context:component-scanbase-package=”com.eric.spring”> component-scan标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Component、@Repository、@Service、@Controller标签......
  • 使用Spring Boot快速构建应用
    随着Spring4新版本的发布,SpringBoot这个新的子项目得到了广泛的关注,因为不管是Spring4官方发布的新闻稿还是针对首席架构师AdrianColyer的专访,都对这个子项目所带来的生产率提升赞誉有加。 SpringBoot充分利用了JavaConfig的配置模式以及“约定优于配置”的理念,能够极大的简......
  • SpringMVC 史上最全最强详细示例实战教程
    一个简单的入门实例教程该实例的源码和实例中的jar源码所需要的jar 另外一篇关于SpringMVC文件上传,多文件上传 简单注解配置的实例: 一、创建项目:1、建立新的动态web项目:2、为项目命名为:SpringMVC_013、添加tomcat运行时环境\依赖库 如果是MyEclipse的话创建web项目时就不需要......