前置阐明

  • 最为原始的打包形式
  • 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,也不须要写DockerFileJib 能够间接推送到指定的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,并且开启近程连贯,WindowsDocker装置小简上一篇文章写过的,能够看看,Linux的没写。

好用多了,一次胜利。

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

总结

小简抉择的是最初一个,第一个也还行吧,然而Google那个不须要本地有Docker环境,第一个我还是开着魔法(梯子)打包的,最初一个挺好的。

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