容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)4.2 Dcker數(shù)據(jù)卷管理_第1頁
容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)4.2 Dcker數(shù)據(jù)卷管理_第2頁
容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)4.2 Dcker數(shù)據(jù)卷管理_第3頁
容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)4.2 Dcker數(shù)據(jù)卷管理_第4頁
容器技術(shù)與應(yīng)用(第2版)(微課版) 課件 任務(wù)4.2 Dcker數(shù)據(jù)卷管理_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Docker容器技術(shù)與應(yīng)用湖北輕工職業(yè)技術(shù)學(xué)院Docker網(wǎng)絡(luò)和數(shù)據(jù)卷管理項(xiàng)目4項(xiàng)目背景隨著云計(jì)算技術(shù)的普及,容器化部署成為企業(yè)構(gòu)建應(yīng)用的重要方式。在生產(chǎn)環(huán)境中,業(yè)務(wù)系統(tǒng)往往由多個(gè)服務(wù)組件容器構(gòu)成,它們之間的高效協(xié)作、數(shù)據(jù)的持久化存儲(chǔ)以及跨容器的數(shù)據(jù)共享變得不可或缺,這使Docker網(wǎng)絡(luò)和數(shù)據(jù)卷管理的需求愈發(fā)凸顯。Docker網(wǎng)絡(luò)和數(shù)據(jù)卷管理項(xiàng)目4在生產(chǎn)環(huán)境中,經(jīng)常會(huì)碰到需要多個(gè)服務(wù)組件容器共同協(xié)作、對(duì)數(shù)據(jù)進(jìn)行持久化,或者在多個(gè)容器之間共享進(jìn)程數(shù)據(jù)等操作。本項(xiàng)目通過2個(gè)任務(wù)介紹了Docker網(wǎng)絡(luò)管理、數(shù)據(jù)卷管理的內(nèi)容,可實(shí)現(xiàn)跨主機(jī)甚至跨數(shù)據(jù)中心的通信,以及容器內(nèi)數(shù)據(jù)的共享、備份和恢復(fù)。項(xiàng)目四:Docker網(wǎng)絡(luò)和數(shù)據(jù)卷管理目錄任務(wù)4.1、Docker網(wǎng)絡(luò)管理任務(wù)4.2、Docker數(shù)據(jù)卷管理Docker網(wǎng)絡(luò)管理回顧1、Docker網(wǎng)絡(luò)模式的配置和使用2、Docker容器互連的方法知識(shí)目標(biāo)了解Docker存儲(chǔ)技術(shù)。掌握Docker數(shù)據(jù)卷和數(shù)據(jù)卷容器的使用。能力目標(biāo)掌握Docker數(shù)據(jù)卷的使用。掌握Docker數(shù)據(jù)卷容器的使用。素質(zhì)目標(biāo)培養(yǎng)勇于探索、尊重科學(xué)的精神。樹立工匠精神。公司員工通過參考操作手冊(cè),已經(jīng)能較好地理解和應(yīng)用Docker網(wǎng)絡(luò)技術(shù)。但在實(shí)際應(yīng)用中,存在數(shù)據(jù)無法持久化存儲(chǔ)、無法實(shí)現(xiàn)容器間數(shù)據(jù)共享等的問題。通過查閱資料,小王了解到Docker數(shù)據(jù)卷適用于實(shí)現(xiàn)數(shù)據(jù)的持久化、容器間的數(shù)據(jù)共享,以及數(shù)據(jù)的備份、恢復(fù)和遷移等應(yīng)用場(chǎng)景。因此,小王繼續(xù)編寫Docker數(shù)據(jù)卷管理操作手冊(cè),以供公司相關(guān)技術(shù)人員學(xué)習(xí)。任務(wù)4.2Docker數(shù)據(jù)卷管理任務(wù)要求4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷Docker鏡像和容器采用的是分層結(jié)構(gòu),容器由頂部的一個(gè)可寫的容器層和若干個(gè)只讀的鏡像層組成,容器本身的數(shù)據(jù)就存放在這些層中,這種分層結(jié)構(gòu)正是由Docker存儲(chǔ)驅(qū)動(dòng)來實(shí)現(xiàn)的。理想情況下,只有很少的數(shù)據(jù)需要寫入容器的可寫層,更多的情形是要使用Docker卷來寫入數(shù)據(jù)。但是,有些工作負(fù)載要求寫入容器的可寫層,這就需要使用存儲(chǔ)驅(qū)動(dòng)。存儲(chǔ)驅(qū)動(dòng)控制鏡像和容器在Docker主機(jī)上的存儲(chǔ)管理方式。任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷容器本地存儲(chǔ)與Docker存儲(chǔ)驅(qū)動(dòng):每個(gè)容器都被自動(dòng)分配了本地存儲(chǔ),即內(nèi)部存儲(chǔ)。容器本地存儲(chǔ)采用的是聯(lián)合文件系統(tǒng)。聯(lián)合文件系統(tǒng)實(shí)際上是由存諸驅(qū)動(dòng)實(shí)現(xiàn)的,相應(yīng)的存儲(chǔ)驅(qū)動(dòng)有aufs、overlay、overlay2、devicemapperbtrfs、zfs、vfs等。容器的本地存儲(chǔ)是通過存儲(chǔ)驅(qū)動(dòng)進(jìn)行管理的。存儲(chǔ)驅(qū)動(dòng)控制鏡像和容器在Docker主機(jī)上的存儲(chǔ)和管理方式。Docker通過插件機(jī)制支持不同的有儲(chǔ)驅(qū)動(dòng)。不同的存儲(chǔ)驅(qū)動(dòng)采用不同方去實(shí)現(xiàn)鏡像層和寫時(shí)復(fù)制策略。任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷容器本地存儲(chǔ)與Docker存儲(chǔ)驅(qū)動(dòng):每個(gè)Docker主機(jī)都只能選擇一種存儲(chǔ)驅(qū)動(dòng),不能為每個(gè)容器送擇不同的存儲(chǔ)驅(qū)動(dòng)。使用dockerinfo命令查看Docker主機(jī)上當(dāng)前使用的存儲(chǔ)驅(qū)動(dòng)。StorageDriver:overlay2#存儲(chǔ)驅(qū)動(dòng)是overlay2BackingFilesystem:xfs#底層文件系統(tǒng)是xfsSupportsd_type:true#支持d_typeNativeOverlayDiff:true任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷容器本地存儲(chǔ)與Docker存儲(chǔ)驅(qū)動(dòng):根據(jù)需要更改現(xiàn)有的存儲(chǔ)驅(qū)動(dòng)。在運(yùn)行Linux系統(tǒng)的Docker主機(jī)中,基于某種存儲(chǔ)驅(qū)動(dòng)的本地存儲(chǔ)位于“/var/lib/docker/<存儲(chǔ)驅(qū)動(dòng)>”目錄之下。在Linux系統(tǒng)上,可以通過修改ketc/docker/daemon.json配置文件來更改存儲(chǔ)引擎配置,修改完成之后需要重啟Docker才能夠生效。將存儲(chǔ)驅(qū)動(dòng)設(shè)置為overlay2。{“storage-driver”:“overlay2”}任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷容器與非持久化數(shù)據(jù):容器創(chuàng)建時(shí)會(huì)創(chuàng)建非持久化存儲(chǔ),這是容器全部文件和文件系統(tǒng)保存的地方。默認(rèn)情況下,在容器內(nèi)創(chuàng)建的所有文件都存儲(chǔ)在可寫容器層,文件系統(tǒng)的改動(dòng)都發(fā)生在容器層。這意味著存在以下問題:這類數(shù)據(jù)從屬于容器,生命周期與容器相同,會(huì)隨著容器的刪除而被刪除。當(dāng)該容器不再運(yùn)行時(shí),數(shù)據(jù)不會(huì)持久保存,如果另一個(gè)進(jìn)程需要,則可能很難從該容器中獲取數(shù)據(jù)。容器的可寫層與運(yùn)行容器的Docker主機(jī)緊密耦合,無法輕松地將數(shù)據(jù)轉(zhuǎn)移到其他位置。寫入容器的可寫層需要Docker存儲(chǔ)驅(qū)動(dòng)管理文件系統(tǒng)。存儲(chǔ)驅(qū)動(dòng)使用Linux內(nèi)核提供的聯(lián)合文件系統(tǒng),其性能不如直接寫入主機(jī)文件系統(tǒng)的Docker卷。任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷Docker容器有兩類存儲(chǔ)方案,一類是由存儲(chǔ)驅(qū)動(dòng)(StorageDriver)實(shí)現(xiàn)的聯(lián)合文件系統(tǒng);另一類是以外部掛載的卷(Volume)為代表的持久存儲(chǔ)。Docker存儲(chǔ)驅(qū)動(dòng)為容器本身提供文件系統(tǒng),用于管理容器的鏡像層和容器層,Docker鏡像是一個(gè)只讀的文件系統(tǒng),容器是鏡像運(yùn)行的環(huán)境,即在鏡像的基礎(chǔ)上再加一個(gè)可寫層,因此默認(rèn)情況下,所有數(shù)據(jù)寫入時(shí)均寫到容器的可寫層中,只是這些數(shù)據(jù)會(huì)隨意容器的停止而消失。為確??梢猿志玫卮鎯?chǔ)容器的數(shù)據(jù),Docker引入了卷存儲(chǔ)。任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷卷又稱為數(shù)據(jù)卷(DataVolume),本身是Docker主機(jī)上文件系統(tǒng)中的目錄或文件,能夠直接被掛載到容器的文件系統(tǒng)中。容器可以讀寫卷中的數(shù)據(jù),卷中的數(shù)據(jù)可以被持久保存,不受容器當(dāng)前狀態(tài)的影響。從某種程度上看,存儲(chǔ)驅(qū)動(dòng)實(shí)現(xiàn)的是容器的內(nèi)部存儲(chǔ),適合存儲(chǔ)容器中的應(yīng)用程序本身,這部分內(nèi)容是無狀態(tài)的,應(yīng)該作為鏡像的一部分;卷實(shí)現(xiàn)的是容器的外部存儲(chǔ),適合存儲(chǔ)容器中應(yīng)用程序產(chǎn)生的數(shù)據(jù),這部分?jǐn)?shù)據(jù)是需要持久化的,應(yīng)用與鏡像分開存放。認(rèn)識(shí)Docker數(shù)據(jù)卷

