共计 4350 个字符,预计需要花费 11 分钟才能阅读完成。
前置阐明
- 最为原始的打包形式
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 插件
来自
长处:不须要本地装置
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
环境,第一个我还是开着魔法 (梯子) 打包的,最初一个挺好的。
看状况抉择的,很久没更新啦!越来越懒了,嘿嘿,下篇再见。