docker 部署springboot项目(Spring Boot Docker打包工具小结)
docker 部署springboot项目
Spring Boot Docker打包工具小结目录
- Spring Boot Docker
- spring-boot-maven-plugin
- Spotify Maven Plugin
- Jib Maven Plugin
最近公司的应用准备容器化,因为几十个应用从测试到发布太麻烦了,而且还会因为环境的因素导致部署中出现各种问题。为了在开发、测试、生产都能保持一致的环境,就引进了容器技术,先拿边缘的项目试试水,积累下经验,今天对几种常见的Spring Boot Docker打包工具进行了简单总结。
Spring Boot Docker
在Spring Boot应用中,我们可以约定不同的标识来定义不同的环境。例如 dev 表示开发环境、test表示测试环境,对应的配置文件为apppcation-dev.yaml、apppcation-test.yaml。我们通过声明spring.profiles.active来激活对应的环境配置,例如激活dev环境时spring.profiles.active=dev。完整的启动命令为:
java -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=dev -jar spring-boot-app.jar
根据上面的命令编写一个能够适应多环境的Dockerfile:
# 引入 openjdk 镜像 FROM adoptopenjdk/openjdk8 # 声明作者 LABEL AUTHOR=felord OG=felord.cn # 挂载几个有用的文件夹 比如日志 VOLUME ["/tmp","/logs"] # 声明一个环境参数用来动态启用配置文件 默认dev ENV ACTIVE=dev # 暴露端口 EXPOSE 8080 # 复制并修改应用打包后的jar文件名称 ADD /target/flyway-spring-boot-1.0.0.jar app.jar # 容器启动时第一个运行的命令 用来启动应用 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=${ACTIVE}","-jar","app.jar"]
这样打包的Docker镜像就可以通过docker run添加额外的--env ACTIVE=test 来动态的改变环境。单纯的编写Dockerfile不方便我们DevOps。
docker 镜像生命周期
我们需要能够自动地构建、推送到仓库、拉取镜像、运行一系列流水线操作。好在市面上有很多工具来帮助我们实现这一过程。
spring-boot-maven-plugin
这个是Spring Boot官方的插件,在2.x的某个版本提供了Docker镜像构建能力。
<project> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <name>docker.repo.com/library/${project.artifactId}:${project.version}</name> <publish>true</publish> </image> <docker> <publishRegistry> <username>user</username> <password>secret</password> <url>https://docker.repo.com/v1/</url> <email>user@example.com</email> </publishRegistry> </docker> </configuration> </plugin> </plugins> </build> </project>
配置好Docker私仓后就可以通过mvn clean spring-boot:build-image 进行构建镜像了。
这种方式好处就是无额外依赖,缺点就是需要从github下载构建元件,网络如果不好就容易失败。
Spotify Maven Plugin
Spotify Maven 插件是一个目前比较普遍的选择。它要求应用程序开发人员编写Dockerfile,并把Dockerfile放在项目src/main/docker目录下。然后你就可以通过引入:
<plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.8</version> <configuration> <repository>repo.com/${project.artifactId}</repository> </configuration> </plugin>
这个插件提供了mvn dockerfile:build、mvn dockerfile:tag、mvn dockerfile:push三个命令分别用来构建、打标签、发布到远端私有仓库,非常简单。
这个是一个非常容易上手的插件,唯一的要求就是需要会编写Dockerfile,对定制化要求高的可以使用这个。
Jib Maven Plugin
这个曾经我在早些时候的一篇文章中已经介绍过了,可以详细了解一下。它是谷歌开源的OCI镜像打包工具,可以用来打包Docker镜像,大部分情况下已经满足需要。但是如果你要定制化的话还是不容易的,需要阅读官方给的文档。最开始的Dockerfile如果使用JIb的话需要这样配置:
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>3.0.0</version> <configuration> <from> <image>adoptopenjdk/openjdk8</image> </from> <to> <image>docker.repo.com/library/${project.artifactId}</image> <auth> <username>felord</username> <password>xxxxxx</password> </auth> <tags> <tag>${project.version}</tag> </tags> </to> <extraDirectories> <paths> <path> <from>target/${project.artifactId}-${project.version}.jar</from> <includes>*.jar</includes> <into>/app.jar</into> </path> </paths> </extraDirectories> <containerizingMode>packaged</containerizingMode> <container> <volumes>/tmp,/logs</volumes> <ports> <port>8080</port> </ports> <environment> <active>dev</active> </environment> <entrypoint> java,-Djava.security.egd=file:/dev/./urandom,-Dspring.profiles.active=${active},-jar,/app.jar </entrypoint> <creationTime>USE_CURRENT_TIMESTAMP</creationTime> </container> </configuration> </plugin>
优点是不需要本地Docker环境,而且支持分层构建、镜像瘦身,上手容易;缺点是定制化比较困难。
到此这篇关于Spring Boot的 Docker打包插件哪个好用的文章就介绍到这了,更多相关Spring Boot Docker打包插件内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- springboot怎么设置docker(Docker如何给Springboot项目动态传参的实现方法)
- springboot与docker(详解SpringBoot项目docker环境运行时无限重启问题)
- 使用docker在linux环境中部署springboot包的教程(使用docker在linux环境中部署springboot包的教程)
- spring-boot 内置tomcat启动(centos环境下使用tomcat 部署SpringBoot的war包)
- springbootvue数据交互系统(Springboot运用vue+echarts前后端交互实现动态圆环图)
- yii2对比springboot(Yii框架函数简单用法分析)
- springboot内置tomcat启动过程(Tomcat启动springboot项目war包报错:启动子级时出错的问题)
- docker中的mongodb(Docker mongoDB 4.2.1 安装并收集springboot日志的步骤详解)
- dockerspringboot一键部署(docker-compose镜像发布springboot项目的流程分析)
- mysql是自动commit吗(详解MySQL与Spring的自动提交autocommit)
- spring boot 如何启动tomcat(传统tomcat启动服务与springboot启动内置tomcat服务的区别推荐)
- springcloud alibaba nacos linux配置的详细教程(springcloud alibaba nacos linux配置的详细教程)
- springboot docker教程(在Idea中使用Docker部署SpringBoot项目的详细步骤)
- Docker 运行多个Springboot的详细教程(Docker 运行多个Springboot的详细教程)
- vue和springboot实战项目(vue+spring boot实现校验码功能)
- springboot如何解析vue登录参数(SpringBoot + Vue 项目部署上线到Linux 服务器的教程详解)
- 开国中将,王牌军63军首任政委,两个连襟一个上将一个少将传为佳话(王牌军63军首任政委)
- 臭名昭著的731部队最高负责人 石井四郎(臭名昭著的731部队最高负责人)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
- 被鉴定的古董价值300万 当心,你可能遇到诈骗了(被鉴定的古董价值300万)
- 英语难学吗(初中英语难学吗)
- 如何追女孩子(如何追女孩子的技巧和方法)
热门推荐
- 将mysql中的表导出来(MySQL之导出整个及单个表数据的操作)
- mysql 安装阿里云(详解如何在阿里云服务器安装Mysql数据库)
- python怎么转换jar包(利用python脚本如何简化jar操作命令)
- linux双网卡热备配置超详细(linux 使用bond实现双网卡绑定单个IP的示例代码)
- 阿里云ecs实例详解(阿里云ecs服务器 修改php上传最大限制的方法)
- 如何使用docker部署(使用远程Docker进行集成测试的环境搭建过程)
- php开发详细步骤(php源码的安装方法和实例)
- php实现redis核心代码(PHP结合Redis+MySQL实现冷热数据交换应用案例详解)
- filter的用法css(CSS filter 有什么神奇用途)
- mysql索引优化技巧(MySQL如何优化索引)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9