溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

發(fā)布時(shí)間:2021-09-04 10:25:43 來(lái)源:億速云 閱讀:162 作者:chen 欄目:web開發(fā)

這篇文章主要講解了“Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)”吧!

01 Docker存儲(chǔ)概覽

默認(rèn)情況下容器中所有創(chuàng)建的文件及數(shù)據(jù)都被存儲(chǔ)在了容器的可寫層,如果按默認(rèn)操作會(huì)有如下問(wèn)題:

1)容器被刪除數(shù)據(jù)不會(huì)保存,同時(shí)如果另外一個(gè)進(jìn)程想要調(diào)用容器中數(shù)據(jù)也非常困難;

2)容器的可寫層與運(yùn)行容器的主機(jī)緊密耦合,無(wú)法輕松地將數(shù)據(jù)移動(dòng)到其它地方;

3)容器數(shù)據(jù)寫入容器可寫層需要使用Storage  driver(容器存儲(chǔ)驅(qū)動(dòng))來(lái)管理文件系統(tǒng)進(jìn)行寫操作,因?yàn)槎嗔诉@一層導(dǎo)致其比直接將數(shù)據(jù)寫入主機(jī)的文件系統(tǒng)的效率低很多。

針對(duì)上述問(wèn)題,Docker 提供了四種不同的方式將數(shù)據(jù)從 Docker 主機(jī)直接掛載到容器中,分別為卷(volumes),綁定掛載(bind  mounts),臨時(shí)文件系統(tǒng)(tmpfs)及命名通道(named pipe),這四種方式的named  pipe是windows系統(tǒng)獨(dú)有的(因?yàn)閷?shí)際工作中容器大多都是部署在linux系統(tǒng)上的,所以本篇文章我們主要介紹前三種掛載方式)。卷(volumes),綁定掛載(bind  mounts)及臨時(shí)文件系統(tǒng)(tmpfs)這三種掛載方式特點(diǎn)如下:

Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

1)卷存儲(chǔ)在 Docker 管理的主機(jī)文件系統(tǒng)的一部分中(/var/lib/docker/volumes/)中,完全由 Docker  管理,卷存儲(chǔ)是docker數(shù)據(jù)保存最推薦的方法;

2)bind mounts  綁定掛載,可以存儲(chǔ)在主機(jī)系統(tǒng)上的任何位置,甚至可以是重要的系統(tǒng)文件或目錄,Docker主機(jī)或Docker容器上的非Docker進(jìn)程可以隨時(shí)對(duì)其進(jìn)行修改;

3)tmpfs 僅存儲(chǔ)在主機(jī)系統(tǒng)的內(nèi)存中,而不會(huì)寫入主機(jī)的文件系統(tǒng)。

下面我們就來(lái)看看怎么創(chuàng)建這三種存儲(chǔ)方式吧!

02 卷(volumes)

卷是這三種存儲(chǔ)方式中唯一使用Docker來(lái)創(chuàng)建與管理的,卷的推薦使用場(chǎng)景如下:

1)在多個(gè)運(yùn)行容器進(jìn)行數(shù)據(jù)共享;

2)當(dāng)您要將容器的數(shù)據(jù)存儲(chǔ)在遠(yuǎn)程主機(jī)或云上時(shí);

3)當(dāng)您需要將數(shù)據(jù)從一臺(tái)Docker主機(jī)備份,還原或遷移到另一臺(tái)Docker主機(jī)時(shí),卷是一個(gè)更好的方案;

4)容器中程序需要更好的IO性能。

下面我們看看如何使用docker命令來(lái)操作卷

(1) 查看卷列表

1. # 查看卷列表   2. # docker volume ls
Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

(2) 創(chuàng)建卷

創(chuàng)建卷的具體命令如下:

1. # 創(chuàng)建卷   2. # docker volume create [Volume Name]

我們現(xiàn)在創(chuàng)建一個(gè)volume2,同時(shí)查看創(chuàng)建卷的詳細(xì)參數(shù),操作如下

1. # 創(chuàng)建卷   2. # docker volume create volume2   3. #    4. # 查看volume2的詳細(xì)信息   5. # docker volume inspect volume2
Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

(3) 掛載卷

掛載卷是在創(chuàng)建容器時(shí)進(jìn)行綁定的,在創(chuàng)建容器docker container  run后面加參數(shù)進(jìn)行卷的掛載,其掛載有兩種方式一種通過(guò)-v掛載一種通過(guò)--mount,-v用于單獨(dú)的容器掛載而—mount一般用于docker  service(也就是docker swarm),下面是這兩個(gè)參數(shù)的具體說(shuō)明:

1. -v:

2. 由三個(gè)由冒號(hào)(:)分隔的字段組成,[HOST-DIR:]CONTAINER-DIR[:OPTIONS]

3. 1)HOST-DIR 代表主機(jī)上的目錄或數(shù)據(jù)卷的名字。省略該部分時(shí),會(huì)自動(dòng)創(chuàng)建一個(gè)匿名卷。如果是指定主機(jī)上的目錄,需要使用絕對(duì)路徑。

