自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Docker小白到實(shí)戰(zhàn)之容器數(shù)據(jù)卷,整理的明明白白

網(wǎng)絡(luò) 通信技術(shù)
默認(rèn)情況下,容器內(nèi)應(yīng)用產(chǎn)生的數(shù)據(jù)都是由容器本身獨(dú)有,如果容器被刪除,對應(yīng)的數(shù)據(jù)文件就會跟著消失。從隔離性的角度來看,數(shù)據(jù)就應(yīng)該和容器共存亡。

[[419549]]

前言

上一篇把常用命令演示了一遍,其中也提到容器的隔離性,默認(rèn)情況下,容器內(nèi)應(yīng)用產(chǎn)生的數(shù)據(jù)都是由容器本身獨(dú)有,如果容器被刪除,對應(yīng)的數(shù)據(jù)文件就會跟著消失。從隔離性的角度來看,數(shù)據(jù)就應(yīng)該和容器共存亡;但在實(shí)際用場景中,更多需要將數(shù)據(jù)持久化,即容器被刪除,數(shù)據(jù)也應(yīng)該正常存在;另外也有很多場景需要容器之間共享數(shù)據(jù),那該怎么做呢,接下來說說容器數(shù)據(jù)卷。

正文

1. 手動保存數(shù)據(jù)

通常手動有兩種方式,一是通過命令就行拷貝,二是將容器提交為鏡像。接下來通過拉取centos鏡像,運(yùn)行演示

  • 通過命令形式

主機(jī)和容器之間可以通過命令進(jìn)行數(shù)據(jù)拷貝,也就是說,在容器刪除之前可以先進(jìn)行數(shù)據(jù)拷貝,如下:

命令簡述:docker run -it --name="mycentos" centos /bin/bash,直接根據(jù)鏡像centos以交互模式啟動容器,容器名稱為mycentos,在容器內(nèi)部執(zhí)行/bin/bash命令進(jìn)入到終端;具體命令在Docker小白到實(shí)戰(zhàn)之常用命令演示,通俗易懂這篇文章中已經(jīng)詳細(xì)說明;這里簡單回顧一下根據(jù)鏡像啟動容器流程,如圖:

上圖簡述:在Docker執(zhí)行啟動命令時(shí),會先從本地查找鏡像,如果沒有,就會去遠(yuǎn)程倉庫搜索并拉取到主機(jī),然后主機(jī)就可以根據(jù)鏡像啟動容器;如果遠(yuǎn)程倉庫也沒有找到鏡像,那么就報(bào)錯。

好了,回到今天的話題,接著說拷貝數(shù)據(jù);

現(xiàn)在通過centos鏡像啟動了一個容器(Linux系統(tǒng)),在上面創(chuàng)建一些文件進(jìn)行測試,如下:

現(xiàn)在如果將容器刪除,里面對應(yīng)的數(shù)據(jù)也會刪除,所以需要將對應(yīng)的數(shù)據(jù)拷貝到主機(jī)上,如下:

docker cp bfb96a6afdbc:/usr/TestData /usr/TestDataHost命令解析:

  • 語法:docker cp SRC_PATH DEST_PATH
  • bfb96a6afdbc:/usr/TestData對應(yīng)的就是SRC_PATH ,表示源頭,即需要拷貝的目錄或文件;bfb96a6afdbc這是容器ID,通過這種方式限定是某個容器內(nèi)的數(shù)據(jù)文件;
  • /usr/TestDataHost對應(yīng)的就是DEST_PATH,表示目標(biāo),即拷到什么地方;

按照上面的語法規(guī)則,同樣可以將主機(jī)上的數(shù)據(jù)文件拷貝到指定容器中,只是調(diào)換一下SRC_PATH 和DEST_PATH的位置即可,如下:

  • 將容器提交為鏡像的方式

這種方式只能勉強(qiáng)說是一種備份,只是通過docker commit命令將容器提交為鏡像,從而達(dá)到備份數(shù)據(jù)的作用;

但很明顯能感覺到不靈活,數(shù)據(jù)還是在容器內(nèi)。關(guān)于docker commit命令上次已經(jīng)說過,這里就不重復(fù)截圖啦。

