溫馨提示×

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

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

Docker數(shù)據(jù)存儲(chǔ)Volumes怎么管理

發(fā)布時(shí)間:2022-03-24 16:52:13 來(lái)源:億速云 閱讀:162 作者:iii 欄目:web開發(fā)

這篇文章主要介紹“Docker數(shù)據(jù)存儲(chǔ)Volumes怎么管理”,在日常操作中,相信很多人在Docker數(shù)據(jù)存儲(chǔ)Volumes怎么管理問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Docker數(shù)據(jù)存儲(chǔ)Volumes怎么管理”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

默認(rèn)容器的數(shù)據(jù)的讀寫發(fā)生在容器的存儲(chǔ)層,當(dāng)容器被刪除時(shí)其上的數(shù)據(jù)將會(huì)丟失。所以我們應(yīng)該盡量保證容器存儲(chǔ)層不發(fā)生寫操作,為了實(shí)現(xiàn)數(shù)據(jù)的持久化存儲(chǔ)我們需要選擇一種方案來(lái)保存數(shù)據(jù),當(dāng)前有以下幾種方式:

  • volumes

  • bind mounts

  • tmpfs mounts

下圖展示了這三種技術(shù):

Docker數(shù)據(jù)存儲(chǔ)Volumes怎么管理

volumes

volumes(數(shù)據(jù)卷)是一個(gè)可供一個(gè)或多個(gè)容器使用的位于宿主機(jī)上特殊目錄,它擁有以下特性:

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

  • 對(duì)數(shù)據(jù)卷的寫入操作,不會(huì)對(duì)鏡像有任何影響

  • 數(shù)據(jù)卷默認(rèn)會(huì)一直存在,即使容器被刪除

使用數(shù)據(jù)卷的目的是持久化容器中的數(shù)據(jù),以在容器間共享或者防止數(shù)據(jù)丟失(寫入容器存儲(chǔ)層的數(shù)據(jù)會(huì)丟失)。

使用數(shù)據(jù)卷的步驟一般分為兩步:

  1. 創(chuàng)建一個(gè)數(shù)據(jù)卷

  2. 使用-v或--mount參數(shù)將數(shù)據(jù)卷掛載容器指定目錄中,這樣所有該容器針對(duì)該指定目錄的寫操作都會(huì)保存在宿主機(jī)上的volume中。

volume管理

創(chuàng)建一個(gè)volume:

$ docker volume create my-vol

查看volumes:

$ docker volume ls
local    my-vol
$ docker volume inspect my-vol
[
 {
  "driver": "local",
  "labels": {},
  "mountpoint": "/var/lib/docker/volumes/my-vol/_data",
  "name": "my-vol",
  "options": {},
  "scope": "local"
 }
]

我么可以看到創(chuàng)建的volume my-vol保存在目錄/var/lib/docker/volumes/下,以后所有針對(duì)該volume的寫數(shù)據(jù)都會(huì)保存中目錄/var/lib/docker/volumes/my-vol/_data下。

刪除一個(gè)volume:

$ docker volume rm my-vol

或者刪除所有未使用的volumes:

docker volume prune

掛載數(shù)據(jù)卷到容器目錄

創(chuàng)建了一個(gè)volume之后,我們可以在運(yùn)行容器時(shí)通過(guò)指定-v或--mount參數(shù)來(lái)使用該volume:

使用--mount參數(shù):

$ docker run -d \
 --name=nginxtest \
 --mount source=nginx-vol,destination=/usr/share/nginx/html \
 nginx:latest

source指定volume,destination指定容器內(nèi)的文件或文件夾。

或者使用-v參數(shù):

$ docker run -d \
 --name=nginxtest \
 -v nginx-vol:/usr/share/nginx/html \
 nginx:latest

掛載成功后,容器從/usr/share/nginx/html目錄下讀取或?qū)懭霐?shù)據(jù),實(shí)際上都是從宿主機(jī)的nginx-vol數(shù)據(jù)卷中讀取或?qū)懭霐?shù)據(jù)。因此volumes或bind mounts也可以看作是容器和宿主機(jī)共享文件的一種方式。

-v參數(shù)使用冒號(hào)分割source和destination,冒號(hào)前半部分是source,后半部分是destination。

如果你掛載一個(gè)還不存在的數(shù)據(jù)卷,docker會(huì)自動(dòng)創(chuàng)建它。(因此創(chuàng)建數(shù)據(jù)卷那一步非必需)

如果容器中的待掛載的目錄不是一個(gè)空目錄,那么該目錄下的文件會(huì)被復(fù)制到數(shù)據(jù)卷中。(bind mounts下,宿主機(jī)上的目錄總會(huì)覆蓋容器中的待掛載目錄)

-v參數(shù)和--mount參數(shù)總的來(lái)說(shuō)功能幾乎相同,唯一的區(qū)別是在運(yùn)行一個(gè)service時(shí)只能夠--mount參數(shù)來(lái)掛載數(shù)據(jù)卷。

使用只讀數(shù)據(jù)卷

有些情況下,我們希望某個(gè)數(shù)據(jù)卷對(duì)某個(gè)容器來(lái)說(shuō)是只讀的,可以通過(guò)添加readonly選項(xiàng)來(lái)實(shí)現(xiàn):

$ docker run -d \
 --name=nginxtest \
 --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly \
 nginx:latest

或者使用-v參數(shù):

$ docker run -d \
 --name=nginxtest \
 -v nginx-vol:/usr/share/nginx/html:ro \
 nginx:latest

到此,關(guān)于“Docker數(shù)據(jù)存儲(chǔ)Volumes怎么管理”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向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