版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
容器云服务架构与运维单元3持久化存储卷学习目标了解容器的持久化存储卷的概念、存储卷的作用、了解使用存储卷的优势与优点、不同方式的持久化存储卷实现方法、存储卷的使用场景与使用方法等。掌握Bindmounts持久化存储卷的实现与使用、Volume持久化存储卷的实现与使用等。3.1认识容器存储卷3.2实现存储卷持久化3.1认识容器存储卷3.1.1容器卷的介绍及使用场景持久化存储卷Docker提供了3种方式把数据从Host挂载到Docker容器中,其中Bindmounts、Volume可以实现持久化存储,而Tmpfs不能实现持久化存储3.1.1容器卷的介绍及使用场景持久化存储卷DockerManagedVolume:数据卷,数据存放在主机文件系统/var/lib/docker/volumes/目录下,该目录由docker管理,其它进程不允许修改,推荐该种方式持久化数据;Bindmounts:直接挂载主机文件系统的任何目录或文件,类似主机和容器的共享目录,主机上任何进程都可以访问修改,容器中也可以看到修改,这种方式最简单。tmpfs:数据暂存在主机内存中,不会写入文件系统,重启后,数据删除。3.1.1容器卷的介绍及使用场景Bindmounts实现持久化存储Bindmounts-方法一-v,
--volume参数
-v
宿主机文件/目录:容器中的文件或者文件夹路径:权限(可选项默认是可读写)
3.1.1容器卷的介绍及使用场景Bindmounts实现持久化存储Bindmounts-方法二--mount
标志:由多个名值对组成,逗号分隔,每个键值由
<key>=<value>
元组组成。主要是type类型,可以是bind、volume或tmpfs要挂载的源
source,匿名卷忽略这个字段,可以指定为
src
或
source要挂载的目的地
destination,可能被指定为
destination、dst
或
target只读选项
readonly3.1.1容器卷的介绍及使用场景Bindmounts实现持久化存储-v和--mount两者的区别如下:使用-v的时候,如果在DockerHost中不存在要挂载的文件或者目录,Docker将会自动创建,通常是一个目录。使用--mount的时候,如果在DockerHost中不存在要挂载的文件或者目录,Docker不会自动创建目录,并生成一个错误。3.1.1容器卷的介绍及使用场景Bindmounts实现持久化存储使用场景:①把Host中的配置文件共享给Host上面的容器。容器为什么自带DNS解析呢?那是因为默认情况下Host把/etc/resolv.conf挂载到它上面的容器里面了。②在DockerHost上面的开发环境和容器直接共享程序的源代码或者构建要素。例如,用户可以挂载一个Maven目录到一个容器中,每当用户在DockerHost重新建立Maven项目,容器都可以直接获取用户重新构建的Maven项目。③可以将源代码目录挂载到容器中,在Host中修改代码就能看到应用的实时效果。④将MySQL容器的数据放在Bindmounts里,这样Host可以方便地备份和迁移数据。⑤只需要向容器添加文件,不需要覆盖整个目录。3.1.1容器卷的介绍及使用场景Volume实现持久化存储Volume完全由Docker进行管理,比如Volume的创建,用户可以使用命令dockervolumecreate来简单地创建一个Volume,当容器或者服务被创建的时候,Docker也可以自动地创建一个Volume用户创建的Volume将存储在DockerHost(宿主机)的存储目录下,并由Docker进行管理。3.1.1容器卷的介绍及使用场景Volume实现持久化存储一个给定的Volume可以同时挂载到多个容器中。当没有容器使用Volume时,Volume对Docker仍然是可用的,并且不会被自动删除,使用dockervolumerm命令可以删除Volume。在挂载Volume时,可以对其命名,也可以默认其随机生成的名字。如果用户没有指定名称,则当Volume第一次挂载到一个容器时,Docker会用一个随机字符串对其进行命名,这样可以保证Volume在DockerHost(宿主机)中的唯一性。3.1.1容器卷的介绍及使用场景Volume对比Bindmounts3.2实现存储卷持久化存储卷节点的规划3.2.1持久化存储卷的使用环境准备3.2.1持久化存储卷的使用Bindmounts持久化存储卷使用将提供的nginx_latest.tar镜像包,上传至服务器的/root目录下,并使用load命令加载,[root@docker~]#dockerload-inginx_latest.tar使用命令查看镜像列表,[root@docker~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatest992e3b7be0464monthsago133MB3.2.1持久化存储卷的使用Bindmounts持久化存储卷使用Host上创建目录(因为通过--mount进行挂载时要求用户在Host上有这个目录),[root@docker~]#mkdir-p/root/nginx-test/html运行容器,将宿主机的目录/root/nginx-test/html与Nginx容器内部工作目录/usr/share/nginx/html相连,[root@docker~]#dockerrun-itd--namenginxtest-p80:80--mounttype=bind,source=/root/nginx-test/html,target=/usr/share/nginx/htmlnginx:latest7e74de9533cb3ea4b4e6b98ce1e18fd65734572fece7d7d00ab4b61f28be0b333.2.1持久化存储卷的使用Bindmounts持久化存储卷使用可以进入容器内部查看Nginx的项目目录为空(因为Host宿主机中相应的路径下没有内容),[root@docker~]#dockerexec-itnginxtest/bin/bashroot@7e74de9533cb:/#ls/usr/share/nginx/html/可修改目录内容验证存储3.2.1持久化存储卷的使用Bindmounts持久化存储卷使用Bindmounts只读模式若用户仅仅是想读取Host宿主机上的文件,而不想修改其中的内容,则可以将默认的读写模式修改为只读模式,[root@docker~]#dockerrun-itd--namenginxro-p80:80--mounttype=bind,source=/root/nginx-test/html,target=/usr/share/nginx/html,readonlynginx:latestc062f59dbc44409d6ef1651063623ae8397675dce7c9b575dff32617bc7800313.2.1持久化存储卷的使用Bindmounts持久化存储卷使用Bindmounts只读模式启动之后,可以通过dockerinspect命令查看容器中的Mounts信息,具体命令如下:[root@docker~]#dockerinspectnginxro"Mounts":[{"Type":"bind","Source":"/root/nginx-test/html","Destination":"/usr/share/nginx/html","Mode":"",
"RW":false,"Propagation":"rprivate"}3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式一使用MySQL镜像进行实验,MySQL镜像中使用了容器的Volume持久化存储(可以通过官方MySQL镜像的Dockerfile查看,当中用到了Volume持久化存储技术,查看地址为/docker-library/mysql/blob/master/8.0/Dockerfile.debian),Dockerfile内容3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式一使用提供的mysql-latest.tar上传至宿主机的/root目录下,并将该镜像加载,命令如下:[root@docker~]#dockerload-imysql-latest.tar[root@docker~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEmysqllatest2933adc350f32weeksago546MBnginxlatest992e3b7be0464monthsago133MB使用命令查看当前环境下的容器Volume,具体命令如下:[root@docker~]#dockervolumelsDRIVERVOLUMENAME3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式一使用MySQL镜像启动容器,再次查看volume,命令如下:[root@docker~]#dockerrun-d--namemysql1-eMYSQL_ALLOW_EMPTY_PASSWORD=truemysql:latestfee3c4f9ffd12afc379c7053036253375e0f76bf3f094dc4a3c4a7b31022886e[root@docker~]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESfee3c4f9ffd1mysql:latest"docker-entrypoint.s…"3secondsagoUp2seconds3306/tcp,33060/tcpmysql1[root@docker~]#dockervolumelsDRIVERVOLUMENAMElocald5e2619dc1ef20828adaafdc22e75650fcbcf6df221787f8a8c79bc3d5aabad53.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式一查看详细信息[root@docker~]#dockervolumeinspectd5e2619dc1ef20828adaafdc22e75650fcbcf6df221787f8a8c79bc3d5aabad5[{"CreatedAt":"2021-03-01T01:22:54-05:00","Driver":"local","Labels":null,"Mountpoint":"/var/lib/docker/volumes/d5e2619dc1ef20828adaafdc22e75650fcbcf6df221787f8a8c79bc3d5aabad5/_data","Name":"d5e2619dc1ef20828adaafdc22e75650fcbcf6df221787f8a8c79bc3d5aabad5","Options":null,"Scope":"local"}]3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式一删除这个容器,Volume仍然存在[root@docker~]#dockerstopmysql1mysql1[root@docker~]#dockerrmmysql1mysql1[root@docker~]#dockervolumelsDRIVERVOLUMENAMElocald5e2619dc1ef20828adaafdc22e75650fcbcf6df221787f8a8c79bc3d5aabad5[root@docker~]#ll/var/lib/docker/volumes/total24drwxr-xr-x.3rootroot19Mar101:22d5e2619dc1ef20828adaafdc22e75650fcbcf6df221787f8a8c79bc3d5aabad5-rw-------.1rootroot32768Mar101:22metadata.db3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式一设置volume别名[root@docker~]#dockerrun-d-vmysql-vol:/var/lib/mysql--namemysql1-eMYSQL_ALLOW_EMPTY_PASSWORD=truemysql:latestafb6669a83c660baf983397170c8211b127e88ab26724d6217f9f8f567bc998f[root@docker~]#dockervolumelsDRIVERVOLUMENAMElocald5e2619dc1ef20828adaafdc22e75650fcbcf6df221787f8a8c79bc3d5aabad5localmysql-vol[root@docker~]#ll/var/lib/docker/volumes/total24-rw-------.1rootroot32768Mar104:07metadata.dbdrwxr-xr-x.3rootroot19Mar104:07mysql-vol3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式二创建一个Volume,并查看Volume的详细信息,命令如下:[root@docker~]#dockervolumecreatetest_voltest_vol[root@docker~]#dockervolumeinspecttest_vol[{"CreatedAt":"2021-03-01T22:08:44-05:00","Driver":"local","Labels":{},"Mountpoint":"/var/lib/docker/volumes/test_vol/_data","Name":"test_vol","Options":{},"Scope":"local"}]3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式二刚刚创建了一个名为test_vol的Volume,进入以下的路径查看,可以看到这是一个空的卷,[root@docker~]#ll/var/lib/docker/volumes/test_vol/_data/total0使用这个空的Volume启动一个容器,将提供的Nginx容器上传至服务器内并load(命令不再赘述),启动Nginx容器并使用test_vol这个Volume,[root@docker~]#dockerrun-itd--namenginxtest-p80:80--mountsource=test_vol,target=/usr/share/nginx/htmlnginx:latestf32eafb58d9f934e93cf4718828666ded1c135f147495ee33173e75ae7e62488[root@docker~]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESf32eafb58d9fnginx:latest"/docker-entrypoint.…"3secondsagoUp2seconds:80->80/tcpnginxtest3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式二通过dockerinspectnginxtest命令查看容器的详细情况,命令如下(只截取“Mounts”部分):"Mounts":[{"Type":"volume","Name":"test_vol","Source":"/var/lib/docker/volumes/test_vol/_data","Destination":"/usr/share/nginx/html","Driver":"local","Mode":"z","RW":true,"Propagation":""}]3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式二再次查看宿主机上test_vol卷中的内容,命令如下:[root@docker~]#ll/var/lib/docker/volumes/test_vol/_data/total8-rw-r--r--.1rootroot494Sep2910:1250x.html-rw-r--r--.1rootroot612Sep2910:12index.html发现这里多了两个文件,因为用户用一个空的Volume来启动容器时,会将容器中的内容复制到用户的宿主机上。3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式二删除容器,并查看Volume仍存在,Volume中的内容也依旧存在[root@docker~]#dockerrm-fnginxtestnginxtest[root@docker~]#dockervolumelsDRIVERVOLUMENAMElocaltest_vol[root@docker~]#ll/var/lib/docker/volumes/test_vol/_data/total8-rw-r--r--.1rootroot494Sep2910:1250x.html-rw-r--r--.1rootroot612Sep2910:12index.html3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式二接下来使用有数据的Volume来启动容器,首先将test_vol中的文件进行修改,删除50x.html,然后编辑index.html,具体命令如下:[root@docker~]#cd/var/lib/docker/volumes/test_vol/_data/[root@docker_data]#lltotal8-rw-r--r--.1rootroot494Sep2910:1250x.html-rw-r--r--.1rootroot612Sep2910:12index.html[root@docker_data]#rm-rf50x.html[root@docker_data]#echo"thisisavolumetest">index.html[root@docker_data]#catindex.htmlthisisavolumetest3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式二使用test_vol这个Volume启动Nginx容器,并查看效果,命令如下:[root@docker_data]#dockerrun-itd--namenginxtest2-p80:80--mountsource=test_vol,target=/usr/share/nginx/htmlnginx:latest9f0ed866b48caf4ef3c2fa957ce8149f5fcf3c23113998b8be0c4a89a60b06d8[root@docker_data]#curlthisisavolumetest3.2.1持久化存储卷的使用Volume持久化存储卷使用Volume使用方式二可以看到,用一个现有的Volume也是可以进行挂载的,并且会将Volume中的文件挂载到容器中,覆盖掉容器中的文件。最后,尝试如下情况:如果在运行容器时不提前创建Volume,将会是什么情况?运行Nginx容器,命令如下(source=test_vol2是一个不存在的V
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省十堰市普通高中教联体2025-2026学年高一上学期12月月考语文试题
- 2025年办公楼外墙瓷砖铺贴合同协议
- 2025 小学六年级语文上册童话角色设定技巧课件
- 2025年IT设备维护服务协议
- 安徽省2025九年级英语全册Unit3CouldyoupleasetellmewheretherestroomsareSectionB课件新版人教新目标版
- 教师编面试题目范围及答案
- 深度解析(2026)《GBT 34387-2017制冷剂用阀门通 用性能试验方法 》
- 深度解析(2026)《GBT 35319-2025物联网 系统接口要求》(2026年)深度解析
- 2009年7月国开行管本科《西方行政学说》期末纸质考试试题及答案
- 深度解析(2026)《GBT 34153-2017右旋烯丙菊酯原药》
- 消化内科抗菌药物临床应用监测方案
- 2023-2024员工自购保险福利调研报告
- 2023年操作工技能考核考试-活塞式压缩机维修工考试历年重点考核试题含答案
- 燃机电厂电气设计特点
- QC成果范文:提高管道焊接质量
- 《简明地方史读本》期末测试卷附答案
- 部编版九年级语文上册期末复习课件
- 历年复试专业课笔试真题-华电09电力
- 药物临床试验与GCP课件
- 一线作业人员绩效考核管理规定
- 骨关节疾病讲解课件
评论
0/150
提交评论