以上兩種方式都不是很好的選擇,首先在時(shí)效上也不能及時(shí)備份,另外通過手動這種操作很明顯效率不高,還容易出錯;更重要的是苦了小伙伴們,所以必須把自動安排起來;手動這種方式,根據(jù)情況偶爾用用就可以啦。

2. 容器數(shù)據(jù)卷解放雙手

2.1 簡單理解容器數(shù)據(jù)卷

數(shù)據(jù)卷可以理解為目錄或文件,設(shè)計(jì)目的就是為了數(shù)據(jù)的持久化和共享;

掛載數(shù)據(jù)卷的容器,稱為數(shù)據(jù)卷容器;數(shù)據(jù)卷完全獨(dú)立于容器的生存周期,所以容器刪除時(shí),對應(yīng)掛載的數(shù)據(jù)卷不會被刪除。

通過將容器內(nèi)的目錄掛載到主機(jī)上面,就可以讓數(shù)據(jù)實(shí)時(shí)同步,不管是主機(jī)改動,還是容器里有變動,都會同步更新。

2.2 實(shí)操演示

這里先用命令的方式進(jìn)行演示,關(guān)于Dockerfile中的應(yīng)用會在后續(xù)的章節(jié)中說到。

docker run命令中-v的選項(xiàng)在上次沒說,就是故意留到這里單獨(dú)分享;直接在啟動容器的時(shí)候掛載;語法主要有如下幾種方式:

  1. # 指定具體的主機(jī)路徑和容器內(nèi)的路徑 
  2. docker run -v /宿主機(jī)路徑:容器內(nèi)路徑 鏡像名   
  3. # 指定容器內(nèi)的路徑,docker默認(rèn)自動指定主機(jī)路徑 
  4. docker run -v 容器內(nèi)路徑 鏡像名  
  5. # 指定容器內(nèi)的路徑,并指定一個名字,主機(jī)路徑docker自動指定 
  6. docker run -v 卷名:容器內(nèi)路徑 鏡像名  
  • 匿名掛載:在掛載時(shí)不指定名稱,會自動生成一個名稱

指定主機(jī)目錄

命令解析如下圖:

# docker run -it --name="容器名稱" -v 主機(jī)絕對路徑:容器絕對路徑 鏡像名稱

docker run -it --name="TestVolumeCentos" -v /usr/TestDataHost/DataVolumeTest:/usr/TestVolumeData centos

現(xiàn)在已經(jīng)將容器內(nèi)的目錄掛載到主機(jī)上,接下來感受一下數(shù)據(jù)同步:

圖片

通過上圖演示可以看到,不管是在主機(jī)還是在容器中修改數(shù)據(jù),都能及時(shí)同步更新;容器停止之后,主機(jī)更新數(shù)據(jù),容器再啟動,修改的數(shù)據(jù)也會同步到容器;容器刪除,掛載的數(shù)據(jù)不會被刪除,還是在主機(jī)中,這就是我們想要的。

可以通過docker inspect 容器命令查看容器的詳細(xì)信息,其中就有掛載卷的詳細(xì)信息,如下部分截圖:

不指定主機(jī)目錄

很多時(shí)候,我們不喜歡自己指定主機(jī)目錄,而是由Docker自動指定,所以通常我們只指定容器內(nèi)目錄,如下:

看看Docker指定的主機(jī)路徑在哪,還是通過docker inspect 容器ID查看詳情,如下:

看看剛才在容器操作的文件數(shù)據(jù)是否同步過來:

默認(rèn)情況,docker都會將掛載的主機(jī)目錄指定到如上圖的目錄中。

可以通過docker volume ls查看主機(jī)掛載的數(shù)據(jù)卷信息,如下:

通過上圖可以看到,名稱不直觀,看不懂,所以更多時(shí)候都會在掛載的時(shí)候指定一個名稱,即具名掛載。

  • 具名掛載:在掛載時(shí)指定一個名稱。

這里除了掛載的時(shí)候是指定名稱掛載,之后的操作和效果都一樣,這里就不重復(fù)截圖了;需要注意的是這種方式和指定主機(jī)的命令很像,指定路徑那種形式,冒號前面是路徑,如下:

2.3 容器間傳遞數(shù)據(jù)

