dockervolume迁移工具(Docker中数据卷volume管理的两种方式)
dockervolume迁移工具
Docker中数据卷volume管理的两种方式上篇文章给大家介绍过 docker基础知识之挂载本地目录的方法 ,今天给大家介绍Docker中数据卷(volume)管理的两种方式,具体内容如下所示:
什么是数据卷数据卷( volume ):volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供便利。
为什么要用数据卷 Docker分层文件系统存在的问题:
Docker的镜像是由一系列的只读层组合而来的,当启动一个容器时, Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题:
1、性能差。
2、多个容器之间的数据无法共享。
3、生命周期与容器相同。当删除容器时,容器产生的数据将丢失。数据卷机制的好处:
1、mount到主机中,绕开分层文件系统。
2、volume能在不同的容器之间共享和重用。
3、和主机磁盘性能相同。
4、对volume中数据的操作不会影响到镜像本身。
5、volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除。
Docker提供了volumedriver接口,通过实现该接口,我们可以为Docker容器提供不同的volume存储支持。当前官方默认实现了local这种volumedriver,它使用宿主机的文件系统为Docker容器提供volume。
Docker的volume的本质是容器中一个特殊的目录。在容器的创建过程中,Docker会将宿主机上的指定目录(一个以volume ID为名称的目录,或者指定的宿主机目录)挂载到容器中指定的目录上(使用bing mount挂载方法),故挂载完成后的宿主机目录和容器内的目标目录表现一致。
1、绑定挂载bind mount
bind mount是将主机上的目录或文件mount到容器里。使用直观高效,易于理解。
使用-v
选项指定挂载路径,格式 <host path>:<container path>
#前面是宿主机真实存在的路径:后面是容器内的路径
后台运行一个使用nginx镜像的容器并将宿主机的/data目录挂载到容器的目录/usr/share/nginx/html下 [root@server1 ~]# docker run -d --name demo -v /data:/usr/share/nginx/html nginx
调到前台运行,分别查看宿主机和容器的指定的目录下的内容,是一样的。这是因为这种方式挂载和我们平时使用mount方式是一样的,原有数据隐藏,替换为宿主机的数据。
##/data目录下这么多东西是因为docker默认数据目录是/data
[root@server1 ~]# docker exec -it demo bash
bind mount默认权限是读写rw,可以在挂载时指定只读ro。
-v选项指定的路径,如果不存在,挂载时会自动创建。 docker run -it --name vm1 \ /etc/yum.repos.d/dvd.repo:/etc/yum.repos.d/dvd.repo:ro rhel7 bash
2、docker managed volume
bind mount必须指定host文件系统路径,限制了移植性。
docker managed volume不需要指定mount源,docker自动为容器创建数据卷目录。默认创建的数据卷目录都在 /var/lib/docker/volumes 中。
如果挂载时指向容器内已有的目录,容器内原有数据会被复制到volume中。
创建卷方式:
[root@server1 ~]# docker volume create webdata #创建一个名为webdata的卷 [root@server1 ~]# docker rm -f demo #把上面创建的卷删掉 [root@server1 ~]# docker run -d --name demo -v webdata:/usr/share/nginx/html nginx #把webdata这个卷挂载到容器内的/usr/share/nginx/html目录上并运行一个容器
将创建的webdata卷挂载到容器的/usr…目录下
进入docker默认创建的数据卷目录查看卷里的内容,我们可以看到上面只创建了卷,没有写入任何东西,但卷里有内容是因为挂载时容器内指定目录里原本有东西,所以复制过来的
我们运行容器使用的是nginx镜像,访问一下,没有问题
如果挂载时没指定mount源,那么docker会自动随机创建一个文件名很长的卷
[root@server1 ~]# docker rm -f demo [root@server1 ~]# docker run -d --name demo -v /usr/share/nginx/html nginx 67ab13a7b24c19c53f4ce117136b9d0e4dec93c615a0192ead919d10e6c2acae
我们使用docker inspect demo命令查看下卷的源目录
得到路径后就可以查看目录下的内容了
ls /var/lib/docker/volumes/2ca22fd769e4b7b6f5a02dd96fe8d47a6df5578074c0d340ced3ab33b25456ca/_data
bind mount 与 docker managed volume 对比
相同点:两者都是 host 文件系统中的某个路径。
不同点如图:
到此这篇关于Docker中的数据卷(volume)管理的两种方式的文章就介绍到这了,更多相关Docker数据卷volume内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- linuxdocker启动报错提示参数无效(docker 报错 Exited 1 4 minutes ago的原因分析)
- docker暴露端口无法访问(完美解决Windows10下无法对docker容器进行端口访问的操作)
- idea docker部署微服务(idea连接docker实现一键部署的方法)
- docker容器如何更改tomcat端口(Docker方式启动tomcat访问首页出现404错误)
- dockerpull的镜像位置(解决docker pull镜像报错的问题)
- docker 跨主机的网络通信(docker 基于golang镜像构建 ssh服务的方法)
- dockerfile镜像案例(Dockerfile构建自定义镜像的实现)
- windows docker 使用数据库教程(docker安装并持久化postgresql数据库的操作步骤)
- docker的安装部署(Docker快速安装Zookeeper的详细教程)
- dockerfile挂载目录(解决docker run中使用 ./ 相对路径挂载文件或目录失败的问题)
- docker容器端口和内部进程(Docker动态给容器Container暴露端口操作)
- docker 网络映射启动失败(解决docker安装完成报:bridge-nf-call-iptables is disabled问题)
- docker时区问题和迁移数据问题(docker时区问题和迁移数据问题)
- 查看docker容器进程运行状态命令(docker容器内要启动两个进程时Dockerfile的实现代码)
- docker node 分阶段构建(Docker安装、创建镜像、加载并运行NodeJS程序的详细过程)
- docker如何查看容器目录(docker 查看容器的挂载目录操作)
- 肌肉小子陈康, 亚洲巨兽 黄哲勋,哪个才是你的菜(肌肉小子陈康亚洲巨兽)
- 新闻周刊 青岛网红 赵厂长 编段子一箩筐输出快乐,陪父亲十二载勇斗病魔(新闻周刊青岛网红)
- 44岁夏雨演谋女郎爸,大其24岁却看不出,互动不怕袁泉吃醋(44岁夏雨演谋女郎爸)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
- 这个全椒人被通报表彰,看看你认识吗(这个全椒人被通报表彰)
热门推荐
- CSS font-family
- service服务启动失败(service unavailable解决方法)
- python 常用爬虫库(Python常用爬虫代码总结方便查询)
- python实用教程(Python简直是万能的,这5大主要用途你一定要知道!推荐)
- vscode快速生成html框架(VSCode 自定义html5模板的实现)
- python中如何清空列表数据(Python批量删除只保留最近几天table的代码实例)
- html5video怎么优化(HTML5 video循环播放多个视频的方法步骤)
- 如何挑选企业云主机的配置(看云主机配置哪些才是关键?)
- python异常信息处理(Python使用修饰器进行异常日志记录操作示例)
- windows 2003服务器系统安装(win2003云服务器安装西部数码网站助手教程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9