BlueXIII's Blog

热爱技术,持续学习

0%

使用dockerfile插件打包微服务镜像

概述

使用spotify的dockerfile maven插件,可以帮助我们将maven与docker进行集成,更快速的在maven构建过程中进行docker镜像的打包操作。
配置仍然是基于Dockerfile的,插件只是辅助。

请注意,插件的名称是 spotifydockerfile-maven-plugin ,而非 docker-maven-plugin

详情可访问 github页面

准备工作

首先准备一个spring-boot工程,假设工程名为playground。另外本机需要安装docker,过程都不再赘述。
本文平台为macOS12,docker在不同平台下可能有所差异。

由于dockerhub访问较慢,可以用$$先自行搭建一个socks5代理来加速访问。代理不是必须的。

1
export ALL_PROXY=socks5://xx.xx.xx.xx:xx

建立Dockerfile

在工程目录下新建一个Dockerfile,基于openjdk的镜像:

1
2
3
4
5
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/playground-1.1.0.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

使用docker命令构建镜像

在使用Maven插件之前,可以试着先用docker命令来进行打包:

1
docker build -t="yourname/playground:latest" .

查看镜像是否生成:

1
docker images

然后可以使用docker push推送镜像:

1
docker push yourname/playground

编辑pom.xml

测试通过后,就可以在pom.xml中添加spotify插件了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<properties>
<docker.image.prefix>yourname</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.4</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
</configuration>
</plugin>
</plugins>
</build>

另外还可以添加一个execution,在maven的install生命周期自动进行build和push。

1
2
3
4
5
6
7
8
9
10
<executions>
<execution>
<id>default</id>
<phase>install</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>

使用插件构建镜像

1
mvn install dockerfile:build

使用插件推送镜像

在使用dockerfile-maven-plugin推送前,需要先编辑一下~/.docker/config.json,添加用户名及密码,否则会报认证失败。

1
2
3
4
5
6
7
8
9
{
"auths": {
"https://index.docker.io/v1/": {
"Username": "xxxxxx",
"Secret": "xxxxxx"
}
},
"credsStore": "osxkeychain"
}

然后直接运行即可:

1
mvn dockerfile:push

运行镜像

最后,可以使用docker run命令可以将镜像启动,在浏览器中查看一下运行情况

1
docker run -p 8080:8080 -t yourname/playground

使用docker logs简单查看日志

1
2
docker ps
docker logs f4d7e737f47f