SpringBoot打包成Docker镜像的项目实践

 更新时间:2024年03月08日 11:42:55   作者:万山寒  
Spring Boot和Docker,可以方便地将应用程序部署到不同的环境中,本文主要介绍了SpringBoot打包成Docker镜像的项目实践,具有一定的参考价值,感兴趣的可以了解一下

dockerFile编写

普通dockerFile

FROM java:8
#此处的*为正则表达式,表示以.jar结尾的同步录下的文件(这里的jar是maven打包好的)
COPY *.jar /app.jar

CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

这种方法有缺点:

  • 镜像中的jar包是压缩文件,在容器环境中运行需要解压,造成比较大的开销
  • 将依赖和程序都放在一个层中,更新程序后编译新的镜像效率低。一般来说,依赖是基本不变的,只需要更新程序代码。

spring官方推荐,构建镜像时,不要直接使用压缩的jar,而应该解压后构建镜像。

解压方式打包的dockerFile的编写有版本分界线:springboot-2.3,在2.3以后的版本中,可以使用spring-boot-jarmode-layertools来帮助解压构建。

2.3之前,需要手动分层解压

将spring-boot项目打成jar包

将jar解压到target/dependency

dockerFile文件

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency # jar包解压位置
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.example.MyApplication"]

2.3以后

使用spring-boot-jarmode-layertools,更加方便

# 指定基础镜像,这是分阶段构建的前期阶段
FROM openjdk:8 as builder
# 执行工作目录
WORKDIR application
# 配置参数
ARG JAR_FILE=target/*.jar
# 将编译构建得到的jar文件复制到镜像空间中
COPY ${JAR_FILE} application.jar
# 通过工具spring-boot-jarmode-layertools 从application.jar 中提取拆分后的构建结果
RUN java -Djarmode=layertools -jar application.jar extract

# 正式构建镜像
FROM openjdk:8
WORKDIR application
# 前一阶段从jar中提取除了多个文件,这里分别执行COPY命令将他们复制到镜像空间中,每次COPY都是一个layer
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java","-Duser.timezone=GMT+8","org.springframework.boot.loader.JarLauncher"]

使用dockerFile打包镜像

# '-t' 设置打包镜像tag, '-f' 设置DockerFile文件, '.'选择当前目录
docker build -t test:1.0 -f .\DockerFile . 

到此这篇关于SpringBoot打包成Docker镜像的项目实践的文章就介绍到这了,更多相关SpringBoot打包成Docker镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • docker容器在uos-12038.101上启动报错的解决办法

    docker容器在uos-12038.101上启动报错的解决办法

    这篇文章主要介绍了docker容器在uos-12038.101上启动报错的问题,解决方案是需要在/etc/systemd/system/或者 /usr/lib/systemd/system/
    找到docker.service文件,在ExecStart=/usr/bin/dockerd后面添加 --default-ulimit nofile=65536:65536参数,需要的朋友可以参考下
    2024-03-03
  • 详解docker pull下来的镜像存储在哪里

    详解docker pull下来的镜像存储在哪里

    这篇文章主要介绍了详解docker pull下来的镜像存储在哪里,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Docker使用自定义网桥

    Docker使用自定义网桥

    这篇文章主要为大家详细介绍了Docker使用自定义网桥的相关资料 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • docker配置skywalking 监控springcloud应用的详细步骤

    docker配置skywalking 监控springcloud应用的详细步骤

    本文分步骤给大家讲解docker配置skywalking 监控springcloud应用的方法,感兴趣的朋友一起看看吧
    2025-04-04
  • 使用docker -v 和 Publish over SSH插件实现war包自动部署到docker的操作步骤

    使用docker -v 和 Publish over SSH插件实现war包自动部署到docker的操作步骤

    这篇文章主要介绍了利用docker -v 和 Publish over SSH插件实现war包自动部署到docker的操作步骤,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Docker启动gitlab后22端口被占用如何解决

    Docker启动gitlab后22端口被占用如何解决

    本文主要介绍了Docker启动gitlab后22端口被占用如何解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Docker配置本地镜像与容器的存储位置

    Docker配置本地镜像与容器的存储位置

    最近在学习docker,本文主要介绍了Docker配置本地镜像与容器的存储位置,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Docker 数据卷权限实例详解

    Docker 数据卷权限实例详解

    这篇文章主要介绍了Docker 数据卷权限实例详解的相关资料,在运行Docker 容器的时候需要添加权限,这里就给大家举例说明如何实现,需要的朋友可以参考下
    2016-11-11
  • Docker Compose使用手册之场景、文件与命令详解

    Docker Compose使用手册之场景、文件与命令详解

    DockerCompose是Docker官方的多容器应用管理和编排工具,它简化了多容器应用的部署和管理,支持一键启动、停止服务,配置服务依赖和环境变量,管理网络和卷等,下面小编就和大家详细介绍一下Docker Compose的使用场景、文件与命令吧
    2026-05-05
  • docker 免root权限登陆的解决方案

    docker 免root权限登陆的解决方案

    这篇文章主要介绍了docker 免root权限登陆的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论