數(shù)據(jù)卷是一個(gè)可供容器使用的特殊目錄,它將本地主機(jī)目錄直接映射到容器,可以很方便地將數(shù)據(jù)添加到容器中供其中的進(jìn)程使用,類似于Linux中的mount操作。多個(gè)容器可以共享同一個(gè)數(shù)據(jù)卷。數(shù)據(jù)卷具有如下特性。

(1)容器啟動(dòng)時(shí)對(duì)數(shù)據(jù)卷進(jìn)行初始化。

(2)數(shù)據(jù)卷可以在容器之間共享和重用。

(3)無論是容器內(nèi)操作還是本地操作,對(duì)數(shù)據(jù)卷內(nèi)數(shù)據(jù)的操作都會(huì)立即生效。

(4)對(duì)數(shù)據(jù)卷的操作不會(huì)影響到鏡像。

(5)數(shù)據(jù)卷的生命周期獨(dú)立于容器的生命周期,即使刪除容器,數(shù)據(jù)也會(huì)一直存在,沒有任何容器使用的數(shù)據(jù)也不會(huì)被Docker刪除。4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷持久化數(shù)據(jù)是需要保存的數(shù)據(jù),如客戶信息、財(cái)務(wù)、計(jì)劃、審計(jì)日志,以及某些應(yīng)用日志數(shù)據(jù)。Docker通過將主機(jī)中的文件系統(tǒng)掛載到容器中供容器訪問,從而實(shí)現(xiàn)持久化數(shù)據(jù)存儲(chǔ),這就是容器的外部存儲(chǔ)。即使容器刪除之后,這些文件仍然存在。Docker目前支持卷和綁定掛載這兩種掛載類型來實(shí)現(xiàn)容器的持久化數(shù)據(jù)存儲(chǔ)。卷和綁定掛載這兩種外部存儲(chǔ)都繞過了聯(lián)合文件系統(tǒng),其讀寫操作會(huì)繞過存儲(chǔ)驅(qū)動(dòng),并以本地主機(jī)的存取速度運(yùn)行。這里以卷為例說明外部存儲(chǔ)與本地存儲(chǔ)的關(guān)系,如圖所示。任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷卷存儲(chǔ)在主機(jī)文件系統(tǒng)中由Docker管理,在Linux主機(jī)上默認(rèn)在/var/lib/docker/volumes目錄下。它受到保護(hù),非Docker進(jìn)程是不能修改該部分內(nèi)容的。卷是Docker中持久存儲(chǔ)容器的應(yīng)用數(shù)據(jù)的最佳方式。卷也支持使用卷驅(qū)動(dòng),卷驅(qū)動(dòng)可以讓用戶將數(shù)據(jù)存儲(chǔ)在遠(yuǎn)程主機(jī)或云提供商處,以及其他可能的位置。可以以命名方式或匿名方式掛載卷。匿名卷(AnonymousVolumes)在首次掛載到容器中時(shí)沒有指定明確的名稱,因此Docker會(huì)為其隨機(jī)指定一個(gè)在當(dāng)前Docker主機(jī)中唯一的名稱。除了名稱外,命名卷(NamedVolumes)和匿名卷的其他特性相同。任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷卷由Docker創(chuàng)建并管理,卷適合以下應(yīng)用場(chǎng)景。(1)在多個(gè)正在運(yùn)行的容器之間共享數(shù)據(jù)。如果沒有顯式創(chuàng)建卷,是卷會(huì)在首次被掛載到容器上時(shí)創(chuàng)建。當(dāng)容器被刪除時(shí),卷依然會(huì)存在。多個(gè)容器可以同時(shí)掛載同一卷,掛載模式可以是讀寫模式或只讀模式。只有顯式刪除卷時(shí),卷才會(huì)被刪除。(2)當(dāng)Docker主機(jī)不能保證具有特定目錄結(jié)構(gòu)時(shí),卷有助于將Docker主機(jī)的配置與容器運(yùn)行時(shí)解耦。(3)當(dāng)需要將容器的數(shù)據(jù)存儲(chǔ)到遠(yuǎn)程主機(jī)或云提供商處,而不是本地時(shí)。(4)當(dāng)需要在兩個(gè)Docker主機(jī)之間備份、恢復(fù)或遷移數(shù)據(jù)時(shí),可以在停止使用卷的容器之后,備份卷所在的目錄。任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2認(rèn)識(shí)Docker數(shù)據(jù)卷容器如果用戶需要在多個(gè)容器之間共享一些持久化的數(shù)據(jù),則可以使用數(shù)據(jù)卷容器。數(shù)據(jù)卷容器是一個(gè)容器,專門用于提供數(shù)據(jù)卷以供其他容器掛載。數(shù)據(jù)卷容器操作的思想:定制生成一個(gè)容器來掛載某個(gè)目錄,該容器并不需要運(yùn)行,其他容器可以利用--volumes-from命令來掛載??梢远啻卫?-volumes-from命令從多個(gè)容器掛載多個(gè)數(shù)據(jù)卷,也可以從其他掛載了數(shù)據(jù)卷容器的容器掛載數(shù)據(jù)卷。任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2Docker卷管理語法dockervolume是Docker卷管理命令,其基本語法格式如下。dockervolume子命令子命令用于完成具體的卷管理任務(wù),dockervolume子命令列表及功能說明,如表所示。任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.2Docker卷管理語法容器的文件系統(tǒng)掛載用法-v選項(xiàng)的基本用法:-v[主機(jī)中的源:]容器中的目標(biāo)[:<選項(xiàng)>]a)容器中第1個(gè)字段表示掛載源(來自主機(jī)的文件系統(tǒng))b)第2個(gè)字段是掛載目標(biāo)(容器中掛載點(diǎn),可以是目錄或了件路徑,必須采用絕對(duì)路徑的形式)rc)第3個(gè)字段是可選的,是一個(gè)以逗號(hào)分隔的選項(xiàng)列表,例如ro表示只讀。例如:[root@docker~]#dockerrun–dit-v/opt/abc/:/opt/aaa/--nameliuyangcentos/bin/bashDocker數(shù)據(jù)卷常用操作創(chuàng)建數(shù)據(jù)卷

