比较粗暴的方式就是在修改容器,比如把maven包复制到容器中,再将容器打包成镜像。(不推荐)
下面优雅的做法(官方推荐的做法),即在官方镜像的基础之上通过编写Dockerfile生成新的镜像。
操作步骤:
1、官网下载maven安装包 apache-maven-3.6.3-bin.tar.gz
2、编辑自己的setting.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/var/jenkins_home/repository</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
</profiles>
</settings>
Ps:这里的仓库地址配置和jenkins挂载地址一致,这样可以少配置一个挂载目录,也可以改成其他位置,在启动容器时映射这个目录即可
3、编写Dockerfile
FROM jenkins/jenkins:lts
# put nginx-1.13.2.tar.gz 将宿主机上的nginx-1.13.2.tar.gz复制到容器中的/usr/local/src (对于压缩包会复制过程中自动解压)
ADD apache-maven-3.6.3-bin.tar.gz /opt
COPY settings.xml /opt/apache-maven-3.6.3/conf
ENV PATH /opt/apache-maven-3.6.3/bin:$PATH
4、确保 apache-maven-3.6.3-bin.tar.gz 、setting.xml 、Dockerfile三个文件在同一个目录下后执行
[root@izwz98um4r4f29t97dmxufz opt]# docker build -t jenkins-maven/jenkins:lts .
5、运行容器
docker run --name jenkins -d -p 8080:8080 -p 50000:50000 -v /docker_data/jenkins/:/var/jenkins_home -u root jenkins-maven/jenkins:lts
Ps:/docker_data/jenkins为宿主机目录
/var/jenkins_home:容器目录,由于上文将maven仓库地址配置在当前目录下,因此不用额外挂载仓库目录
-u root参数是为了让容器以宿主机root身份进行操作。也可以不使用root方式,修改/docker_data/jenkins文件夹权限也可以
6、进入jenkins页面配置maven
系统管理》全局工具配置》Maven 配置
配置/opt/apache-maven-3.6.3为maven根目录
/opt/apache-maven-3.6.3/conf/setting.xml为maven全局配置文件
附加:
如果想实时替换jenkins-maven/jenkins:lts 镜像中的maven配置文件,执行
docker run --name jenkins -d -p 8080:8080 -p 50000:50000 -v /docker_data/jenkins/:/var/jenkins_home -v 宿主机目录/setting.xml:/opt/apache-maven-3.6.3/conf/setting.xml -v 宿主机目录/repository:setting文件中定义的路径 -u root jenkins-maven/jenkins:lts
基于以上做法,当使用docker history jenkins-maven/jenkins:lts 时可以很直观的看到修改内容。
重点:
以上的操作可以在任意的官方镜像上自定义自己需要的内容的镜像。