环境

springboot:2.7.1
jdk:12

前言

最近想着用docker来部署应用,这就意味着,打jar包时,需要指定打包的位置。并且在每次构建时,能够清除掉旧包,存入新包。

步骤

假设你已经有了一个准备部署的项目;就等打包了。

maven配置

在父模块的pom.xml中:
指定start-class(要是项里有多个main方法的话,不指定就会报错)

<properties><java.version>12</java.version><start-class>com.sgy.oceanstars.OceanstarsApplication</start-class>
</properties><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--指定打包时,jar的位置--><outputDirectory>E:\java项目\dockerfile\</outputDirectory><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration><executions><execution><phase>package</phase><goals><goal>repackage</goal></goals></execution></executions></plugin><!--执行clean时,清除掉指定目录的jar--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-clean-plugin</artifactId><version>3.0.0</version><configuration><!--<skip>true</skip>--><!--<failOnError>false</failOnError>--><!--当配置true时,只清理filesets里的文件,构建目录中的文件不被清理.默认是flase.--><excludeDefaultDirectories>false</excludeDefaultDirectories><filesets><fileset><!--要清理的目录位置,这里这里这里这里--><directory>E:\java项目\dockerfile\</directory><!--是否跟随符号链接,默认false--><followSymlinks>false</followSymlinks><!--默认有些文件是不会被清理的,如果设置成false,则全部按照自定义的来处理--><useDefaultExcludes>true</useDefaultExcludes><!--对这些文件进行清理,这里这里这里这里--><includes><include>*.jar</include></includes><!--对这些文件不清理--><!--<excludes><exclude>xxx*</exclude></excludes>--></fileset></filesets></configuration></plugin></plugins>
</build>

上面主要就是配置两个:

  1. 打包时,指定存放目录;
  2. clean时,指定清除的目录和文件;

效果:

是否需要将多个模块打包成一个jar包?

这个问题,下午研究了好久,对比下公司的做法,发现,我们并不需要将jar包,合并成一个包。我们只需要将这些相关的包,放在一个目录下即可:保证依赖关系能够被依赖到即可。

dockerfile打包

编写Dockerfile

文件夹路径:E:\java项目\dockerfile
创建Dockerfile文件

FROM openjdk:12
MAINTAINER yutao
ADD oceanstars-start-1.0.0-SNAPSHOT.jar app.jar
EXPOSE 8080
VOLUME /data
entrypoint java -jar app.jar

FROM openjdk:12,表示本镜像的基础镜像是openjdk,版本是12,毕竟要用java命令运行jar包的。docker会从dockerhub拉取对应的镜像,服务器不需要有。

MAINTAINER yutao,表示镜像的编写者。

ADD oceanstars-start-1.0.0-SNAPSHOT.jar app.jar,表示将oceanstars-start-1.0.0-SNAPSHOT.jar,也就是项目jar包,拷贝进镜像,并命名为app.jar。如果不拷贝,镜像就没jar包可运行了。

EXPOSE 8080,表示镜像将对外暴露8080端口,也就是编写项目时的运行端口。

VOLUME /data,表示将镜像的/data文件夹声明为匿名卷。这样做是因为,项目会读写文件系统的/data文件夹,如果不声明,那么项目运行后只会对镜像内的虚拟目录/data读写,而不会对主机的目录读写,等关闭容器后,写的内容就没了。所以,声明匿名卷是为了将写操作持久化。仅仅在dockerfile里声明还不够,在运行容器时还需要设置匿名卷对应的主机目录,这点我们下面会谈到。

ENTRYPOINT java -jar app.jar,表示容器运行后执行的命令。这里就只需要运行jar包就行了。

构建镜像

编写了Dockerfile,就可以构建镜像了。

 docker build -t test_app:1.0.0 .
  • test_app是镜像的名字,-t代表给镜像打的标签,后面的:0.1意思就是这个镜像版本是0.1。如果不打标签,镜像的标签会自动设为latest。

  • 最后的一个’.‘代表Dockerfile所在位置,因为就在当前目录下,所以直接是一个’.'就行了。

  • docker会自动拉取openjdk。一会出现“Successfully built 7717b14bfe0a”,说明构建成功。

运行容器

接下来运行容器。

 docker run -d --name test_app -v E:\java项目\dockerfile\volumeData:/data --net=host -p 8080:8080 test_app:1.0.0
  • -d指在后台运行。

  • –name为容器起名。

  • -v指定容器匿名卷挂载的目录。这里E:\java项目\dockerfile\volumeData:/data 代表将主机的E:\java项目\dockerfile\volumeData 对应到容器的/data ,也就是说,容器对/data 目录的读写也就是对主机的E:\java项目\dockerfile\volumeData读写。

  • –net=host指定容器的网络模式。host是最简单的模式,容器和主机共用一个网络,会互相占用端口。由于项目简单,我就没有再研究其他模式了,想研究的话可以看看官网教程。

  • -p 8080:8080指定端口映射。这里简单的将主机的8080端口映射到容器的8080端口。如果想要多个web程序运行在同一主机,不需要改代码里的运行端口,直接将主机的不同端口映射到容器的8080即可。

  • 最后是容器使用的镜像,也就是刚刚构建好的test_app:1.0.0。

