Docker Volume 學(xué)習(xí)筆記

1. 簡(jiǎn)介

volume 是將 host 目錄樹中的某個(gè)目錄/文件掛載到 docker container 目錄樹中,可以用來(lái)存儲(chǔ)和共享持久化數(shù)據(jù),獨(dú)立于具體的 container。
images 用來(lái)打包和發(fā)布靜態(tài)文件,volume 用來(lái)持有動(dòng)態(tài)數(shù)據(jù)。
volume 分為兩種:bind mount volumes & Docker-managed volumes

2. Bind mount volumes

bind mount volumes 指向 host 文件系統(tǒng)的某個(gè)指定位置。

用法非常簡(jiǎn)單:

docker run -d --name test_volume  -v ~/example-docs:/usr/local/htdocs -p 80:80
 httpd:latest

2.1 使用場(chǎng)景:

  1. container 需要用到 host 文件系統(tǒng)中的文件或目錄
  2. container 需要和 host 中的非容器內(nèi)程序共享 host 中的數(shù)據(jù)時(shí)

即可將 host 中的 ~/example-docs 目錄掛載到 container 的 /usr/local/htdocs 下
其中, -v 的 key 是 host 的路徑,value 是 container 的路徑。

需要注意:

  1. -v 的 key 需要是絕對(duì)路徑
  2. 如果 container 中的 -v value 中已經(jīng)存在數(shù)據(jù),則會(huì)被掛載的 host 中的目錄覆蓋
  3. 如果指定的 host 中的文件目錄不存在,docker 會(huì)自動(dòng)幫我們創(chuàng)建

有時(shí),為了安全,我們需要限制 container 對(duì)掛載點(diǎn)只讀,同樣很簡(jiǎn)單,只需加:ro即可:

docker run --name bmweb_ro  --volume ~/example-docs:/usr/local/apache2/htdocs/:ro -p 80:80  httpd:latest

2.2 缺點(diǎn)

  1. bind mount volume 會(huì)導(dǎo)致 container 強(qiáng)依賴固定的主機(jī)
  2. 不同的 container 操作同一個(gè) host 文件可能導(dǎo)致沖突

如果需要主機(jī)無(wú)關(guān)的 volume ,可以使用 Docker-managed volumes.

3. Docker-managed volumes

Docker-managed volumes 與 Bind mount volumes 雖然數(shù)據(jù)都是持有在 host 中,但最大的不同之處在于:前者是由 docker daemon 來(lái)管理的。

創(chuàng)建方式:

docker run -d  -v /var/lib/cassandra/data  --name cass-shared  alpine echo Data Container

和 bind mount volume 的不同在于,-v 只有 key,沒(méi)有 value。key 是 container 中的路徑。可以通過(guò)docker inspect來(lái)查看 volume 信息。

4. sharing volumes

兩種類型的 volume 對(duì)應(yīng)兩種不同的共享方式。

4.1 Host-dependent sharing

Host-dependent sharing 顧名思義,依賴主機(jī)的共享,需要使用 bind mount volume。在已知 host 文件系統(tǒng)路徑的情況下,將多個(gè) container 同時(shí)綁定到 bind mount volume 上。

缺點(diǎn):當(dāng)有大量機(jī)器集群的時(shí)候,Host-dependent sharing 是非常難以維護(hù)和管理的。

4.2 Generalized sharing

通過(guò) --volumes-from 將 docker-managed volumes 掛載到其他 containers 中
。volumes 可以被直接 cp 或傳遞性的 cp。

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

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

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