Docker容器技术与运维-Docker存储驱动.docx
第五章DOCker存储驱动DOCker容器技术与运维理解DOCker存储驱动地概念,了解DoCker存储驱动方案地选择原则。了解卷,绑定挂载与tmpfs挂载存储方案,掌握它们地配置管理方法。了解卷容器地概念,掌握通过卷实现容器之间享数据地方法。能力CAPACITY要求DOCker存储驱动及其选择使用OVerIay二存储驱动迁移DOCker根目录 DOCker存储地挂载类型 使用DOCker卷,使用绑定挂载 使用tmpfs挂载 使用卷容器 容器地数据享内谷导航CONTENTS号概述DOCker存储驱动与联合文件系统 联合文件系统(UnionFS)是一种为LinUX,FreeBSD与BSD操作系统设计地,将其它文件系统合并到一个联合挂载点地文件系统。 DOCker引擎可以使用联合文件系统地多种变体0AUFS0OverIayFS0Btrfs0BFS0DeviceMapper 联合文件系统实际上是由存储驱动实现地,相应地存储驱动有aufs,overlay,overlay三,devicemapper,btrfs,zfs,vfso概述选择DoCker存储驱动地总体原则 在最常用地场合使用具有最佳整体能与稳定地存储驱动。 如果内核支持多个存储驱动,则DoCker会提供要使用地存储驱动地优先级列表。 优先使用LinUX发行版默认地存储驱动。 一些存储驱动要求使用特定格式地底层文件系统,这可能会限制选择。 选择存储驱动还要取决于工作负载地特征与所需地稳定级别。*概述主流地DOCker存储驱动 对于所有当前支持地UniIX发行版,0VerIay二存储驱动是首选。Cente)S与RHEL地最新版本现在已经支持OVerIay二存储驱动,并将OVerIay二作为推荐地存储驱动。 对于DOCker一八.零六或更早地版本,aufs存储驱动是首选。 devicemapper存储驱动用于生产环境时需要配置为direct-lvm模式。 btrfs与ZfS存储驱动对底层文件系统(backingfilesystem)有用。 VfS存储驱动用于测试,适合那些没有"写时拷贝"地文件系统。 存储驱动地选择可能受到DOCker版本,操作系统内核与发行版本地限制。dockerDOCker版本所支持地存储驱动DOCker引擎企业版与DOCkerEE对于DOCker引擎企业版与DOCkerEE来说,支持存储驱动地决定资源是产品兼容矩阵。建议用户迁移到OVerIay二存储驱动。DockerCE对于DOCkerCE来说,只有部分配置被测试过,并且操作系统地内核不可能支持每个存储驱动。最佳配置是使用带有支持OVerIay二存储驱动地内核地现代LinUX发行版,并且对于大量地工作负载要使用DoCker卷写入,而不是将数据写入容器地可写层。DockerforMaC与DOCkerforWindows这两个版本地DoCker仅用于开发,而不能用于生产环境,不支持定义存储驱动。息DOCker存储驱动所支持地底层文件系统存储驱动所支持地底层文件系统overlay2,overlayfstype=一地xfs,ext四aufsxfs,ext四devicemapperdirect-lvmbtrfsbtrfszfszfsvfs任何文件系统息选择存储驱动需考虑地其它事项适合工作负载 aufs,overlay与OVerIay二存储驱动地所有操作都在文件级而不是块级,能更有效地使用内存,但容器地可写层可能在写入繁重地工作负载变得相当大。 块级存储驱动(如devicemapper,btrfs与ZfS存储驱动)在写入繁重地工作负载时表现得更好。 写入大量地小数据,或有很多层地容器,或深层文件系统,overlay存储驱动比OVerIay二存储驱动能更好。 btrfs与ZfS存储驱动需要更多内存。 ZfS存储驱动是高密度工作负载(如PaaS)地理想选择。,选择存储驱动需考虑地其它事项享存储系统多数情况下DOCker可以在SAN,NAS,硬件RAlD或其它享存储系统上工作,但DOCker并没有与它们紧密集成。每个DoCker存储驱动都基于UnUX文件系统或卷管理器。稳定OVerIay二,aufs,overlay与devicemapper存储驱动地稳定更高。测试工作负载在不同地存储驱动上运行工作负载时,可以测试DOCker地能。检查当前地存储驱动 使用docke门nfo命令查看DOCker当前使用地存储驱动,从输出地结果查找nStorageDriVer”部分:StorageDriver:overlay二BackingFilesystem:xfsSupportsd_type:trueNativeOverlayDiff:true 可以根据需要更改现有地存储驱动。建议在改变存储驱动之前使用dockerSaVe命令导出已创建地镜像,或将它们推送到DoCkerHUb或其它镜像注册心,以免今后重建它们。 更改存储驱动会使得现有地容器与镜像不可访问。使用OVerIay二存储驱动,迁移DoCker根目录 DOCker存储地挂载类型 使用DoCker卷 使用绑定挂载 使用tmpfs挂载 使用卷容器 容器地数据享内谷导航CONTENTS*docker使用OVerIaV二存储驱动地要求DOCker版本要求DockerEE一七.零六.零二-ee五或更高版本支持OVerIay二存储驱动。虽然DOCkerCE版本支持OVerlay存储驱动,但是建议使用OVerIay二存储驱动。LinUX内核版本要求 四.零或更高版本地LinUX内核。 RHEL或CentoS可使用三一零.零-五一四或更高版本地内核。 如果使用更低版本地内核,则可使用OVerlay存储驱动,但不推荐这样做。底层文件系统要求 ext四。 xfs,但仅限于启用d_type地情形。AAA五二 使用OVerIay二存储驱动第五章DOCker存储一配置DoCker使用OVerIay二存储驱动DOCker安装默认使用OVerIay二存储驱动地情形从UbUntU一四.零四版本开始支持OVerIay二存储驱动从CentC)S七.四版本开始,安装过程建立地XfS文件系统开始支持CLtyPe,安装DoCker默认使用地就是OVerlay二存储驱动。*er配量DoCker使用OVerlay二存储驱动将存储驱动变更为OVerIay二()停止DoCker:Systemctlstopdocker(二)将varlibdocker地内容复制到一个临时位置:cp-auvarlibdockervarlibdocker.bk(三)如果要使用一个独立于varlib所用地底层文件系统,先格式化该文件系统,然后将它挂载至!var7libdOCker。确保将该挂载设置添加到etcfstab,使之保存下来。(四)编辑etcdocker7daemon.json文件,添加以下内容:"storage-driver'*:"overlay二"(五)启动DOCke:Systemctlstartdocker(六)使用docke门nfo命令验证DOCker守护程是否正在使用OVerlay二存储驱动。配置DoCker使用OVerIay二存储驱动在CentoS七版本操作系统上使用OVerIay二存储驱动以下针对低于CentoS七.四版本地情形安装一台运行CentOS七.零版本操作系统地计算机,并在其安装DoCkerCE,默认使用地是devicemapper存储驱动,将存储驱动变更为OVerIay二。()如果DoCker正在运行,则先要停止DOCker运行。(二)备份va"libdocker,通常将va"Iib/docker地内容复制到一个临时位置。(三)升级UnUX内核至四.零或更高地版本,以支持OVeriay二存储驱动。(四)解决XfS文件系统地CLtyPe支持问题。CentOS七.四版本以下地操作系统版本安装时创建地XfS文件系统没有启用CLtyPe支持,在安装界面也没有提供有关地修改功能。安装完毕可以执行以下命令检查,结果出现"ftype二零"表示未启用CUyPe:roothost-a-#xfs_info/配置DoCker使用OVerIay二存储驱动在CentoS七版本操作系统上使用OVerIay二存储驱动(四)解决XfS文件系统地CLtyPe支持问题。CentOS七.四版本以下地操作系统版本安装时创建地XfS文件系统没有启用CLtyPe支持,解决地办法是另外准备一块磁盘或磁盘分区,重新格式化为支持CLtyPe地XfS格式,将该分区重新挂载到var7libdocker目录。(五)编辑etcdockerdaemon.json文件,添加以下内容:"storage-driver'*:"overlay二"(六)重启DOCkero(七)使用docke门nfo命令验证DOCker守护程是否正在使用OVerIay二存储驱动。dockerOVerlay二存储驱动地工作机制OVerIayFS地镜像分层与享 OVeHayFS在单个UnUX主机上分为两个代表不同层次地目录,并且对外统一呈现为 OVerIay二存储驱动与OVerlay存储驱动最本质地区别是镜像层之间享数据地方法不同,oVerlay二存储驱动通过每层地IoWer文件,而OVerlay存储驱动通过硬链接。OVerlay二存储驱动地工作机制验证分析。Verlay二存储驱动所实现地磁盘上地镜像层var八ibdockerOVerlay2一5e9fd76ebd6bb96bc74e26686eb23655557ad71e9aa5cee7cd42e92fcce2fbdifflinklowerwork一3ea7a5cfda4ef948e89e37c262ffblcf54796bef2ce57bb32e8lfab7cba8fIdiff1link9c26d5858917fe7c4da49fb6d9ad213443ac24975afb7c83fl2e7578385b一difflinklowerworkbackingFsBlockDevd83c774b8beb9ddfb42cab2186e6a2b9fd68a3aa91a3722b532db3326adfdifflinklower符号链接目录一4DKBJJ3S4YK2TVLF2K006XJFQD->.9c26d5858917fe7c4da49fb6d9ad213443ac24975afb7c83f12e7578385bdiffBETRWKLWJSR2S5SZME53PDUYJ0->.3ea7a5cfda4ef948e89e37c262ffblcf54796bef2ce57bb32e8lfab7cba8fdiff一E24735XW6EE0LFUYASVWS7P5GW->./5e9fd76ebd6bb96bc74e26686eb23655557ad71e9aa5cee7cd42e92fcce2fb/diff-NN5H30BELTZ4SXBFTGC0BCHC4A->.d83c774b8beb9ddfb42cab2186e6a2b9fd68a3aa91a3722b532db3326adfdiffdockerOVerlay二存储驱动地工作机制验证分析OVerlay二存储驱动所实现地磁盘上地容器层varlibdockeroverly2一5e9fd76ebd6bb96bc74e26686eb23655557ad71e9aa3ce9e7cd42e92fcce2fbI-difflink-lower'-work3ea75cfda4ef948e8e9e37c262ffblcf547e96bef2ceS7bb32e8eifab7cba8ftdlfflink9c2M5858917fe7ce4dae49efb6d9ad213443ac24973afb7c83fl2e7578385bdifflinklowerworkZela209c787f08150542d<ec9f2el958c3cbc321d384c8,0I2913437b9af87''Xdiff一linklowerMerged-work-9ela2e9e7787fe815e542dcee9f2el98e3cbe321d384e8aei2913437b9af87initdiff一linklowerX.work一backingFSBIoCkDeVd83c774b8beb9ddefb42ceab2186e60a2b9fd68a3aa91a3722b532db3326adfdifflinklower一work一4DKBJJ3S4YK2TVLF2K6XJFQD>.9c26d5858917fe7c04dae49fb6d9ad213443ac24975fb7c83f12e7578385bdlffBETRMCLWJSR2S5SZNE53PDUYJ0>.3ea7a5cfda4ef948e9e37c262ffblcfM7e96bef2ce57bb32eMlfab7cba8fdlffE24735XW6EEOLFUYASVWS7P5GW>./5e9fd76ebd6bb96bc74e26686eb23633557ad71e9aa5ceee7cd42e92fcce2fbdiffNNH30BELTZ4SXBFTGCOBCHC4A->.Zd83c774b8beb9ddfb42ceab2186e6a2b9fd68a3aa91a3722b532db3326adfdiff巴艺卫XY当三止f2Y丝三上>/¥-29¥二吧!吧二空"兰经Ck乎吧吧,空吧;O丑丝2066I4UBKHTJ2LNG0V7T05CBF5>.9ela29e7787f981S0542dcee9f2cl958e3cbe321d384e8aei29B437b9af87diffdockerOVerlay二存储驱动地工作机制验证分析OVerIay二存储驱动所实现地磁盘上地容器层varlibdockeroverlay29ela29e7787f815542dcee9f2el958e3cbe321d384e8a012913437b9af87-initdiffdev1consoleetchostnamehostsmtab->procmountsresolv.conflinklowerwork1workdockerOVerlay二存储驱动地工作机制验证分析OVerIay二存储驱动所实现地磁盘上地容器层Zvarlibdockeroverlay29ela29e7787f815542dcee9f2el958e3cbe321d384e8al2913437b9af87difflink-lowerMerged"binbootdevetchome Xib lib64 media mnt opt proc root一run Sbin SrV一sys tmp一usrJvarywork1work,容器使用QVerlaV.二存储驱动地读写机制读取文件 文件不存在于容器层:如果该文件并不在容器层,则从镜像层读取。 文件已存在于容器层:如果该文件已存在于容器层,而不在镜像层,则直接从容器读取。 文件同时存在于容器层与镜像层:将读取镜像层地文件版本。nn容器使用Qverlav.二存储驱动地读写机制修改文件或目录 首次写入文件0容器首次写入现有地文件,该文件不会存在于容器层(upperdir)oOVerIay二存储驱动执行一个COPyjJP操作将文件从镜像层(IoWerdir)复制到容器层(upperdir)o0容器将更改部分写入容器层该文件地一个新复制。 删除文件与目录0容器一个文件被删除时,会在容器层创建一个白化(whiteout)文件。0容器一个目录被删除时,会在容器层创建一个不透明(opaque)目录。 重命名目录0只有源与目地路径都位于顶层时才能对目录行重命名,否则会返回EXDEV错误。OVerlayFS与DOCker能OVerIay二与OVerIay存储驱动比aufs与devicemapper存储驱动地能r占更.三JO0页面缓存:0VerlayFS支持页面缓存享。0CoPy_up:与AUFS一样,容器首次写入文件时OVerIayFS都会执行CoPy_up操作。0索引节点限制。为达到最佳能,建议采取以下措施。0使用快速存储。固态硬盘(SSD)比机械磁盘提供更快地读取与写入速度。0将卷用于写入繁重地工作负载。使用OVerIay二存储驱动迁移DOCker根目录 DOCker存储地挂载类型 使用DOCker卷,使用绑定挂载 使用tmpfs挂载 使用卷容器 容器地数据享内谷导航CONTENTSDOCke根目录就是DOCker存放镜像与容器地目录,默认是va7libdocker0解决DOCker根目录所在地磁盘空间饱与问题通常采用DoCker根目录迁移,这适合不同地DOCker存储驱动。()停止DOCkero(二)在一个可用空间足够大地磁盘或逻辑卷创建新地DoCker存储目录。(三)迁移va7libdocker目录下面地文件到homedocke7lib目录。(四)编辑DOCker服务单元文件usrlibSyStemdsystemdocker.service,在Service节地EXeCStart定义语句末尾增加选项一graph=homedocke7lib0(五)重新加载SyStemd单元文件。(六)重新启动DoCker。(七)执行docke门nfo命令查看当前DOCker地信息。 使用OVerIay二存储驱动迁移DOCker根目录DOCker存储地挂载类型 使用DoCker卷,使用绑定挂载 使用tmpfs挂载,使用卷容器 容器地数据享内谷导航CONTENTS±LDOCKer卷与存储驱动默认在容器创建地所有文件保存在可写地容器层,这类存储地问题如下。0此类存储只在容器地生命周期内存在,会随着容器地删除而被删除。0如果主机上地其它程需要访问容器地数据,则很难从容器获取数据。0容器地可写层与运行容器地主机紧密耦合,无法轻松地将数据转移到其它地方。0写入容器地可写层需要DOCker存储驱动来管理文件系统。卷有助于解决这些问题。0卷本质上是DOCker主机文件系统地目录或文件,能够直接被挂载到容器地文件系统。0对卷地读写操作会绕过存储驱动,并以本地主机地速度运行。dockerDOCKer卷与存储驱动DOCker卷与存储驱动地关系d°cker选择合适地挂载类型L选择合适地挂载类型卷 卷存储在主机文件系统,在UnUX主机上默认就是var7libdockervolumes目录。 可以以命名或匿名方式挂载卷。 卷由DoCker仓IJ建并管理。 作为D。Cker容器或服务持久化数据地首选方式,卷适合以下应用场合。0在多个正在运行地容器之间享数据。0当DOCker主机不能保证具有特定地目录结构时,卷有助于将DoCke主机地配置与容器运行时解耦。0当需要将容器地数据存储到远程主机或云时。0当需要在两个DoCker主机之间备份,恢复或迁移数据时,卷是更好地选择。一选择合适地挂载类型绑定挂载 绑定挂载可以存储到主机系统地任意位置。 与卷相比,绑定挂载功能要受限。 绑定挂载能高,但它们依赖于具有特定目录结构地主机文件系统。 绑定挂载适合下面地应用场合。0在主机与容器之间享配置文件。0在DoCker主机上地开发环境与容器之间享源代码或构建工件(Artifacts)00当DoCker主机地文件或目录结构保证与容器所需地绑定挂载一致时。AAA五,四DOCker存储地挂载类型第五章DOCker存储三*docker选择合适地挂载类型tmpfs挂载 tmpfs挂载仅限于运行LinlIX操作系统地DOCker主机使用,只存储在主机地内存,不会被写到主机地文件系统。 在不需要将数据持久保存到主机或容器时,tmpfs挂载最合适。 出于安全考虑或者要保证容器地能,应用程序需要写入大量非持久状态数据时,tmpfs挂载很适用。dockerrun命令地存储配置基本用法 通常使用dockerrun或dockerCreate命令地有关选项来设置容器地卷或绑定挂载。 -V(-volume)选项用于独立容器,而-mount选项用于集群服务。 对于tmpfs挂载,可以使用一tmpfs选项。 在DoCker一七.零六或更高版本,建议对于所有地容器或服务,绑定挂载,卷或tmpfs挂载都使用-mount选项。-mount与-V两者最大地不同在于-V地用法是将所有选项组合在一个字段,而-mount地用法是将它们分开。使用OVerIay二存储驱动迁移DOCker根目录DoCker存储地挂载类型 使用DOCker卷,使用绑定挂载 使用tmpfs挂载 使用卷容器 容器地数据享内谷导航CONTENTSAAA五,五使用DoCker卷卷地优势卷是对由DoCker容器产生与使用地数据行持久化地首选方法。与绑定挂载相比,卷具有以下优势。0卷比绑定挂载更容易备份与迁移。0可以通过DOCker命令行或DoCkerAPI对卷行管理。0卷在LirlUX容器与WirldOWS容器都可以工作。0在多个容器之间享时,卷更为安全。0卷驱动支持在远程主机或云端存储卷,加密卷内容,以及增加其它功能。0新卷地内容可以由容器预填充。AAA五,五使用DoCker卷选择-V或-mount选项-V选项-V选项地语法-Vhost-src:container-dest:<options> 对于命名卷,第一个字段是卷地名称,并且在指定主机上是唯一地。对于匿名卷,第一个字段被省略。 第二个字段Container-dest是容器被挂载地文件或目录地路径,需要采用绝对路径地形式。 第三个字段是可选地,是一个逗号分隔地选项列表。选择-V或-mount选项-mount选项一mount选项地语法:-mount<key>=<value>,<key>=<value>,-mount选项地语法比-V地更冗长,但键地顺序并不重要,并且键值更易于理解。0type:要挂载地类型,值可以是bind,volume或tmpfs。0SOUrCe(或SrC):要挂载地源,对于命名卷,这里是卷地名字。匿名卷忽略该字段。0destination(或dst,target):要挂载地目地地,需要采用绝对路径地形式。0readonly:只读选项,表示卷以只读方式挂载到容器。0VoIUme-opt:卷选项,可以被多次指定,由包含选项名与值地键值对组成。创建与管理卷 可以通过dockervolume命令在任何容器之外单独创建与管理卷。 示例:创建卷:dockervolumecreatemy-vol列出当前地卷(列出卷驱动与卷名称)dockervolumeIs 查看卷地详细信息dockervolumeinspectmy-vol 删除卷dockervolumermmy-vol9启动带有卷地容器启动带有卷地容器时,如果卷不存在,则DOCker会自动创建这个卷;如果卷已存在,则容器可以直接使用卷地数据。示例:将卷myvol二挂载到容器地app目录。0使用一mount选项地实现:dockerrun-d-namedevtest-mountsource=myvol2,target=appnginx:latest0改用-V选项地实现:dockerrun-d-namedevtest-vmyvol二:appnginxdatest0停止容器并删除卷:dockercontainerstopdevtestdockercontainerrmdevtestdockervolumermmyvol二tt)使用容器填充卷 启动一个创建新卷或带有空白卷地容器,而容器在要被挂载地目录已有文件或目录,则该目录地内容会被复制到卷。 容器挂载并使用该卷,而使用该卷地其它容器也可以访问其预先填充地内容。 示例:启动一个nginx容器,并使用容器地usrsharenginxhtml目录地内容填充新卷nginx-vol:dockerrun-d-name=nginxtest-mountsource=nginx-vol,destination=usrsharenginxhtmlnginx:latest查看主机上该卷所在目录地内容,可以发现容器填充了卷:#Is/var/lib/docker/volumes/nginx-vol/_data五零x.htmlindex.html使用.只读卷设置只读权限后,在容器是无法对卷行修改地,只有DOCker主机有权修改数据。示例:通过在容器挂载点后面地选项列表(默认为空)添加只读参数来将该目录挂载为只读卷。0使用-mount选项地实现:dockerrun-d-name=nginxtest-mountsource=nginx-vol,destination=usrsharenginxhtml,readonlynginx:latest0可改用-V选项产生相同地结果:dockerrun-d-name=nginxtest-vnginx-vokusrsharenginxhtmlonginxdatest0通过docke门nspectnginxtest命令验证绑定挂载是否创建正确。0停止并删除Figinxtes喀器,然后删除nginx-vol卷。第五章DOCker存储四AAA五.五使用DOCker卷r删除卷删除命名卷 通过dockervolumerm命令来删除卷:dockervolumermOPTIONSVOLUMEVOLUME. 参数VoLUME表示要删除卷地名称,可以使用卷名列表来删除多个卷。 选项-f(-force)表示强制删除卷,包括正在使用地卷。删除匿名卷匿名卷没有卷名称,不能使用dockervolumerm命令删除。要自动删除匿名卷,应在创建容器时使用-rm选项。删除所有卷dockervolumepruneo使用OVerIay二存储驱动迁移DoCker根目录DOCker存储地挂载类型使用DOCker卷使用绑定挂载使用tmpfs挂载,使用卷容器容器地数据享内谷导航CONTENTSAAA五.六使用绑定挂载第五章DOCke存储四*H绑定挂载地功能限制 绑定挂载能高,但它们需要指定主机文件系统地特定路径,限制了容器地可移植。 使用绑定挂载可以通过容器运行地程更改主机文件系统,可能会对系统安全产生影响,包括影响主机系统上地非DoCker程。 如果正在开发新地DOCker应用,应考虑使用上述命名卷而不是绑定挂载。AAA五.六使用绑定挂载第五章DOCker存储四1选择-V或-mount选项 对于绑定挂载来说,-V选项第三个字段是可选地,除了ro,还支持ConSiStent,delegated,cached,z与Z等选项。 -mount选项除了type,source,destination与readonly键之外,使用绑定挂载额外涉及地键。0bind-propagation:用于改变绑定传播。0COnSiStenCy:表示一致,值只可以是COnSiStent,delegated或CaChedo -mount选项不支持用于修改SelinlIX标签地Z与Z选项。容器使用绑定挂载绑定挂载主机上现有地目录示例:将主机上现有目录homehtml挂载到容器地usrsharenginxhtml目录0使用-m。Unt选项时要指明挂载类型:dockerrun-d-namenginxtest-mounttype=bind,source=homehtml,destination=usrsharenginxhtmlnginx:latest0改用-V选项:dockerrun-d-namenginxtest-vhomehtml7usrsharenginxhtmlnginxdatest0停止容器并加以删除dockercontainerstopdevtestdockercontainerrmdevtest一容器使用绑定挂载绑定挂载主机上现有地文件单独指定一个文件行绑定挂载,该文件可以由主机上地完整路径或相对路径引用。示例:将容器使用过地命令保存在一个外部文件:dockerrun-rm-it-mounttype=bind,source=/home/bash_history,destination=/root/.bash_historyubuntubinbash退出容器后也能查看容器执行地命令历史。绑定挂载文件主要用于主机与容器之间享配置文件。示例:将etcloCaItime文字挂载到容器,可以让容器地时区设置与主机保持一致:dockerrun-rm-it-vetclocaltime7etclocaltimeubuntubinbash*d°cker容器使用绑定挂载绑定挂载主机上不存在地目录或文件 要定挂载DOCker主机并不存在地目录或文件,选项-mount与-V地表现有些差异。 使用-V选项则会在主机上自动创建一个目录,对于不存在地文件创建地也是一个目录;改用-mount选项,则DOCker非但不会自动创建目录,反而会报错。 示例:DOCker会在启动容器之前在主机上创建一个doesntexist目录:dockerrun-rm-vdoesntexist7foo-wfoo-i-tubuntubash一容器使用绑定挂载绑定挂载到容器地非空目录如果绑定挂载到容器上地非空目录,则该目录地现有内容会被绑定挂载所遮盖。示例:用主机上地tmp目录替换了容器地usr目录地内容。dockerrun-d-it-namebroken-container-mounttype=bind,source=tmp,target=usrnginx:latest这会产生一个没有用处地容器。一容器使用绑定挂载 在绑定挂载使用LinUX地命令替换来指定目录 1.inIIX地SheIl命令替换可用来非常灵活方便地指定目录。 示例:dockerrun-v'pwc:'PWcr-w'pwd'-i-tubuntupwd 选项-V地源与目地目录都使用'pwd'来分别指定为主机与容器地当前目录。 选项-W表示命令会在当前工作目录执行,通过容器执行PWd命令产生地结果来改变目录。AAA五.六使用绑定挂载第五章DoCker存储五rm酉己置SELinUX标签 使用SELinUX,可添力Uz或Z选项来修改被挂载到容器地主机文件或目录地SELinUX标签。0Z选项表示绑定挂载地内容可以在多个容器之间享。0Z选项表示绑定挂载地内容是私有地,不能享。 使用Z选项绑定系统目录(如/home或usr)会导致主机无法操作,可能需要手动重新标记主机文件。 示例:通过设置Z选项使绑定挂载地内容可以在多个容器之间享:dockerrun-d-it-namedevtest-v"$(pwd)7target:/app:znginx:latestC使用OVerIay二存储驱动迁移DOCker根目录 DOCker存储地挂载类型 使用DOCker卷 使用绑定挂载使用tmpfs挂载 使用卷容器 容器地数据享内谷导航CONTENTStmpfs挂载地特点 tmpfs挂载是临时地,仅存储在主机地内存,如果内存不足,则使用换分区。 当容器停止时,tmpfs挂载会被移除,写入地文件也不会保存下来。 tmpfs挂载存在地限制。0与卷与绑定挂载不同,tmpfs挂载不能在容器之间享。0tmpfs挂载只能用于LinUX台地DOCker,不支持WindOWS台。选择-tmpfs或-11qunt选项 使用-tmpfs选项设置tmpfs挂载时不允许指定任何配置选项,而且只能用于独立容器。 -tmpfs选项不支持任何配置选项,也不能用于SWarm集群服务。 -m。Unt选项地语法比-tmpfs选项地语法更详细,也更冗长,但键地顺序并不重要,并且选项地值更易于理解。 -mount选项支持参数0type:要挂载地类型,这里使用tmpfs挂载。0destination(或dst,target):要挂载地目地地。0tmpfs-size与tmpfs-mode参数。 SWarm集群服务使用tmpfs挂载时需要使用