这篇笔记的目标是使用本地 IDEA 编译 SpringBoot 工程为 jar 包,并且使用安装好 Docker 的远程 Linux 主机构建 Docker 镜像,Push 到阿里云的镜像托管服务。
首先需要一台安装好 Docker 的 Linux 主机或虚拟机,并且开放远程控制(见 -> 开启 Docker 的远程控制)
添加环境变量
IDEA 设置里添加 Maven 环境变量,告知 Docker Host 地址,具体操作如下:
- 找到 Preference -> Build, Execution, Deployment -> Build Tools -> Maven -> Runner
- 在 Environment variables 中填写
DOCKER_HOST=tcp://xxx.xxx.xxx.xxx:2375
修改 POM 文件配置
在项目 POM 文件中添加 dockerfile-maven-plugin 插件配置,注意修改 repository, username, password。
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.13</version> <executions> <execution> <id>build-tag-push-version</id> <phase>package</phase> <goals> <goal>build</goal> <goal>tag</goal> <goal>push</goal> </goals> <configuration> <tag>${project.version}</tag> </configuration> </execution> <execution> <id>tag-push-latest</id> <phase>package</phase> <goals> <goal>tag</goal> <goal>push</goal> </goals> <configuration> <tag>latest</tag> </configuration> </execution> </executions> <configuration> <repository>registry.cn-shanghai.aliyuncs.com/xxxxx/xxxxx</repository> <username>userName</username> <password>userPassword</password> <buildArgs> <JAR_FILE>${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> </plugins> </build>
|
本配置的作用是,运行 mvn package 操作时:
- jar 包编译
- 使用项目根目录下的 Dockerfile 构建以版本号为 Tag 的 Docker 镜像,并 push 到阿里云镜像托管服务
- 构建 Tag 为 latest 的 Docker 镜像,并 push 到阿里云镜像托管服务
更多配置选项查看官方信息:
https://github.com/spotify/dockerfile-maven
多 Tag 的配置可参考此 issue:
https://github.com/spotify/dockerfile-maven/issues/10
隐藏 POM 文件中的密码
maven 提供密码加密的功能,具体过程见:https://maven.apache.org/guides/mini/guide-encryption.html
配置完 ~/.m2/setting-security.xml
后,在 ~/.m2/setting.xml
找到 servers
标签,添加:
1 2 3 4 5 6 7
| <servers> <server> <id>registry.cn-shanghai.aliyuncs.com</id> <username>userName</username> <password>{encryptedPassword}</password> </server> </servers>
|
修改 POM 文件中的配置即可
1 2 3 4 5 6 7 8 9
| <configuration> <repository>registry.cn-shanghai.aliyuncs.com/xxxxx/xxxxx</repository> - <username>userName</username> - <password>userPassword</password> + <useMavenSettingsForAuth>true</useMavenSettingsForAuth> <buildArgs> <JAR_FILE>${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration>
|
编写 Dockerfile
在项目的根目录中新建 Dockerfile,注意其中 ARG JAR_FILE
字段是与 POM 文件中的设置对应的,例:
1 2 3 4 5 6 7 8 9 10 11 12
| FROM openjdk:11.0.8-jre MAINTAINER SJ Zhou <morooiu@gmail.com>
WORKDIR /project
ARG JAR_FILE ADD target/${JAR_FILE} project.jar
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo Asis/Shanghai > /etc/timezone EXPOSE 8080 CMD ["java", "-jar", "project.jar"]
|