就这样,容器成功运行了。只要docker start/stop就能控制程序运行,部署新版本时,也只要将jar包再上传到目录下,重新构建即可。

参考地址:

Java——maven打完jar包之后将jar包放到指定位置总结

通过maven-clean-plugin插件清除指定的目录

docker打包jar包,构建镜像部署运行

Springboot项目多模块打包jar移动到指定目录,docker打jar包构建镜像部署并运行相关推荐

  1. springboot项目多moudle打包到一个jar

    springboot项目多moudle打包到一个jar 1.创建多moudle项目 参考:https://blog.csdn.net/tiantangdizhibuxiang/article/deta ...

  2. springboot项目推荐的打包方式以及springboot项目的瘦身!!!!

    1.springboot项目推荐的打包方式 springboot有两种打包方式,分别是打包成war包和打包成jar包.打包成war包放在tomcat的webapp目录下,随着tomcat的启动,即可访 ...

  3. python打开指定文件-python打包压缩、读取指定目录下的指定类型文件

    下面通过代码给大家介绍python打包压缩指定目录下的指定类型文件,具体代码如下所示: import os import datetime import tarfile import fnmatch ...

  4. Springboot mavne项目多模块打包,报错 找不到 base包,找不到common类等等

    报错示例: [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE ...

  5. SpringBoot项目如何进行打包部署

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/shimilysj/article/details/79838124 springboot的打包方式有 ...

  6. classes maven 为空 打包_Maven打包:将classes打成Jar,之后打到War中(或打成jar),过滤指定目录。...

    一. 将classes打成Jar,之后打到War中. 1.在pom的开始部分定义整个工程打war包 mtop_prj war mtop_prj 2.在plugin配置部分,定义将classes下的打为 ...

  7. docker -v 覆盖了容器中的文件_springboot配合maven打成可执行jar,构建镜像部署到docker容器中...

    本篇文章将介绍springboot应用如何打成jar包,并将jar构建为docker镜像部署到docker中 应用打包 需要配合spring-boot-maven-plugin打包,将以下代码放到应用 ...

  8. python读取压缩文件的指定后缀的文件_python打包压缩、读取指定目录下的指定类型文件...

    下面通过代码给大家介绍python打包压缩指定目录下的指定类型文件,具体代码如下所示: import os import datetime import tarfile import fnmatch ...

  9. tar 打包压缩/解压缩到指定目录

    压缩到指定目录 (直接指定目录位置即可)(打包时不想带路径可以如下先进入到要打包的目录用*表示要打包的内容即可) [root@ald8 /]# cd /data/ad/ [root@ald8 ad]# ...

最新文章

  1. python提高照片分辨率怎么调_实拍16张菊花特写照片,运用暗色调表现,其质感表现得怎么样?...
  2. HTML5 body设置全屏背景图片 如何让body的背景图片自适应整个屏----实战经验
  3. 数据库授予用户增删改查的权限的语句_软件测试之浅谈数据库技术概述
  4. activemq 性能测试_ActiveMQ性能测试
  5. java 堆_JAVA学习笔记 07——堆、栈和垃圾回收机制
  6. 每天进步一点点《SVD用于压缩》
  7. 如何用MathType快速输入公式
  8. 深度学习理论 10集课程视频(斯坦福 STATS 385)
  9. android studio ndk 开发入门
  10. 从概率观点,怎样看新冠病毒的疫情
  11. paip.盘古汉字转拼音组件库使用总结
  12. json转excel_json数据转换成excel表格
  13. 64qam星座图matlab,基于MATLAB的QAM 眼图和星座图
  14. 华为手机应用安装错误码分析汇总
  15. Cisco路由器密码设置
  16. 【ARMv8基础篇】NIC-400控制器简介
  17. 力扣刷题 DAY_67 回溯
  18. 从汉语与英语最常用字词,分析汉语与英语的异同(一)
  19. java 弧度 转经纬度_GPS 经纬度转换为 经过旋转后的平面坐标详解
  20. 关于pr文件导入的问题

热门文章

  1. 如何解决远程桌面连接出现内部错误问题?
  2. 分析查询语句 EXPLAIN 详解
  3. MYSQL explain详解
  4. 【paper 1】2022 一种用于脑内出血血肿体积检测的鲁棒性深度学习分割方法-英文
  5. 海量、安全、高可靠的华为云对象存储服务OBS,助力企业数据存储降本提效
  6. 安全合规/ISO--8--ISO 27001实施历程
  7. Ajax同步异步执行顺序问题
  8. 独立看门狗/窗口看门狗
  9. 图像处理之仿真运动模糊复原【使用逆滤波、维纳滤波】
  10. 常用的一些校验规则(手机号,身份证号等)