在運(yùn)行容器時(shí),可以使用“-v”標(biāo)簽為容器添加數(shù)據(jù)卷,如果容器中指定的文件夾不存在,則會(huì)自動(dòng)生成文件夾。例如,利用nginx鏡像創(chuàng)建nginx1容器,創(chuàng)建一個(gè)隨機(jī)名稱的數(shù)據(jù)卷,并掛載到容器的/data目錄中,其代碼如下。#dockerrun-dit--namenginx1-v/datanginx/bin/bash4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)Docker數(shù)據(jù)卷常用操作創(chuàng)建數(shù)據(jù)卷

可以利用dockerinspect命令查看容器掛載情況。#dockerinspect-f"{{.Mounts}}"nginx01[{volume61c967774cd54ce933ac878ce0c18d489e4f9a82c8c468db11d3bc2eaaf911ce/var/lib/docker/volumes/61c967774cd54ce933ac878ce0c18d489e4f9a82c8c468db11d3bc2eaaf911ce/_data/datalocaltrue}]//卷名為61c967774cd54ce933ac878ce0c18d489e4f9a82c8c468db11d3bc2eaaf911ceDocker在創(chuàng)建數(shù)據(jù)卷的時(shí)候會(huì)在宿主機(jī)的/var/lib/docker/volumes/目錄中創(chuàng)建一個(gè)以volumeID為名的目錄,并將數(shù)據(jù)卷中的內(nèi)容存儲(chǔ)到容器/data目錄中。4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)也可創(chuàng)建一個(gè)指定名稱的數(shù)據(jù)卷,并掛載到容器的/data目錄中。#dockerrun-dit--namenginx2-vvolumetest:/datanginx/bin/bash利用dockervolumeinspect命令可以獲得數(shù)據(jù)卷在宿主機(jī)中的信息。#dockervolumeinspectvolumetest[{……"Mountpoint":"/var/lib/docker/volumes/volumetest/_data","Name":"volumetest", ……}]4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)1.創(chuàng)建數(shù)據(jù)卷Docker也允許將宿主機(jī)的目錄掛載到容器中。#dockerrun-dit--namebusybox2-v/user/dir:/container/dirbusybox/bin/sh上面的命令將宿主機(jī)的/user/dir本地目錄掛載到容器的/container/dir目錄中。宿主機(jī)的本地目錄必須是絕對(duì)路徑,如果宿主機(jī)中不存在該目錄,則Docker會(huì)自動(dòng)創(chuàng)建該目錄。/user/dir目錄中的所有內(nèi)容都可以在容器的/container/dir目錄中以讀寫的權(quán)限被訪問。4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)1.創(chuàng)建數(shù)據(jù)卷[root@localhost~]#dockerexec-itbusybox2/bin/sh//進(jìn)入容器/#cd/container/dir/ //切換至/container/dir目錄/container/dir#touchuser.txt //創(chuàng)建user.txt文件/container/dir#exit //退出容器#1s/user/dir //切換至宿主機(jī)的本地目錄user.txt上面的命令表明,掛載后,容器內(nèi)的目錄內(nèi)容與宿主機(jī)的本地目錄內(nèi)容是一致的。Docker掛載數(shù)據(jù)卷的默認(rèn)權(quán)限是讀寫,也可以使用:ro,指定該數(shù)據(jù)卷的權(quán)限為只讀。4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)1.創(chuàng)建數(shù)據(jù)卷#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目錄中執(zhí)行寫操作會(huì)失敗。Docker允許在創(chuàng)建新容器時(shí),使用多個(gè)-v參數(shù)為容器添加多個(gè)數(shù)據(jù)卷。#dockerrun-it--namebusybox4-v/datal-v/data2-v/host/dir:/container/dirbusybox/bin/sh4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)1.創(chuàng)建數(shù)據(jù)卷Docker允許在創(chuàng)建新容器時(shí)使用多個(gè)-v參數(shù)為容器添加多個(gè)數(shù)據(jù)卷。#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從命令執(zhí)行的返回結(jié)果來看,實(shí)現(xiàn)了多數(shù)據(jù)卷掛載。4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)2.共享數(shù)據(jù)卷如果要授權(quán)一個(gè)容器訪問另一個(gè)容器的Volume,則可以使用--volumes-from參數(shù)。#dockerrun-it-v/var/volume1-v/var/volume2--namefirst_containercentos/bin/sh//創(chuàng)建容器first_container,容器包含兩個(gè)數(shù)據(jù)卷——/var/volume1和/var/volume2sh-4.2#echo"thisisavolume1">/var/volume1/test1 //創(chuàng)建test1文件sh-4.2#echo"thisisavolume2">/var/volume2/test2 //創(chuàng)建test2文件sh-4.2#exit //退出first_container容器,此時(shí)容器狀態(tài)變?yōu)镋xited#dockerrun-it--volumes-fromfirst_container--namelast_containercentos/bin/bash//創(chuàng)建last_container容器,并掛載first_container容器中的數(shù)據(jù)卷4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)2.共享數(shù)據(jù)卷[root@921b5745be7e/]#cat/var/volumel/test1thisisavolume[root@921b5745be7e/]#cat/var/volume2/test2thisisavolume2值得注意的是,不管first_cntainer容器是否運(yùn)行,數(shù)據(jù)卷都會(huì)起作用。只要容器連接數(shù)據(jù)卷,它就不會(huì)被刪除。如果一些數(shù)據(jù),如配置文件、數(shù)據(jù)文件等,需要在多個(gè)容器之間共享,則可以創(chuàng)建一個(gè)數(shù)據(jù)容器,其他的容器與之共享數(shù)據(jù)卷。4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)3.使用Dockerfile創(chuàng)建數(shù)據(jù)卷

