在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进行负载均衡: