使用maven的docker镜像进行打包如何切换为阿里云镜像仓库

背景:我的blog项目是运行在一台云主机上的,使用的是docker进行部署。可能是有点洁癖的原因,我没有直接在云主机上安装过多的环境或者应用,转而使用docker镜像来实现一系列的操作。如:我打包应用的操作使用的是maven的docker镜像实现的,打包开始时运行一个maven容器,打包结束之后就把容器停止移除。

我使用的maven镜像版本为

maven:3.5.0-jdk-8-alpine

https://hub.docker.com/_/maven

在实际的使用中,我使用了-v命令指定了云主机的一个目录作为本地仓库的地址,避免每一次打包都需要重新下载jar包的情况出现。

但是这个时候有另外一个问题出现了,也就是标题中的问题,因为默认的maven镜像的仓库下载地址太慢了,我需要切换成阿里云的镜像仓库。根据官方的说明:

To add your custom settings.xml file to the image use
COPY settings.xml /usr/share/maven/ref/

意思是如果需要自定义maven的配置,只需要将maven的配置文件拷贝到/usr/share/maven/ref/目录下即可,那么问题就好办了,继续使用-v命令即可。

以下是我最终的打包脚本:

echo -e '使用maven镜像编译代码'
docker stop maven
docker rm maven
docker run -it --name=maven \
    -v /home/mvn-config/:/usr/share/maven/ref \
    -v /home/mvn:/root/.m2 \
    -v /home/proj/:/root/app \
    -w /root/app maven:3.5.0-jdk-8-alpine \
    mvn clean package -Pprod -Dmaven.test.skip=true -pl web -am
docker stop maven
docker rm maven
echo -e '代码编译完成\n========================================'

简单解释:
1、因为我对容器做了命名,所以在开始打包代码之前需要使用docker stop和rm命令停止掉上一次打包的容器maven
2、docker run命令就是启动一个maven容器,使用这个容器进行打包
3、注意到docker run命令中有多个的-v和-w,分别解释一下:
第一个-v的作用是修改成阿里云镜像仓库,这里的/home/mvn-config/目录下仅存放maven的配置文件settings.xml配置文件可以参考:国内maven仓库地址及修改为阿里云镜像仓库完整配置
第二个-v的作用是指定本地maven仓库的地址,避免每一次都需要重新下载所有jar包
第三个-v的作用是指定打包的项目源代码根目录,其中/home/proj/的部分自行定义,/root/app的部分建议不动,因为这部分跟下方的-w挂钩,-w的作用是指定maven这个容器他的工作目录,也就是他会这个目录下执行mvn clean package那一串打包命令。