容器内的Jenkins使用docker部署服务,服务数据文件挂载问题
问题
docker 容器运行服务更推荐是那种无状态的服务,这样可以做到 “ 开箱即用 ”,需要持久化存储的话使用存储卷挂载数据库文件即可,这都是基于在宿主机上执行的;
现在Jenkins是在docker容器中运行,并需要使用docker部署服务;在Jenkins容器中如何将部署的项目数据库文件挂载到宿主机呢?这里Jenkins是基于可以控制宿主机docker的情况下,如何做到可以看看我的这篇文章:Docker + Jenkins + gitee 实现CICD环境搭建
怎么解决?
这里把问题抽象转化一下:在容器中使用宿主机的docker,启动一个容器,让该容器把指定目录挂载到宿主机;
结合存储卷相关的操作,找到了一个较为有效的方法:
Jenkins容器可以控制宿主机的docker;
我们做一个实验测试一下:
先创建一个volume存储卷:
docker volume create mytestvol1
docker volume ls # 查看是否创建成功
启动测试的Jenkins容器,进入Jenkins容器:
docker run -it --name mybusybox -v mytestvol1:/data busybox
在Jenkins容器中拉取一个busybox镜像并运行,把busybox镜像数据目录挂载到创建的存储卷中:
这里可以看到文件发生了变化,说明这里是busybox的目录;
验证是否挂载上:
进入busybox容器指定挂载的目录:
再打开一个终端:
查看一个存储卷信息:
docker inspect mytestvol1
进入挂载点目录:
cd /data/var/lib/docker/volumes/mytestvol1/_data
查看目录文件(这里我之前测试过一次,所以有文件):
返回原来的终端(容器终端),创建文件并写入内容
再次返回新开的终端进行查看:
发现一个新的文件test1,并且内容也是666;这也就说明挂载成功了;
在宿主机中删除掉原本的容器,再次启动busybox:
发现文件还在方法成立;
Jenkins容器和宿主机共用一个docker,利用这一特性,提前创建存储卷并进行挂载;
以上便是本文的全部内容,希望对你有所帮助,最后感谢阅读!
原文地址:https://blog.csdn.net/2202_75605090/article/details/143819333
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!