背景
目前有个docker启动的jenkins机器在运行,该jenkins服务上已经安装了很多需要的插件。现在想写个shell脚本在一台干净的机器上一键安装docker,拉取jenkins镜像并启动容器,但是这个jenkins容器中需要有之前安装过的插件。
问题
直接使用docker commit命令从原先的jenkins容器创建一个新的镜像,在另外的机器上启动这个镜像,发现jenkins服务没有任何插件,还是需要自己安装插件。commit没有生效的原因是因为之前的jenkins容器启动时挂载了宿主机的目录(/var/jenkins_home),安装的插件都在宿主机。
方案
将之前的jenkins容器挂载的目录整个打包,直接启动时解压这个包放到指定的目录,启动jenkins容器时挂载这个目录即可。(后续定期对这个目录进行打包留作备份,防止数据丢失)
cd /var
tar -cvf jenkins_home.tar jenkins_home
shell脚本
这里的操作环境是内网,所以docker是离线安装,内网搭建的harbor私服(配置了HTTPS访问),配置了DNS。
脚本名:install.sh
同级目录下的文件:docker-18.06.1-ce.tgz、ca.crt、jenkins_home.tar
#!/bin/bash
#安装docker
tar -xvf docker-18.06.1-ce.tgz
#把解压的docker文件移到/usr/bin目录下
cp docker/* /usr/bin
#删除解压的目录
rm -rf docker
#docker配置文件
if [ ! -f /etc/systemd/system/docker.service ]; then
touch /etc/systemd/system.docker.service

本文介绍如何通过shell脚本在内网环境下一键安装Docker,配置Docker服务,并从私服拉取Jenkins镜像,同时保留之前安装的所有插件。通过将插件所在目录打包并挂载至新容器,实现Jenkins服务及其插件的一键迁移。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