使用VOLUME指令向容器中添加數(shù)據(jù)卷的代碼如下。

VOLUME/data

在利用dockerbuild命令生成鏡像并以該鏡像啟動(dòng)容器時(shí),會(huì)掛載一個(gè)數(shù)據(jù)卷到/data中。如果鏡像中存在/data目錄,則該目錄中的內(nèi)容將全部被復(fù)制到宿主機(jī)中對(duì)應(yīng)的目錄中,宿主機(jī)的目錄只能是“/var/lib/docker/xxx”

等類似的目錄,并根據(jù)容器中的文件設(shè)置合適的權(quán)限和所有者。也可以使用VOLUME指令添加多個(gè)數(shù)據(jù)卷。

VOLUME["/data1","data2"]4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.刪除數(shù)據(jù)卷利用dockerrm刪除容器時(shí),不會(huì)刪除與數(shù)據(jù)卷對(duì)應(yīng)的目錄,即不會(huì)自動(dòng)刪除在/var/ib/docker/volumes中生成的與volume對(duì)應(yīng)的目錄。刪除容器并且刪除數(shù)據(jù)卷有以下3種方法。(1)利用dockervolumerm<volume_name>命令刪除數(shù)據(jù)卷。(2)利用dockerrm-v<container_name>命令刪除容器且刪除卷。(3)利用dockerrun--rm命令,其中,--rm參數(shù)會(huì)在容器停止運(yùn)行時(shí)刪除容器及容器所掛載的數(shù)據(jù)卷。4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.刪除數(shù)據(jù)卷#dockerrun-dit--namedel_container-v/datacentos/bin/bash[root@localhost~]#dockervolumels //列出所有數(shù)據(jù)卷DRIVERVOLUMENAMElocal 474eba8c573c13ed8d6c5e6d96ec9cecdblae7c25!25526c1c92Cb0d433d1bcb2430a#dockerrm-vfdel_container //刪除del_contatainer容器del_container#dockervolumelsDRIVER VOLUMENAME4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)4.刪除數(shù)據(jù)卷需要注意的是,利用dockerrm-v和dockerrun--rm命令刪除數(shù)據(jù)卷時(shí),只會(huì)對(duì)掛載在容器上的未命名的數(shù)據(jù)卷進(jìn)行刪除,并對(duì)用戶指定名稱的數(shù)據(jù)卷進(jìn)行保留;利用dockervolumerm命令刪除數(shù)據(jù)卷時(shí),只有當(dāng)沒有任何容器使用數(shù)據(jù)卷時(shí),該數(shù)據(jù)卷才能被刪除。4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)5.備份、恢復(fù)或遷移數(shù)據(jù)卷

