版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Docker容器技术与应用湖北轻工职业技术学院Docker网络和数据卷管理项目4项目背景随着云计算技术的普及,容器化部署成为企业构建应用的重要方式。在生产环境中,业务系统往往由多个服务组件容器构成,它们之间的高效协作、数据的持久化存储以及跨容器的数据共享变得不可或缺,这使Docker网络和数据卷管理的需求愈发凸显。Docker网络和数据卷管理项目4在生产环境中,经常会碰到需要多个服务组件容器共同协作、对数据进行持久化,或者在多个容器之间共享进程数据等操作。本项目通过2个任务介绍了Docker网络管理、数据卷管理的内容,可实现跨主机甚至跨数据中心的通信,以及容器内数据的共享、备份和恢复。项目四:Docker网络和数据卷管理目录任务4.1、Docker网络管理任务4.2、Docker数据卷管理Docker网络管理回顾1、Docker网络模式的配置和使用2、Docker容器互连的方法知识目标了解Docker存储技术。掌握Docker数据卷和数据卷容器的使用。能力目标掌握Docker数据卷的使用。掌握Docker数据卷容器的使用。素质目标培养勇于探索、尊重科学的精神。树立工匠精神。公司员工通过参考操作手册,已经能较好地理解和应用Docker网络技术。但在实际应用中,存在数据无法持久化存储、无法实现容器间数据共享等的问题。通过查阅资料,小王了解到Docker数据卷适用于实现数据的持久化、容器间的数据共享,以及数据的备份、恢复和迁移等应用场景。因此,小王继续编写Docker数据卷管理操作手册,以供公司相关技术人员学习。任务4.2Docker数据卷管理任务要求4.2任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷Docker镜像和容器采用的是分层结构,容器由顶部的一个可写的容器层和若干个只读的镜像层组成,容器本身的数据就存放在这些层中,这种分层结构正是由Docker存储驱动来实现的。理想情况下,只有很少的数据需要写入容器的可写层,更多的情形是要使用Docker卷来写入数据。但是,有些工作负载要求写入容器的可写层,这就需要使用存储驱动。存储驱动控制镜像和容器在Docker主机上的存储管理方式。任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷容器本地存储与Docker存储驱动:每个容器都被自动分配了本地存储,即内部存储。容器本地存储采用的是联合文件系统。联合文件系统实际上是由存诸驱动实现的,相应的存储驱动有aufs、overlay、overlay2、devicemapperbtrfs、zfs、vfs等。容器的本地存储是通过存储驱动进行管理的。存储驱动控制镜像和容器在Docker主机上的存储和管理方式。Docker通过插件机制支持不同的有储驱动。不同的存储驱动采用不同方去实现镜像层和写时复制策略。任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷容器本地存储与Docker存储驱动:每个Docker主机都只能选择一种存储驱动,不能为每个容器送择不同的存储驱动。使用dockerinfo命令查看Docker主机上当前使用的存储驱动。StorageDriver:overlay2#存储驱动是overlay2BackingFilesystem:xfs#底层文件系统是xfsSupportsd_type:true#支持d_typeNativeOverlayDiff:true任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷容器本地存储与Docker存储驱动:根据需要更改现有的存储驱动。在运行Linux系统的Docker主机中,基于某种存储驱动的本地存储位于“/var/lib/docker/<存储驱动>”目录之下。在Linux系统上,可以通过修改ketc/docker/daemon.json配置文件来更改存储引擎配置,修改完成之后需要重启Docker才能够生效。将存储驱动设置为overlay2。{“storage-driver”:“overlay2”}任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷容器与非持久化数据:容器创建时会创建非持久化存储,这是容器全部文件和文件系统保存的地方。默认情况下,在容器内创建的所有文件都存储在可写容器层,文件系统的改动都发生在容器层。这意味着存在以下问题:这类数据从属于容器,生命周期与容器相同,会随着容器的删除而被删除。当该容器不再运行时,数据不会持久保存,如果另一个进程需要,则可能很难从该容器中获取数据。容器的可写层与运行容器的Docker主机紧密耦合,无法轻松地将数据转移到其他位置。写入容器的可写层需要Docker存储驱动管理文件系统。存储驱动使用Linux内核提供的联合文件系统,其性能不如直接写入主机文件系统的Docker卷。任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷Docker容器有两类存储方案,一类是由存储驱动(StorageDriver)实现的联合文件系统;另一类是以外部挂载的卷(Volume)为代表的持久存储。Docker存储驱动为容器本身提供文件系统,用于管理容器的镜像层和容器层,Docker镜像是一个只读的文件系统,容器是镜像运行的环境,即在镜像的基础上再加一个可写层,因此默认情况下,所有数据写入时均写到容器的可写层中,只是这些数据会随意容器的停止而消失。为确保可以持久地存储容器的数据,Docker引入了卷存储。任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷卷又称为数据卷(DataVolume),本身是Docker主机上文件系统中的目录或文件,能够直接被挂载到容器的文件系统中。容器可以读写卷中的数据,卷中的数据可以被持久保存,不受容器当前状态的影响。从某种程度上看,存储驱动实现的是容器的内部存储,适合存储容器中的应用程序本身,这部分内容是无状态的,应该作为镜像的一部分;卷实现的是容器的外部存储,适合存储容器中应用程序产生的数据,这部分数据是需要持久化的,应用与镜像分开存放。认识Docker数据卷
数据卷是一个可供容器使用的特殊目录,它将本地主机目录直接映射到容器,可以很方便地将数据添加到容器中供其中的进程使用,类似于Linux中的mount操作。多个容器可以共享同一个数据卷。数据卷具有如下特性。
(1)容器启动时对数据卷进行初始化。
(2)数据卷可以在容器之间共享和重用。
(3)无论是容器内操作还是本地操作,对数据卷内数据的操作都会立即生效。
(4)对数据卷的操作不会影响到镜像。
(5)数据卷的生命周期独立于容器的生命周期,即使删除容器,数据也会一直存在,没有任何容器使用的数据也不会被Docker删除。4.2任务4.2Docker数据卷管理相关知识任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷持久化数据是需要保存的数据,如客户信息、财务、计划、审计日志,以及某些应用日志数据。Docker通过将主机中的文件系统挂载到容器中供容器访问,从而实现持久化数据存储,这就是容器的外部存储。即使容器删除之后,这些文件仍然存在。Docker目前支持卷和绑定挂载这两种挂载类型来实现容器的持久化数据存储。卷和绑定挂载这两种外部存储都绕过了联合文件系统,其读写操作会绕过存储驱动,并以本地主机的存取速度运行。这里以卷为例说明外部存储与本地存储的关系,如图所示。任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷卷存储在主机文件系统中由Docker管理,在Linux主机上默认在/var/lib/docker/volumes目录下。它受到保护,非Docker进程是不能修改该部分内容的。卷是Docker中持久存储容器的应用数据的最佳方式。卷也支持使用卷驱动,卷驱动可以让用户将数据存储在远程主机或云提供商处,以及其他可能的位置。可以以命名方式或匿名方式挂载卷。匿名卷(AnonymousVolumes)在首次挂载到容器中时没有指定明确的名称,因此Docker会为其随机指定一个在当前Docker主机中唯一的名称。除了名称外,命名卷(NamedVolumes)和匿名卷的其他特性相同。任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷卷由Docker创建并管理,卷适合以下应用场景。(1)在多个正在运行的容器之间共享数据。如果没有显式创建卷,是卷会在首次被挂载到容器上时创建。当容器被删除时,卷依然会存在。多个容器可以同时挂载同一卷,挂载模式可以是读写模式或只读模式。只有显式删除卷时,卷才会被删除。(2)当Docker主机不能保证具有特定目录结构时,卷有助于将Docker主机的配置与容器运行时解耦。(3)当需要将容器的数据存储到远程主机或云提供商处,而不是本地时。(4)当需要在两个Docker主机之间备份、恢复或迁移数据时,可以在停止使用卷的容器之后,备份卷所在的目录。任务4.2Docker数据卷管理相关知识4.2认识Docker数据卷容器如果用户需要在多个容器之间共享一些持久化的数据,则可以使用数据卷容器。数据卷容器是一个容器,专门用于提供数据卷以供其他容器挂载。数据卷容器操作的思想:定制生成一个容器来挂载某个目录,该容器并不需要运行,其他容器可以利用--volumes-from命令来挂载。可以多次利用--volumes-from命令从多个容器挂载多个数据卷,也可以从其他挂载了数据卷容器的容器挂载数据卷。任务4.2Docker数据卷管理相关知识4.2Docker卷管理语法dockervolume是Docker卷管理命令,其基本语法格式如下。dockervolume子命令子命令用于完成具体的卷管理任务,dockervolume子命令列表及功能说明,如表所示。任务4.2Docker数据卷管理相关知识4.2Docker卷管理语法容器的文件系统挂载用法-v选项的基本用法:-v[主机中的源:]容器中的目标[:<选项>]a)容器中第1个字段表示挂载源(来自主机的文件系统)b)第2个字段是挂载目标(容器中挂载点,可以是目录或了件路径,必须采用绝对路径的形式)rc)第3个字段是可选的,是一个以逗号分隔的选项列表,例如ro表示只读。例如:[root@docker~]#dockerrun–dit-v/opt/abc/:/opt/aaa/--nameliuyangcentos/bin/bashDocker数据卷常用操作创建数据卷
在运行容器时,可以使用“-v”标签为容器添加数据卷,如果容器中指定的文件夹不存在,则会自动生成文件夹。例如,利用nginx镜像创建nginx1容器,创建一个随机名称的数据卷,并挂载到容器的/data目录中,其代码如下。#dockerrun-dit--namenginx1-v/datanginx/bin/bash4.2任务4.2Docker数据卷管理相关知识Docker数据卷常用操作创建数据卷
可以利用dockerinspect命令查看容器挂载情况。#dockerinspect-f"{{.Mounts}}"nginx01[{volume61c967774cd54ce933ac878ce0c18d489e4f9a82c8c468db11d3bc2eaaf911ce/var/lib/docker/volumes/61c967774cd54ce933ac878ce0c18d489e4f9a82c8c468db11d3bc2eaaf911ce/_data/datalocaltrue}]//卷名为61c967774cd54ce933ac878ce0c18d489e4f9a82c8c468db11d3bc2eaaf911ceDocker在创建数据卷的时候会在宿主机的/var/lib/docker/volumes/目录中创建一个以volumeID为名的目录,并将数据卷中的内容存储到容器/data目录中。4.2任务4.2Docker数据卷管理相关知识也可创建一个指定名称的数据卷,并挂载到容器的/data目录中。#dockerrun-dit--namenginx2-vvolumetest:/datanginx/bin/bash利用dockervolumeinspect命令可以获得数据卷在宿主机中的信息。#dockervolumeinspectvolumetest[{……"Mountpoint":"/var/lib/docker/volumes/volumetest/_data","Name":"volumetest", ……}]4.2任务4.2Docker数据卷管理相关知识1.创建数据卷Docker也允许将宿主机的目录挂载到容器中。#dockerrun-dit--namebusybox2-v/user/dir:/container/dirbusybox/bin/sh上面的命令将宿主机的/user/dir本地目录挂载到容器的/container/dir目录中。宿主机的本地目录必须是绝对路径,如果宿主机中不存在该目录,则Docker会自动创建该目录。/user/dir目录中的所有内容都可以在容器的/container/dir目录中以读写的权限被访问。4.2任务4.2Docker数据卷管理相关知识1.创建数据卷[root@localhost~]#dockerexec-itbusybox2/bin/sh//进入容器/#cd/container/dir/ //切换至/container/dir目录/container/dir#touchuser.txt //创建user.txt文件/container/dir#exit //退出容器#1s/user/dir //切换至宿主机的本地目录user.txt上面的命令表明,挂载后,容器内的目录内容与宿主机的本地目录内容是一致的。Docker挂载数据卷的默认权限是读写,也可以使用:ro,指定该数据卷的权限为只读。4.2任务4.2Docker数据卷管理相关知识1.创建数据卷#dockerrun-it--namebusybox3-v/user/dir:/container/dir:robusybox/bin/sh/#cd/container/dir//container/dir#touchuser.txttouch:user.txt:Read-onlyfilesystem由于选择以:ro方式挂载,因此在容器的/container/dir目录中执行写操作会失败。Docker允许在创建新容器时,使用多个-v参数为容器添加多个数据卷。#dockerrun-it--namebusybox4-v/datal-v/data2-v/host/dir:/container/dirbusybox/bin/sh4.2任务4.2Docker数据卷管理相关知识1.创建数据卷Docker允许在创建新容器时使用多个-v参数为容器添加多个数据卷。#dockerrun-it--namenginx06-v/data1-v/data2-v/host/dir:/container/dirnginx:latest/bin/bashroot@ff9cbf4950d3:/#ls-d/data1/data2/container/dir//container/dir//data1/data2从命令执行的返回结果来看,实现了多数据卷挂载。4.2任务4.2Docker数据卷管理相关知识2.共享数据卷如果要授权一个容器访问另一个容器的Volume,则可以使用--volumes-from参数。#dockerrun-it-v/var/volume1-v/var/volume2--namefirst_containercentos/bin/sh//创建容器first_container,容器包含两个数据卷——/var/volume1和/var/volume2sh-4.2#echo"thisisavolume1">/var/volume1/test1 //创建test1文件sh-4.2#echo"thisisavolume2">/var/volume2/test2 //创建test2文件sh-4.2#exit //退出first_container容器,此时容器状态变为Exited#dockerrun-it--volumes-fromfirst_container--namelast_containercentos/bin/bash//创建last_container容器,并挂载first_container容器中的数据卷4.2任务4.2Docker数据卷管理相关知识2.共享数据卷[root@921b5745be7e/]#cat/var/volumel/test1thisisavolume[root@921b5745be7e/]#cat/var/volume2/test2thisisavolume2值得注意的是,不管first_cntainer容器是否运行,数据卷都会起作用。只要容器连接数据卷,它就不会被删除。如果一些数据,如配置文件、数据文件等,需要在多个容器之间共享,则可以创建一个数据容器,其他的容器与之共享数据卷。4.2任务4.2Docker数据卷管理相关知识3.使用Dockerfile创建数据卷
使用VOLUME指令向容器中添加数据卷的代码如下。
VOLUME/data
在利用dockerbuild命令生成镜像并以该镜像启动容器时,会挂载一个数据卷到/data中。如果镜像中存在/data目录,则该目录中的内容将全部被复制到宿主机中对应的目录中,宿主机的目录只能是“/var/lib/docker/xxx”
等类似的目录,并根据容器中的文件设置合适的权限和所有者。也可以使用VOLUME指令添加多个数据卷。
VOLUME["/data1","data2"]4.2任务4.2Docker数据卷管理相关知识4.删除数据卷利用dockerrm删除容器时,不会删除与数据卷对应的目录,即不会自动删除在/var/ib/docker/volumes中生成的与volume对应的目录。删除容器并且删除数据卷有以下3种方法。(1)利用dockervolumerm<volume_name>命令删除数据卷。(2)利用dockerrm-v<container_name>命令删除容器且删除卷。(3)利用dockerrun--rm命令,其中,--rm参数会在容器停止运行时删除容器及容器所挂载的数据卷。4.2任务4.2Docker数据卷管理相关知识4.删除数据卷#dockerrun-dit--namedel_container-v/datacentos/bin/bash[root@localhost~]#dockervolumels //列出所有数据卷DRIVERVOLUMENAMElocal 474eba8c573c13ed8d6c5e6d96ec9cecdblae7c25!25526c1c92Cb0d433d1bcb2430a#dockerrm-vfdel_container //删除del_contatainer容器del_container#dockervolumelsDRIVER VOLUMENAME4.2任务4.2Docker数据卷管理相关知识4.删除数据卷需要注意的是,利用dockerrm-v和dockerrun--rm命令删除数据卷时,只会对挂载在容器上的未命名的数据卷进行删除,并对用户指定名称的数据卷进行保留;利用dockervolumerm命令删除数据卷时,只有当没有任何容器使用数据卷时,该数据卷才能被删除。4.2任务4.2Docker数据卷管理相关知识5.备份、恢复或迁移数据卷
作为数据的载体,可以利用数据卷容器对其中的数据进行备份、恢复,以实现数据的迁移。(1)备份数据卷。例如,利用centos镜像创建centosbackup容器,窗口包含两个效据卷:/var/volumel和/var/volume2。[root@docker1~]dockerrun–it–v/var/volume1-v/var/volume2--namecentosbackupcentos/bin/bash[root@a7b804a5a4a8/]#在数据卷中添加以下数据。[root@a7b804a5a4a8/]#echo"volume1">/var/volume1/volume1.txt[root@a7b804a5a4a8/]#echo"volume2">/var/vo1ume2/vo1ume2.txt4.2任务4.2Docker数据卷管理相关知识5.备份、恢复或迁移数据卷(1)备份数据卷。
利用数据卷容器进行备份,使用--volumes-from参数创建一个加载centosbackup数据的容器,从主机挂载当前目录到容器的/backup目录中,并备份centosbackup卷中的数据。[root@docker1~]#dockerrun–it--rm--volumes-fromcentosbackup–v$(pwd):/backupcentostarcvf/backup/backup.tar/var/volume1/var/volume24.2任务4.2Docker数据卷管理相关知识5.备份、恢复或迁移数据卷#dockerrun–it--rm--volumes-fromcentosbackup–v$(pwd):/backupcentostarcvf/backup/backup.tar/var/volume1/var/volume2(--rm启动一个新的容器,执行完毕删除;--volumes-fromcentosbackup—>备份centosbackup容器中的内容;$(pwd)—>宿主机中目录,相当于“./”,即当前目录;$(pwd):/backup—>宿主机中的当前目录映射新容器中的/backup目录;tarcvf/backup/data-backup.tar/var/volume1/var/volume2—>将centosbackup容器中的数据卷内容压缩到新容器中的/backup目录下,文件名为data-backup.tar—>由于该目录与宿主机的当前目录做了映射,所以该压缩文件(即备份文件)会被备份到宿主机的当前目录)备份完成后,查看备份文件bakup.tarlsanaconda-ks.cfgbackup.tar4.2任务4.2Docker数据卷管理相关知识5.备份、恢复或迁移数据卷(1)备份数据卷。
删除容器centosbackup的/var/volumel和/var/volume2目录中的内容[root@a7b804a5a4a8/]#rm-rvf/var/volume1/var/volume2[root@a7b804a5a4a8/]#ls/var/volume1[root@a7b804a5a4a8/]#ls/var/volume24.2任务4.2Docker数据卷管理相关知识5.备份、恢复或迁移数据卷(2)恢复或迁移数据卷,可以将数据恢复到源容器中。例如,将数据卷数据恢复到centosbackup容器中,代码如下。[root@dockerl~]#dockerrun--rm--volumes-fromcentosbackup–v$(pwd):/backupcentostarxvf/backup/backup.tar-C///恢复数据卷数据到centosbackup容器中cvf/backup/backup.tar/var/volume1/var/volume2———备份卷数据为data.tartarxvf/backup/backup.tar-C/———-解压data.tar到根目录/,因tar归档中已包含了/var/volume1/var/volume2路径
[root@a7b804a5a4a8/]#cat/var/volume1/volumel.txtvolume1[rootea7b804a5a4a8/]#cat/var/volume2/volume2.txtvolume24.2任务4.2Docker数据卷管理相关知识5.备份、恢复或迁移数据卷创建容器时,挂载的数据卷路径最好和备份的数据卷路径一致。如果新建容器挂载的数据卷只是备份数据卷的一部分,那么恢复时只会恢复部分数据卷的数据。[root@docker1~]#dockerrun-it-v/var/volume1--namecentos2centos/bin/bash[root@ab2a6b1b3b1b/]#ls/var/volume1/[root@ab2a6b1b3b1b/]#1s/var/volume21s:cannotaccess/var/volume2:Nosuchfileordirectory恢复数据卷数据到centos2容器中。[root@dockerl-]#dockerrun--rm--volumes-fromcentos2-v$(pwd):/backupcentostarxvf/backup/backup,tar–C/4.2任务4.2Docker数据卷管理相关知识5.备份、恢复或迁移数据卷在centos2容器中查看恢复的数据。[root@ab2a6b1b3b1b/]#ls/var/volume1/volume1.txt[root@ab2a6b1b3b1b/]#ls/var/volume2ls:cannotaccess/var/volume2:NOsuchfileordirectory当新建容器时挂载的数据卷目录与备份路径不一致时,则抛出警告信息。[root@docker1~]#dockerrun-t-i-v/var/volume3--namecentos3centos/bin/bash[root@cf16caf7d24a/]#1s/var/volume3/[root@cf16caf7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 输血相关试题及答案
- 酒店保安部安全管理制度规定模板
- 2026年护理核心制度、护理常规培训考核试题及答案
- 冷库企业驾驶员定期维护安全操作规程
- 2026年消防安全管理规章制度与灭火疏散应急预案
- 住宅小区机电工程建设项目施工组织设计方案范文
- 变电站扣件式钢管脚手架施工方案
- 政研室面试题目及答案
- 技能等级考试(农艺工初级)精-选模拟试题及答案
- 耕整地机械操作工设备操作规程
- 2026招生计划物理类
- 2026年南阳市中心医院医护人员招聘笔试题库及答案解析
- 陕西省2026中考语文作文真题解读及范文
- 2026年内蒙古自治区专业技术人员继续教育【公需课】考试及答案
- 印刷行业印刷品质量检测SOP文件
- 2026年行政复议法培训试题及答案
- 耳鼻喉科突发性耳聋护理手册
- 《下肢外周动脉疾病临床实践指南》更新要点解读
- 《SBT 11184-2017药品流通企业关键绩效指标(KPI)体系》(2026年)实施指南
- DGTJ08-2065-2020 住宅二次供水技术标准 附条文说明
- 政府合同审查课件教学
评论
0/150
提交评论