數(shù)據(jù)卷其實(shí)還可以通過容器繼承方式進(jìn)行掛載,從而實(shí)現(xiàn)容器之間的數(shù)據(jù)共享,如下:

關(guān)鍵命令解析:

  • 先啟動一個具名掛載的容器TestVolumesFromCentos,如下命令:
  1. docker run -it --name="TestVolumesFromCentos" -v testVolumesFrom:/usr/TestVolumeData centos 
  • 在啟動另一個容器TestVolumesFromCentos2,掛載卷繼承于TestVolumesFromCentos,如下命令:
  1. docker run -it --name="TestVolumesFromCentos2" --volumes-from TestVolumesFromCentos centos 

--volumes-from 后指定繼承于哪個容器。

現(xiàn)在不管在哪個容器中變更數(shù)據(jù),都會實(shí)時(shí)同步到其他容器中,從而達(dá)成了容器數(shù)據(jù)的共享和實(shí)時(shí)同步。

通過docker inspect 容器ID看兩個容器的掛載詳情都一樣,截其中一個容器如下:

其實(shí)在指定掛載的時(shí)候還可以限制容器的操作權(quán)限,比如在容器內(nèi)的掛載目錄下,可以限制容器內(nèi)只讀或可讀寫,如下:

ro:代表只讀;

rw:代表讀寫;

好了,關(guān)于容器數(shù)據(jù)卷就說到這吧,是不是聽起來名字高大上,其實(shí)就是對文件或目錄的操作。

2.4 redis安裝實(shí)戰(zhàn)

關(guān)于Redis安裝在Docker中很簡單,直接執(zhí)行命令即可,由于之前拉取過redis的鏡像,所以就直接啟動容器了,如果本地沒有鏡像,就會去遠(yuǎn)程倉庫拉取。

上圖中可以看到,默認(rèn)情況下,redis的鏡像將容器內(nèi)的/data目錄掛載到這個主機(jī)上,而這個目錄就是redis數(shù)據(jù)存放的目錄,這樣就達(dá)到Redis的持久化。

對于Redis而言,很多時(shí)候需要修改配置文件,總不能每次修改都要到容器內(nèi)更改,我們可以將配置文件放在已掛載的目錄中,然后指定啟動,也可以另外針對配置文件再加一個掛載,如下:

執(zhí)行命令前,需要將配置文件提前放在主機(jī)的這個/usr/TestDataHost/redisconf目錄中。

  1. docker run -d -v /usr/TestDataHost/redisconf:/usr/local/etc/redis --name myredisconfigtest redis redis-server /usr/local/etc/redis/redis.conf 

通過docker inspect 容器看看掛載情況,如下:

通過掛載之后,如果需要修改配置文件,只需要在主機(jī)上修改配置文件內(nèi)容即可。

總結(jié)

 

關(guān)于容器數(shù)據(jù)卷就說到這吧,對于容器是不是感覺很給力,既有隔離又有共享,滿足各種場景。

 

責(zé)任編輯:武曉燕 來源: Code綜藝圈
相關(guān)推薦

2020-02-10 19:42:01

CPIP 協(xié)議,

2011-04-27 17:05:39

2010-09-06 17:35:03

PPPOE配置

2011-11-04 16:49:26

Action BarAndroid

2021-09-26 07:38:39

組合問題數(shù)據(jù)結(jié)構(gòu)算法

2010-07-05 15:33:49

2010-06-29 14:38:14

Linux服務(wù)器

2010-08-03 09:17:00

2010-10-08 15:05:00

無線路由設(shè)置

2012-02-20 21:59:08

無線路由設(shè)置

2020-11-18 09:25:39

Docker

2020-12-22 10:57:36

DockerLinux程序員

2010-08-06 10:00:05

負(fù)載均衡

2010-01-13 17:07:21

防輻射機(jī)箱選購

2013-05-23 11:16:28

大數(shù)據(jù)技術(shù)大數(shù)據(jù)AdTime

2021-02-23 08:10:18

Nginx反向代理負(fù)載均衡器

2021-09-30 09:59:23

OSPF網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)技術(shù)

2010-09-09 09:52:03

Linux服務(wù)器

2010-07-14 09:55:12

2010-08-25 09:09:58

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號