0


Java(SpringBoot)项目打包(构建)成`Docker`镜像的几种方式

前置说明

  • 最为原始的打包方式
  • spring-boot-maven-plugin插件
  • jib-maven-plugin插件
  • dockerfle-maven-plugin插件

最为原始的方式

也就是使用

Docker

的打包命令去打包,麻烦,我这里不多说。

spring-boot-maven-plugin插件打包

SpringBoot自己内置了一个

Docker

镜像打包工具,在

spring-boot-starter-parent

中,我们无需多余的设置。

优点:不需要写

DockerFile

,Spring建议的安全、内存、性能等问题都不需要管。

jib-maven-plugin插件

来自

Google

的一款打包插件。

优点:不需要本地安装

Docker

,也不需要写

DockerFile

Jib

可以直接推送到指定的

Docker

仓库。

dockerfle-maven-plugin插件

需要写

DockerFile

也需要本地

Docker

环境,但是恰恰是最好用的,最稳定的,最自由把控的。

优点:稳定,不受网络限制,DockerFile自己写,自由度很高,想怎么改怎么改,个人推荐这个。

SpringBoot打包镜像

我们无需引入依赖,

SpringBoot

自带了。

打包命令:

mvn spring-boot:build-image

但是我不喜欢用命令,IDEA都给你可视化了,何必敲命令呢?而且命令还需要设置

Maven

环境变量。

就和打

JAR

包一样,我们点一下就可以。

但是SpringBoot的打包会因为网络(不通畅),而导致失败。

打包完成是这样:

我们去查看本地镜像有没有。

运行测试一下。

说实话我运行失败了,因为我项目里面有一下东西它不好搞,比如微信支付的证书文件和

KEY

文件,一般的SpringBoot项目可以,但是我这个恰恰不行,我需要自己写

DockerFile

去创建卷映射才好。

JIB打包镜像

配置插件依赖:

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.7.RELEASE</version><configuration><mainClass>com.toemail.smtp.ToEmailApplication</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>com.google.cloud.tools</groupId><artifactId>jib-maven-plugin</artifactId><version>3.3.1</version><configuration><!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字--><from><!--基础镜像名称(建议使用国内公开镜像,下载速度快,更稳定) --><image>java:8u172-jre-alpine</image></from><to><!--镜像名称和tag,使用了mvn内置变量${project.version},表示当前工程的version--><image>demo:${project.version}</image></to><!--容器相关的属性--><container><!--jvm内存参数--><jvmFlags><jvmFlag>-Xms4g</jvmFlag><jvmFlag>-Xmx4g</jvmFlag></jvmFlags><!--要暴露的端口--><ports><port>8899</port></ports></container></configuration></plugin>

我这里用的目前最新版本。

另外,很多配置我都写了注释,如果你想了解更多可以查一下

JIB

的相关文档。

命令

mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild

IDEA

报错

如果出现这错误:

就添加以下配置:

还是报错

好像是它这个官方仓库需要认证登录,我靠,我真不喜欢这破插件,垃圾(暗暗骂道)。

突然解决

这个镜像,需要指定具体仓库

URL

地址的。

但是我现在这个不行,所以我要换一个阿里的仓库。

改成了这样:

<to><image>registry.cn-qingdao.aliyuncs.com/jibjava/jibfirst</image></to>

阿里云有时候私有仓库需要密码,也可以换成其他私有仓库。

        <from>
            <image>registry.cn-qingdao.aliyuncs.com/jibjava/jibfirst</image>
            <auth>
              <username>阿里云账号</username>
              <password>阿里云密码</password>
            </auth>
          </from>

XML标签详解

from:拉取的镜像的配置,默认为gcr.io/distroless/java
to:要生成的镜像的配置
image:拉取或生成的镜像名称
auth: 认证信息,分别为用户名和密码
container: 容器的属性
jvmFlgs: JVM 容器的参数,和 Dockerfile 的 ENTRYPOINT作用相同
mainClass: 启动类限定名
args: main 方法的传入参数
ports: 容器暴露的端口,和 Dockerfile 的EXPOSE作用相同

成功

DockerFileMaven打包

DockerFile

FROM c9katayama/java8:latest
# 创建目录
RUN mkdir -p /dashboard
# 拷贝文件
COPY dashboard.jar /dashboard/dashboard.jar
# 暴露端口
EXPOSE 8099
# 启动命令
CMD ["java", "-jar", "/dashboard/dashboard.jar"]
DockerFile

不多说,请自行学习。

依赖展示:

<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.11</version><dependencies><dependency><groupId>javax.activation</groupId><artifactId>javax.activation-api</artifactId><version>1.2.0</version><scope>compile</scope></dependency></dependencies><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><imageTags><imageTag>${project.version}</imageTag><imageTag>latest</imageTag></imageTags></configuration></plugin>

但是这一段插件的

XML

别用,因为这是

rocketmq

可视化控制台的官方写的,你可以自己配置。

正常的一般插件的

XML

就这样:

<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>${project.artifactId}:${project.version}</imageName><!-- 指定 Dockerfile 路径--><dockerDirectory>${basedir}/docker</dockerDirectory><!-- 这里是复制 jar 包到 docker 容器指定目录配置,也可以写到 Docokerfile 中 --><resources><resource><targetPath>/ROOT</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>

其余配置可以自行浏览器搜索一下:

docker-maven-plugin

配置项

构建命令

mvn package

尝试打包

我这里直接

IDEA

点击打包,讨厌命令。

注意:需要本地有

Docker

,并且开启远程连接,

Windows

Docker

安装小简上一篇文章写过的,可以看看,

Linux

的没写。

好用多了,一次成功。

还是这个最好用,推荐!!!

总结

小简选择的是最后一个,第一个也还行吧,但是

Google

那个不需要本地有

Docker

环境,第一个我还是开着魔法(梯子)打包的,最后一个挺好的。

看情况选择的,很久没更新啦!越来越懒了,嘿嘿,下篇再见。

标签: java spring boot docker

本文转载自: https://blog.csdn.net/qq_60750453/article/details/128636394
版权归原作者 小简(JanYork) 所有, 如有侵权,请联系我们删除。

“Java(SpringBoot)项目打包(构建)成`Docker`镜像的几种方式”的评论:

还没有评论