作為數(shù)據(jù)的載體,可以利用數(shù)據(jù)卷容器對(duì)其中的數(shù)據(jù)進(jìn)行備份、恢復(fù),以實(shí)現(xiàn)數(shù)據(jù)的遷移。(1)備份數(shù)據(jù)卷。例如,利用centos鏡像創(chuàng)建centosbackup容器,窗口包含兩個(gè)效據(jù)卷:/var/volumel和/var/volume2。[root@docker1~]dockerrun–it–v/var/volume1-v/var/volume2--namecentosbackupcentos/bin/bash[root@a7b804a5a4a8/]#在數(shù)據(jù)卷中添加以下數(shù)據(jù)。[root@a7b804a5a4a8/]#echo"volume1">/var/volume1/volume1.txt[root@a7b804a5a4a8/]#echo"volume2">/var/vo1ume2/vo1ume2.txt4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)5.備份、恢復(fù)或遷移數(shù)據(jù)卷(1)備份數(shù)據(jù)卷。

利用數(shù)據(jù)卷容器進(jìn)行備份,使用--volumes-from參數(shù)創(chuàng)建一個(gè)加載centosbackup數(shù)據(jù)的容器,從主機(jī)掛載當(dāng)前目錄到容器的/backup目錄中,并備份centosbackup卷中的數(shù)據(jù)。[root@docker1~]#dockerrun–it--rm--volumes-fromcentosbackup–v$(pwd):/backupcentostarcvf/backup/backup.tar/var/volume1/var/volume24.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)5.備份、恢復(fù)或遷移數(shù)據(jù)卷#dockerrun–it--rm--volumes-fromcentosbackup–v$(pwd):/backupcentostarcvf/backup/backup.tar/var/volume1/var/volume2(--rm啟動(dòng)一個(gè)新的容器,執(zhí)行完畢刪除;--volumes-fromcentosbackup—>備份centosbackup容器中的內(nèi)容;$(pwd)—>宿主機(jī)中目錄,相當(dāng)于“./”,即當(dāng)前目錄;$(pwd):/backup—>宿主機(jī)中的當(dāng)前目錄映射新容器中的/backup目錄;tarcvf/backup/data-backup.tar/var/volume1/var/volume2—>將centosbackup容器中的數(shù)據(jù)卷內(nèi)容壓縮到新容器中的/backup目錄下,文件名為data-backup.tar—>由于該目錄與宿主機(jī)的當(dāng)前目錄做了映射,所以該壓縮文件(即備份文件)會(huì)被備份到宿主機(jī)的當(dāng)前目錄)備份完成后,查看備份文件bakup.tarlsanaconda-ks.cfgbackup.tar4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)5.備份、恢復(fù)或遷移數(shù)據(jù)卷(1)備份數(shù)據(jù)卷。

