Maven打包Java項目成Docker鏡像

引入Maven Build Plugins: dockerfile-maven-plugin

https://github.com/spotify/dockerfile-maven

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>bbsafe/mvn-docker-demo</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>

設置Jar包Main方法

添加以下插件并設置mainClass

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>cc.bbsafe.Main</mainClass>
</manifest>
<manifestEntries>
<mode>development</mode>
<key>value</key>
</manifestEntries>
</archive>
</configuration>
</plugin>

編寫Dockerfile

1
2
3
4
5
6
7
8
9
10
FROM openjdk:8-jre
MAINTAINER Fred Lai <test@test.com>

ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/myservice/myservice.jar"]

# Add Maven dependencies (not shaded into the artifact; Docker-cached)
ADD target/lib /usr/share/myservice/lib
# Add the service itself
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/myservice/myservice.jar

Docker run

1
docker run bbsafe/mvn-docker-demo:1.0-SNAPSHOT -d