在dockerfile-maven-plugin之前,其实还有一个docker-maven-plugin,但是配置相对繁琐,几乎已经不推荐了。
直接上手贴代码:
1、pom.xml文件中的核心代码:
<properties>
<java.version>1.8</java.version>
<docker.repo>registry.cn-hangzhou.aliyuncs.com/jgqk8s</docker.repo>
<tag>latest</tag>
</properties>
...中间的内容就省略了,各自项目的依赖不一样...
<build>
<finalName>test-docker-plugin</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<configuration>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<repository>${docker.repo}/${project.build.finalName}</repository>
<tag>${tag}</tag>
</configuration>
</plugin>
</plugins>
</build>
2、根目录下编写Dockerfile:
FROM openjdk:8-jre-alpine MAINTAINER jiguiquan<jiguiquan@163.com> RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone WORKDIR /app COPY target/test-docker-plugin.jar ./app.jar EXPOSE 8090 ENV JVM_OPTS="-Xmx1g -Xms1g -Xss200m -XX:+UseG1GC -XX:MaxPermSize=256M -XX:ParallelGCThreads=5 -XX:ConcGCThreads=5 -XX:MaxGCPauseMillis=200" ENTRYPOINT [ "sh", "-c", "java $JVM_OPTS -jar /app/app.jar" ]
3、因为本机没有docker,所以我使用Jenkins环境来帮助我测试,Jenkinsfile如下:
pipeline{
agent any
environment {
WS = "${WORKSPACE}"
}
stages {
stage("环境检查"){
steps {
sh 'whoami'
sh 'echo $JAVA_HOME'
sh 'echo $M2_HOME'
sh 'mvn -v'
sh 'java -version'
sh 'docker version'
}
}
stage('整体编译打包镜像') {
steps {
sh "echo ${WS}"
sh "cd ${WS} && mvn clean install -DskipTests dockerfile:build dockerfile:push"
}
}
}
}
4、我的TestController内容如下:
@RestController
public class TestController {
@GetMapping("/api/test")
public Map<String, Object> test() throws Exception{
Map<String, Object> map = new HashMap<>();
map.put("a",1);
map.put("b",2.0f);
map.put("c", true);
map.put("d", System.currentTimeMillis());
map.put("e", Thread.currentThread().getName());
map.put("f", InetAddress.getLocalHost().getHostAddress());
map.put("g", InetAddress.getLocalHost().getHostName());
return map;
}
}
5、然后就是测试了,我打成镜像后,是使用K8s部署的2个pod进行负载均衡:




