我们以springboot项目为例
我们一个聚合工程中有多个微服务项目,项目架构:
zwt-cloud为聚合工程,聚合工程中包含 zwt-user,zwt-order,zwt-coupon微服务
SpringBoot打包插件配置:
1.聚合工程pom添加全局变量
<docker.image.prefix>zwt-cloud</docker.image.prefix>
2.微服务中添加依赖
<build>
<finalName>alibaba-cloud-gateway</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--需要加这个,不然打包镜像找不到启动文件-->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.10</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
3.微服务Dockerfile编写,需要在根目录创建此文件
FROM adoptopenjdk/openjdk11:jre11u-nightly
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
4.项目最外层执行,打包之前构建一下
mvn clean
mvn install
5. 在子模块目录下执行命令
mvn install -Dmaven.test.skip=true dockerfile:build
6.在本地docker images可以看到此镜像
7.本地运行docker 镜像验证一下服务是否可用
docker run --name my-user-service -d -p 8001:8001 imageid
8.推送本地镜像至阿里云镜像仓库
8.1 登录阿里云镜像仓库
docker login --username=bositejiaoyu registry.cn-shanghai.aliyuncs.com
8.2 将镜像推送到Registry
docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/zwt-images/cloud-gateway:[镜像版本号]
docker push registry.cn-shanghai.aliyuncs.com/zwt-images/cloud-gateway:[镜像版本号]
9.登录阿里云后台管理,查看自己push来的镜像吧
10.我们可以写一个shell脚本实现自动化打包推送