温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Boot的Docker打包插件有哪些区别

发布时间:2021-10-12 09:36:18 来源:亿速云 阅读:164 作者:iii 栏目:开发技术

本篇内容介绍了“Spring Boot的Docker打包插件有哪些区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Spring Boot的Docker打包插件有哪些区别

Spring Boot Docker

在Spring Boot应用中,我们可以约定不同的标识来定义不同的环境。例如 dev  表示开发环境、test表示测试环境,对应的配置文件为application-dev.yaml、application-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。

Spring Boot的Docker打包插件有哪些区别

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打包插件有哪些区别”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI