Docker的那些事兒—Docker數(shù)據(jù)卷(一)(29)


上一篇:Docker的那些事兒—Docker數(shù)據(jù)管理(28)


數(shù)據(jù)卷是一個(gè)或多個(gè)容器專門指定繞過Union File System,為持續(xù)性或共享數(shù)據(jù)提供一些有用的功能:

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

(2)數(shù)據(jù)卷數(shù)據(jù)的改變是直接修改的。

(3)數(shù)據(jù)卷數(shù)據(jù)的改變不會被包括在容器中。

(4)數(shù)據(jù)卷是持續(xù)性的,直到?jīng)]有容器使用它們。

數(shù)據(jù)卷操作

Docker啟動的時(shí)候可以通過-v選項(xiàng)添加數(shù)據(jù)卷,實(shí)現(xiàn)將主機(jī)上的目錄或者文件掛載到容器中。完整的參數(shù)為:

-v host-dir:container-dir:[rw|wo]

-v container-dir:[rw|wo]

-v volume-name:container-dir:[rw|wo]

其中,

host-dir:表示主機(jī)上的目錄,如果不存在,Docker 會自動在主機(jī)上創(chuàng)建該目錄。必須是絕對路徑。

container-dir:表示容器內(nèi)部對應(yīng)的目錄,如果該目錄不存在,Docker 也會在容器內(nèi)部創(chuàng)建該目錄。

volume-name:表示卷名,如果該卷不存在,docker將自動創(chuàng)建。

rw|ro:用于控制volume的讀寫權(quán)限。

(1)docker run -itd -P -v /test:/data --name myhttp httpd

在宿主機(jī)/test目錄下創(chuàng)建test.txt文件,觀察容器內(nèi)/data目錄下內(nèi)容變化

docker container inspect myhttp查詢Mounts參數(shù)如下:

刪除容器,宿主機(jī)上/test目錄及內(nèi)容未發(fā)生任何變化。

(2)docker run -itd -P -v /data --name myhttp httpd

我們看到容器內(nèi)出現(xiàn)了/data目錄。那這一次又是宿主機(jī)上哪個(gè)目錄掛載到/data下的呢?

我們使用docker volume ls查詢,發(fā)現(xiàn)多了一個(gè)本地卷:f343bc68303155c111bea58a907131d9fe1751bc8ef6528cc53d5b7dce292dee

使用docker volume inspect查詢到如下的掛下點(diǎn)目錄:

/var/lib/docker/volumes/f343bc68303155c111bea58a907131d9fe1751bc8ef6528cc53d5b7dce292dee/_data

當(dāng)在上述目錄下創(chuàng)建test.txt文件后,容器內(nèi)也查詢到該新增文件。

刪除容器后,宿主機(jī)上的目錄及內(nèi)容也未發(fā)生任何變化。

(3)docker run -itd -P -v my_volume:/data --name myhttp httpd

docker自動創(chuàng)建了卷:my_volume,并且這個(gè)卷對應(yīng)的宿主機(jī)的掛載點(diǎn)是:

/var/lib/docker/volumes/my_volume/_data。這和第二種方式幾乎一樣,不同點(diǎn)在于未指定volume名是docker會在/var/lib/docker/volumes隨機(jī)創(chuàng)建一個(gè)目錄。

docker container inspect myhttp查詢Mounts參數(shù)如下:

對于docker數(shù)據(jù)卷的總結(jié):

(1) 三種方式都可以將宿主機(jī)目錄或者文件掛載到容器。

(2) Docker提供了docker volume命令專門對volume進(jìn)行管理。對于第一種方式Type為bind,是無法使用docker volume進(jìn)行管理的。我們也可以使用docker volume create命令創(chuàng)建volume。

(3) 刪除容器是如果使用docker rm container將不會刪除對應(yīng)的Volume。如果想要?jiǎng)h除可以使用docker rm -v container。另外也可以單獨(dú)使用docker volume rm volume_name刪除volume。

(4) 對于已運(yùn)行的數(shù)據(jù)卷容器,不能動態(tài)的調(diào)整其卷的掛載。Docker官方提供的方法是先刪除容器,然后啟動時(shí)重新掛載。



下一篇:Docker的那些事兒—Docker數(shù)據(jù)卷(二)(30)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容