刪除容器centosbackup的/var/volumel和/var/volume2目錄中的內(nèi)容[root@a7b804a5a4a8/]#rm-rvf/var/volume1/var/volume2[root@a7b804a5a4a8/]#ls/var/volume1[root@a7b804a5a4a8/]#ls/var/volume24.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)5.備份、恢復(fù)或遷移數(shù)據(jù)卷(2)恢復(fù)或遷移數(shù)據(jù)卷,可以將數(shù)據(jù)恢復(fù)到源容器中。例如,將數(shù)據(jù)卷數(shù)據(jù)恢復(fù)到centosbackup容器中,代碼如下。[root@dockerl~]#dockerrun--rm--volumes-fromcentosbackup–v$(pwd):/backupcentostarxvf/backup/backup.tar-C///恢復(fù)數(shù)據(jù)卷數(shù)據(jù)到centosbackup容器中cvf/backup/backup.tar/var/volume1/var/volume2———備份卷數(shù)據(jù)為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任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)5.備份、恢復(fù)或遷移數(shù)據(jù)卷創(chuàng)建容器時(shí),掛載的數(shù)據(jù)卷路徑最好和備份的數(shù)據(jù)卷路徑一致。如果新建容器掛載的數(shù)據(jù)卷只是備份數(shù)據(jù)卷的一部分,那么恢復(fù)時(shí)只會(huì)恢復(fù)部分?jǐn)?shù)據(jù)卷的數(shù)據(jù)。[root@docker1~]#dockerrun-it-v/var/volume1--namecentos2centos/bin/bash[root@ab2a6b1b3b1b/]#ls/var/volume1/[root@ab2a6b1b3b1b/]#1s/var/volume21s:cannotaccess/var/volume2:Nosuchfileordirectory恢復(fù)數(shù)據(jù)卷數(shù)據(jù)到centos2容器中。[root@dockerl-]#dockerrun--rm--volumes-fromcentos2-v$(pwd):/backupcentostarxvf/backup/backup,tar–C/4.2任務(wù)4.2Docker數(shù)據(jù)卷管理相關(guān)知識(shí)5.備份、恢復(fù)或遷移數(shù)據(jù)卷在centos2容器中查看恢復(fù)的數(shù)據(jù)。[root@ab2a6b1b3b1b/]#ls/var/volume1/volume1.txt[root@ab2a6b1b3b1b/]#ls/var/volume2ls:cannotaccess/var/volume2:NOsuchfileordirectory當(dāng)新建容器時(shí)掛載的數(shù)據(jù)卷目錄與備份路徑不一致時(shí),則拋出警告信息。[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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論