千家信息网

详解在Docker容器中运行Spring Boot应用

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配置。另一方面,Spring Boot还具备将代码直接构建为可执行
千家信息网最后更新 2026年11月04日详解在Docker容器中运行Spring Boot应用

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应用

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

  1. Maven: mvn package && java -jar target/spring-boot-docker-0.1.0.jar
  2. 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:8VOLUME /tmpADD spring-boot-docker-0.1.0.jar app.jarRUN 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应用:

  1. VOLUME /tmp创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录
  2. ADD spring-boot-docker-0.1.0.jar app.jar 将应用jar包复制到/app.jar
  3. 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

   springio            com.spotify      docker-maven-plugin      0.2.3              ${docker.image.prefix}/${project.artifactId}        src/main/docker                              /            ${project.build.directory}            ${project.build.finalName}.jar                              

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

  1. imageName指定了镜像的名字
  2. dockerDirectory指定Dockerfile的位置
  3. 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

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

容器 运行 应用 镜像 命令 配置 文件 开发 后台 进程 支持 也就是 代码 另一方面 可以通过 名字 官方 宿主 开发者 插件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 互联网金融监管科技数据 没上市的科技互联网公司 关于新基建和互联网科技 百单互联网科技有限公司 奇士达互联网科技 沃里互联网科技 菲比寻常互联网科技 互联网科技公司有哪些 衡水科技产业互联网平台 互联网金融科技公司干啥的 湖南一路畅行互联网科技 互联网科技人工智能实验室 乌鲁木齐新华智原互联网科技学校 山东有哪些互联网科技公司 本届互联网大会上的黑科技 广州互联网高科技取餐柜 广东猫王互联网科技有限公司电话 瑞安市蟠桃会互联网科技有限公司 互联网 科技节活动 微视频大赛 深圳期待互联网科技 衡水科技产业互联网平台 互联网科技公司的市场部门 团飞科技与伯堂互联网服务平台 互联网科技大赛获奖感言 互联网科技快讯热点 互联网科技包装股 珠海东科互联网科技有限公司 东风日产互联网科技公司叫什么 互联网科技快速发展优美句子
0