前言
随着容器化部署方式的流行,各IT公司大部分已经完成了云原生架构实现,如何将项目工程打包成镜像并运行?国外已有众多基于Maven插件实现的打包方案,本文已实测并实现了几种常见的打包方式,比如谷歌公司的jib、spotify等插件,实际使用中,总出现与实际项目不太契合等各种问题,继续搜索实测后,发现了一个开源 打包插件,功能强大且使用简单,但国内相关资料甚少,所以鄙人记录之,望能帮助到需要的小伙伴~
插件介绍
基网地址:https://github.com/fabric8io/docker-maven-plugin
官方文档地址:https://dmp.fabric8.io/
插件特征:
支持多种配置打包镜像的方法,例如Dockerfile文件或自定义语法
支持远程Docker守护程序,无需本地安装docker环境
实现案例
1、 准备一个基于springboot的demo;
2、 编写Dockerfile文件,放在工程根目录下;
# 基础镜像
FROM 192.168.58.173/library/openjdk:8-jdk-alpine
# 作者信息
MAINTAINER td
# 创建工作目录
RUN mkdir -p /deploy/app
# 切换工作目录
WORKDIR /deploy/app
# 容器开放端口
EXPOSE 8080
# 添加jar包
ADD ./target/demo-kubenetes-2.3.0.jar ./demo-kubenetes-2.3.0.jar
# 容器启动执行命令
ENTRYPOINT ["java", "-jar", "demo-kubenetes-2.3.0.jar"]
1、 Maven引入插件并配置相关信息;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.33.0</version>
<!--全局配置-->
<configuration>
<!--配置远程docker守护进程url-->
<dockerHost>http://192.168.58.173:2375</dockerHost>
<!--认证配置,用于私有registry认证-->
<authConfig>
<username>admin</username>
<password>Harbor12345</password>
</authConfig>
<!--镜像相关配置,支持多镜像-->
<images>
<!-- 单个镜像配置 -->
<image>
<!--镜像名(含版本号)-->
<name>library/${project.name}:${project.version}</name>
<!--registry地址,用于推送,拉取镜像-->
<registry>192.168.58.173</registry>
<!--镜像build相关配置-->
<build>
<!--使用dockerFile文件-->
<dockerFile>${project.basedir}/Dockerfile</dockerFile>
</build>
</image>
</images>
</configuration>
</plugin>
</plugins>
</build>
1、 打包并推送镜像;
命令: mvn clean package docker:build & mvn docker:push
2、 运行镜像;
运行命令:
docker run -it --name my-demo -p 8888:8080 192.168.58.173/library/demo-kubenetes:2.3.0