四、Docker數據管理

1、掛載類型

一、volumes

Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)。保存數據的最佳方式。html

使用場景:將容器中的數據持久化到宿主機,好比容器是mysql,容器重啓後就沒數據了,此時須要保存到宿主機上。mysql

 

二、bind mounts

將宿主機上的任意位置的文件或者目錄掛載到容器中。nginx

使用場景:容器使用一些宿主機上的文件或目錄。好比zabbix agent 他須要採集宿主機上的proc目錄對其進行監控。web

三、tmpfs

掛載存儲在主機系統的內存中,而不會寫入主機的文件系統。若是不但願將數據持久化到任何位置,可使用tmpfs,同時避免寫入容器可寫層,以提升性能。sql

使用較少。docker

 

 

 2、volumes

一、建立和查看volume

 

二、使用vloume

 注意:也可使用-v的方式,是老的方式。數據庫

docker run -d --name lnmp_web03 -p8889:80 -v nginx_root:/usr/share/nginx/html nginx性能

三、驗證

修改主頁網站

 查看主頁spa

直接修改/var/lib/docker/volumes/nginx_root/_data數據,就是修改的容器的數據,當容器掛掉後,咱們從新再啓動一個新的容器便可。這就是volume的好處啦。

 

3、bind mounts

bind方式和volume不一樣之處是:bind方式是直接將宿主機上的某個目錄做爲源。此目錄必須存在,否則會報錯。

一、bind方式建立容器

 

 注意:

一、若是源文件/目錄沒有存在,不會自動建立,會拋出錯誤。

二、若是掛載目標在容器中非空目錄,則改目錄現有內容將被隱藏。

三、使用另一種方式使用bind

 docker run -d --name lnmp_ggg -p8889:80 -v /mnt:/usr/share/nginx/html nginx

二、查看容器

容器裏面原本是有內容的,掛載源文件後,會被覆蓋,現有內容隱藏起來。

 

三、編寫主頁

 

四、驗證

五、查看源目錄 

 

4、總結

一、volume特色

  • 多個運行容器之間共享數據。
  • 當容器中止或被移除時,該卷依然存在。
  • 多個容器能夠同時掛載相同的卷。
  • 當明確刪除卷時,卷纔會被刪除。
  • 將容器的數據存儲在遠程主機或其餘存儲上。
  • 將數據從一臺dokcer遷移到另一臺時,先中止容器,而後備份卷的目錄(/var/lib/docker/volumes)
  • volume最大的特色:容器初始化時,容器的某個目錄映射到宿主機,也就是把容器的數據持久化到volume上。container =>docker host
  • 使用命令建立一個volume後,系統會在/var/lib/docker/volume/下面生成一個volume,而後容器的數據會映射到宿主機的volume下。主要用於容器數據的持久化。

二、Bind Mounts特色

  • 從主機共享配置文件到容器,默認狀況下,掛載主機resolv.conf到每一個容器,提供DNS解析。
  • 在Docker主機上的開發環境和容器之間共享源代碼。例如,能夠將Maven target目錄掛載到容器中,每次在Docker上構建Maven項目時,容器均可以訪問構建最新的項目包。
  • 當Docker主機的文件或目錄結構保證與容器所需的綁定掛載一致時。
  • Bind的最大特色是:容器初始化時,宿主機上的某個目錄映射到容器的dst目錄,而且dst目錄本來有內容也會被覆蓋掉,本質是宿主機的volume映射到容器。docker host=>container
  • 將宿主機的某個文件目錄映射到docker容器,若是容器對應目錄不爲空,則會被宿主機目錄下的內容覆蓋掉!

總結:

volume適應於多個容器共享數據,方便容器數據持久化!好比Mysql數據庫進行數據持久化。

Bind Mounts適應於宿主機和容器共享文件!好比一個網站要常常更新,可使用Bind方式,每次提交最新的代碼,用戶訪問的也是最新的。

相關文章
相關標籤/搜索