前情提要
- 我们在日常工作中,并不是人均都可以进入比较规范化的团队,那么如果你作为一名研发,大概率是要承担部分运维职责的,如,应用的部署, SO,部署这么麻烦的事情,有什么办法可以简化,让自己暗爽。
- 比如小白手套在某小皮包公司,需要自己负责功能开发,以及测试环境的部署,需要使用容器环境。
- 举例 Java 语言,大部分做法一般是
- 首先,
mvn clean package
- 然后,找一份
Dockerfile
- 执行
docker build -t xxx:20240106 .
- 最后登录到服务器
docker run -d -p xx:xx xxx:20240106
或者docker-compose -f xxxx up -d
- 首先,
其实 ,最后一步用 docker-compose
还好,但是之前打包,构建镜像的操作,怎么样才能合而为一,避免手动输入很长的命令,甚至要思考镜像号有没有被使用过的问题。
神器 fabric8
官方Doc:https://dmp.fabric8.io/
Fabric8是一个开源的集成开发平台,致力于改善容器化应用和微服务的开发与部署。它提供一套工具和库,以简化整个DevOps生命周期,从开发到部署再到监控。
本章重点在于介绍它与 Maven 集成自动化构建镜像的能力
初始化
利用脚手架生成了一个空的项目
![image-20240115223641141](https://img-blog.csdnimg.cn/img_convert/bec088f5cf665c44aab8849f6f8cfb09.png)
添加 Dockerfile
添加一个提供 java 11 的运行时环境
![image-20240115223837047](https://img-blog.csdnimg.cn/img_convert/283f2243fdfe8e8f024a78e30baa6f5e.png)
引入组件
在 pom 文件中引入 plugin
docker-maven-plugin
<plugin>
<!-- https://mvnrepository.com/artifact/io.fabric8/docker-maven-plugin -->
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.43.0</version>
<configuration>
<!-- 你的镜像仓库 -->
<registry>harbor.ningyiplus.com</registry>
<images>
<image>
<!-- 你的镜像命名规则 我这里使用项目唯一标识+项目版本 -->
<name>apps/${project.artifactId}/${project.artifactId}:${project.version}</name>
<build>
<!-- dockerfile 路径 -->
<dockerFileDir>${project.basedir}</dockerFileDir>
<!-- 镜像 tag 我这里使用系统时间-->
<tags>
<!--suppress UnresolvedMavenProperty -->
<tag>${current.time}</tag>
</tags>
</build>
</image>
</images>
<!-- 镜像仓库账号密码 -->
<authConfig>
<username>ningyi</username>
<password>ZTF3C4bEy9@xx</password>
</authConfig>
</configuration>
</plugin>
⚠️ 当前系统时间也需要一个插件支持,下面引入
build-helper-maven-plugin
<plugin>
<!-- https://mvnrepository.com/artifact/org.codehaus.mojo/build-helper-maven-plugin -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>maven-version</goal>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>current.time</name>
<pattern>yyyyMMddHHmmss</pattern>
</configuration>
</execution>
</executions>
</plugin>
一句命令搞定编译+镜像推送
在项目根目录下执行 mvn clean package docker:build docker:push
可以看到命令已经执行成功,并且已经完成了项目编译,镜像构建,镜像推送这些操作
![image-20240115224941731](https://img-blog.csdnimg.cn/img_convert/059ca40f4cd39e9c91f2424c6b6e7df4.png)
让我们到镜像仓库看下镜像是否推送成功了吧
![image-20240115225035736](https://img-blog.csdnimg.cn/img_convert/b76fffcd419fa2d09ddb057f5e1fd259.png)
没有任何问题!
结语
集成 maven 构建镜像只是 fabric8
的冰山一角,它有更多强大的能力,如果感兴趣请自行查阅官方手册。
公众号回复 自动构建
即可获取本文章源码。⚠️:真实镜像仓库账密已做处理,可以推送 Docker 官方仓库 或 阿里云镜像仓库。