4. 2)CONTAINER-DIR 代表將要掛載到容器中的目錄或文件,即表現(xiàn)為容器中的某個(gè)目錄或文件

5. 3)OPTIONS 代表配置,例如設(shè)置為只讀權(quán)限(ro),此卷僅能被該容器使用(Z),或者可以被多個(gè)容器使用(z)。多個(gè)配置項(xiàng)由逗號(hào)分隔。

6.

7. --mount:

8.  由多個(gè)鍵值對(duì)組成,鍵值對(duì)之間由逗號(hào)分隔。例如:type=volume,source=volume2,destination=/volume2,ro=true

9. 1)type,指定類型,可以指定為 bind,volume,tmpfs。

10. 2)source,當(dāng)類型為 volume 時(shí),指定卷名稱,匿名卷時(shí)省略該字段。當(dāng)類型為 bind,指定路徑??梢允褂每s寫 src。

11. 3)destination,掛載到容器中的路徑??梢允褂每s寫 dst 或 target。

12. 4)ro 為配置項(xiàng),多個(gè)配置項(xiàng)直接由逗號(hào)分隔一般使用 true 或 false。

下面我們-v命令進(jìn)行卷掛載具體操作如下:

1. #創(chuàng)建容器test10,并通過(guò)-v進(jìn)行卷volume1掛載,將volume1掛載到容器file1目錄   2. docker container run -it --name test10 --hostname test10 \    3. -v volume1:/file1 centos /bin/bash
Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

我們可以通過(guò)如下命令查看容器test10與volume的映射關(guān)系

1. #查看容器詳細(xì)的配置信息  2. docker container inspect test10
Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

(4) 刪除卷

現(xiàn)在我們來(lái)看看刪除卷的命令格式

1. # 刪除卷   2. docker volume rm [volume name]

我們刪除剛才創(chuàng)建的卷volume2具體操作如下

Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

03 綁定掛載(bind mounts)

自docker發(fā)布以來(lái)就支持綁定掛載了,綁定掛載支持的功能相較于卷來(lái)說(shuō)比較有限。綁定掛載通過(guò)將主機(jī)上的目錄綁定到容器中,容器就可以操作和修改主機(jī)上該目錄的內(nèi)容。綁定掛載性能非常好,但是它們依賴于具有特定目錄結(jié)構(gòu)的主機(jī)文件系統(tǒng)。

綁定掛載的參數(shù)與卷一致,可以通過(guò)-v或者—mount進(jìn)行掛載,-v用于單獨(dú)的容器掛載而—mount一般用于docker  service。我們?cè)诒镜刂鳈C(jī)上創(chuàng)建目錄bind_mount_test,同時(shí)在目錄中創(chuàng)建一個(gè)文件file1,然后將該目錄綁定掛載到容器/home/bind_mount_test目錄具體操作如下:

1. # 創(chuàng)建容器test1,同時(shí)將目錄bind_mount_test綁定到容器的/home/bind_mount_test目錄   2. docker container run -it -v \   3.    /root/bind_mount_test:/home/bind_mount_test --name test1 centos /bin/bash
Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

綁定掛載的主機(jī)目錄如果不存在,則會(huì)自動(dòng)創(chuàng)建該目錄,現(xiàn)在我們給主機(jī)目錄bind_mount_test中再創(chuàng)建一個(gè)文件file2.txt并輸入內(nèi)容"kan  dao  ma",我們看看在容器中是否能夠看到,同時(shí)我們?cè)谌萜鱰est1的bind_mount_test目錄中創(chuàng)建一個(gè)文件file3.txt,看看在主機(jī)上是否能夠查看到,具體操作如下

Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

通過(guò)上述操作我們可以發(fā)現(xiàn)通過(guò)綁定掛載的容器目錄其實(shí)完全由主機(jī)的文件系統(tǒng)進(jìn)行管理,而不像卷是通過(guò)docker自己管理的,所以像目錄的權(quán)限,SELINUX  等問(wèn)題都需要我們自己來(lái)管理。

04 臨時(shí)文件系統(tǒng)(tmpfs)

卷與綁定掛載主要是用于主機(jī)和容器之間共享文件,容器停止后數(shù)據(jù)還可以保留,tmpfs掛載是臨時(shí)的,數(shù)據(jù)保留在主機(jī)內(nèi)存中的,當(dāng)容器停止后數(shù)據(jù)就會(huì)被刪除。該掛載方式的數(shù)據(jù)不能在兩個(gè)容器間進(jìn)行共享,同時(shí)該掛載方式只支持linux系統(tǒng)。

tmpfs掛載也有兩個(gè)命令參數(shù),一個(gè)是—tmps另外一個(gè)是—mount,跟卷與綁定掛載類似,--tmpfs用于單個(gè)容器掛載—mount用于docker  service掛載。下面我們通過(guò)—tmpfs來(lái)將容器app目錄掛載到內(nèi)存中,具體操作如下:

1. # 創(chuàng)建容器tmptest,同時(shí)通過(guò)tmpfs命令將app目錄掛載到內(nèi)存中   2. docker container run -it --name tmptest --tmpfs /app centos /bin/bash
Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

