两种方式 docker-maven-plugindockerfile-maven。两者是一家公司维护的。

方式1:docker-maven-plugin

第一种方法是使用docker-maven-plugin

瞅了下官网
We recommend that new projects use dockerfile-maven. This project will no longer have new features or accept PRs for new features. We will continue to accept bug fixes, however.

可以能正常使用,但是官方已经停止更新了。推荐使用dockerfile-maven

配置pom.xml

先添加docker-maven-plugin,选择的版本为0.4.13

<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

			<!--添加docker的支持 -->
			<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>0.4.13</version>
				<configuration>
					<imageName>ox-cleaver/${project.artifactId}</imageName>
                    <!--与实际的Dockerfile所在目录对应起来 -->
					<dockerDirectory>src/main/docker</dockerDirectory>
					<resources>
						<resource>
							<targetPath>/</targetPath>
							<directory>${project.build.directory}</directory>
							<include>${project.build.finalName}.jar</include>
						</resource>
					</resources>
				</configuration>
			</plugin>

		</plugins>
	</build>

配置Dockerfile

src/main/docker目录(pom文件配置的路径)下创建 Dockerfile 文件

FROM openjdk:8-jdk-alpine
VOLUME /tmp
#这里测试打包eureka,打jar包名字为`eureka-server-0.0.1-SNAPSHOT.jar`,名称依实际情况而定
ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar  
ENTRYPOINT ["java","-Djaeva.security.egd=file:/dev/./urandom","-jar","/app.jar"]

打包

打包成jar

mvn package
#生成了eureka-server-0.0.1-SNAPSHOT.jar、eureka-server-0.0.1-SNAPSHOT.jar.origin

打包成docker镜像

mvn package docker:build
#设置socks5代理`-DsocksProxyPort`
#mvn package docker:build  -DsocksProxyPort=1086

#打完包可以看到dokcer镜像
➜  docker image ls
REPOSITORY                  TAG                 IMAGE ID            CREATED              SIZE
ox-cleaver/eureka-server    latest              62265fc9b8c1        About a minute ago   149MB
...

默认tag是latest,修改tag(可选)

#举例  将614b4ea7327e tag改为19-06-12
$ docker tag  614b4ea7327e ox-cleaver/config-server:19-06-12
#查看效果,发现多了一个引用
$ docker image ls 
REPOSITORY                  TAG                 IMAGE ID            CREATED              SIZE
ox-cleaver/config-server    19-06-12            614b4ea7327e        About a minute ago   133MB
ox-cleaver/config-server    latest              614b4ea7327e        About a minute ago   133MB
#删除latest
$ docker rmi ox-cleaver/config-server:latest
Untagged: ox-cleaver/config-server:latest
#查看效果
$ docker image ls                           
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
ox-cleaver/config-server    19-06-12            614b4ea7327e        2 minutes ago       133MB

运行

#eureka默认为8761端口, 这里没做修改
docker run --name eureka  -p 8761:8761 -t ox-cleaver/eureka-server

参考

方式2:(推荐)dockerfile-maven

dockerfile-maven

pom配置

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>

		<!--修改开始-->
		<!--添加docker的支持 -->
		<plugin>
			<groupId>com.spotify</groupId>
			<artifactId>dockerfile-maven-plugin</artifactId>
			<version>1.4.10</version>
			<executions>
				<execution>
					<id>default</id>
					<goals>
						<goal>build</goal>
						<goal>push</goal>
					</goals>
				</execution>
			</executions>
			<configuration>
				<repository>ox-cleaver/${project.artifactId}</repository>
				<!--项目版本号-->
				<tag>${project.version}</tag>
				<buildArgs>
					<!--构建了个参数为jar文件-->
					<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
				</buildArgs>
			</configuration>
		</plugin>
		<!--修改结束-->
	</plugins>
</build>

配置Dockerfile

在项目根目录(pom.xml同级),添加Dockerfile

#java:8镜像比较大(500mb+),这里使用比较精简的`openjdk:8-jdk-alpine`
#FROM java:8
FROM openjdk:8-jdk-alpine
#仅起到声明的作用。作用 1.方便用户理解  2. docker run -P 会自动将该域名映射到宿主机,不过一般都使用-p自己指定端口号
EXPOSE 8761
ARG JAR_FILE
#添加文件
ADD target/${JAR_FILE} /eureka.jar
##容器启动后执行
ENTRYPOINT ["java", "-jar","/eureka.jar"]

打包成docker镜像

假设机器上已经装了docker

以下命令都可以打包成docker镜像(先打包jar包 -> 执行dokerfile):

  • mvn package
  • mvn dockerfile:build
#举例
mvn dockerfile:build

其他命令

  • mvn dockerfile:push
  • mvn dockerfile:tag

运行

查看docker镜像,发现已经被添加上了。

➜  docker image ls 
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
ox-cleaver/eureka-server    0.0.1-SNAPSHOT      8e8d3d28caae        50 seconds ago      149MB

运行该镜像

docker run --name eureka  -p 8761:8761 -t ox-cleaver/eureka-server:0.0.1-SNAPSHOT