05 數(shù)據(jù)卷容器

上面的章節(jié)我們了解了容器的幾種存儲(chǔ)方式,如果我們想要容器間共享一些實(shí)時(shí)更新的數(shù)據(jù)該怎么操作呢,其實(shí)docker給出了解決方案就是用戶數(shù)據(jù)卷容器。數(shù)據(jù)卷容器通過(guò)卷方式掛載文件目錄,其他容器通過(guò)掛載這個(gè)容器實(shí)現(xiàn)數(shù)據(jù)共享,這個(gè)掛載數(shù)據(jù)卷的容器就叫做數(shù)據(jù)卷容器。數(shù)據(jù)卷容器就是一種普通容器,它專門提供數(shù)據(jù)卷供其它容器掛載使用?,F(xiàn)在我們看看怎么通過(guò)數(shù)據(jù)卷容器實(shí)現(xiàn)數(shù)據(jù)的共享,具體操作如下:

1)創(chuàng)建數(shù)據(jù)卷test_volume,同時(shí)創(chuàng)建一個(gè)數(shù)據(jù)卷容器(其實(shí)就是普通容器),將這個(gè)創(chuàng)建的卷掛載到數(shù)據(jù)卷容器中

1)創(chuàng)建數(shù)據(jù)卷test_volume,同時(shí)創(chuàng)建一個(gè)數(shù)據(jù)卷容器(其實(shí)就是普通容器),將這個(gè)創(chuàng)建的卷掛載到數(shù)據(jù)卷容器中 1. # 創(chuàng)建卷test_volume   2. docker volume create test_volume   3.    4. #創(chuàng)建數(shù)據(jù)卷容器data_container,同時(shí)將test_volume卷掛載到該容器的share_dir目錄   5. docker container run -it -v test_volume:/share_dir \   6.    --name data_container --hostname data_container centos /bin/bash
Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

2)創(chuàng)建兩個(gè)普通容器test100與test200同時(shí)繼承數(shù)據(jù)卷容器所掛載的數(shù)據(jù)卷

1. # 創(chuàng)建容器test100,--volumes-from命令用于繼承指定數(shù)據(jù)卷容器   2. docker container run -it --volumes-from data_container  \   3.     --name test100 --hostname test100 centos /bin/bash   4.    5. # 創(chuàng)建容器test200,--volumes-from命令用于繼承指定數(shù)據(jù)卷容器   6. docker container run -it --volumes-from data_container  \   7.     --name test200 --hostname test200 centos /bin/bash
Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

3)我們?cè)谌萜鱰est100與test200中分別對(duì)文件file1.txt進(jìn)行操作,最后我們?cè)跀?shù)據(jù)卷容器中查看file1.txt文件是否在實(shí)時(shí)更新

Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

通過(guò)上述操作我們可以發(fā)現(xiàn)通過(guò)數(shù)據(jù)卷容器可以實(shí)現(xiàn)不同容器間的數(shù)據(jù)共享需求。

06 容器數(shù)據(jù)備份與恢復(fù)

(1) 數(shù)據(jù)備份

如果我們想對(duì)剛才的數(shù)據(jù)卷容器的數(shù)據(jù)卷中數(shù)據(jù)進(jìn)行備份,可以創(chuàng)建一個(gè)備份容器,該容器繼承數(shù)據(jù)卷容的數(shù)據(jù)卷,從而實(shí)現(xiàn)數(shù)據(jù)的備份。其實(shí)就是創(chuàng)建一個(gè)備份容器通過(guò)掛載綁定方式將主機(jī)文件目錄掛載到備份容器中,然后在備份容器中將繼承的數(shù)據(jù)卷目錄備份到綁定掛載映射的目錄,從而實(shí)現(xiàn)了數(shù)據(jù)的備份具體操作如下:

1. # 創(chuàng)建備份容器,然后該容器不僅繼承數(shù)據(jù)卷容器的數(shù)據(jù)卷同時(shí)通過(guò)掛載綁定方式掛載主機(jī)系統(tǒng)備份目錄   2. # 通過(guò)在容器中執(zhí)行tar命令將數(shù)據(jù)卷映射的目錄share_dir備份到掛載綁定映射的目錄backup中   3. docker container run --volumes-from data_container \    4.      -v /root/backupfile:/backup centos tar cvf /backup/backup.tar /share_dir/
Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

(2) 數(shù)據(jù)恢復(fù)

數(shù)據(jù)恢復(fù)其實(shí)跟備份類似,我們創(chuàng)建一個(gè)新容器同時(shí)將在主機(jī)系統(tǒng)備份目錄通過(guò)掛載綁定的方式掛載到新容器中,然后通過(guò)在容器中執(zhí)行tar包的解壓縮命令就可以將數(shù)據(jù)進(jìn)行恢復(fù)了具體操作如下:

Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)

感謝各位的閱讀,以上就是“Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Docker存儲(chǔ)管理方式以及容器數(shù)據(jù)的備份與恢復(fù)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI