docker數據持久化

若是想讓數據持久保留,兩種方法:html

一、Docker 的綁定掛載功能,這個功能能夠將宿主系統的文件或文件夾掛載到容器裏docker

二、使用 Docker 捲來建立一個卷並掛載到容器裏。spa

下面咱們就一塊兒來了解下這兩種方法以及如何使用。.net

Docker 數據持久化

 

Docker 綁定掛載

Docker 綁定掛載可讓宿主系統的文件夾掛載到容器裏,經常使用於文件共享,也能夠用於數據持久化,不過官方更推薦使用 Docker 卷(等會講)。3d

綁定掛載須要在建立容器的時候進行掛載,掛載的方式也很簡單,只須要添加-v參數。code

例如:htm

在宿主系統建立一個/tmp/jason文件夾並建立一個test文檔,文檔內容爲「hello,jason」:blog

mkdir /tmp/jason
echo "hello,jason" >/tmp/jason/test.txt

查看test.txt文檔

 

 

 建立一個容器將剛剛建立的文件夾掛載到容器裏get

docker run -itd -v /tmp/jason:/test --name mivm alpine /bin/sh

-v後面的兩個參數,第一個是宿主系統路徑,第二個是掛載目標路徑,能夠用來掛載文件夾,也能夠用來掛載文件,並且能夠掛載多個,只須要添加多個-v便可,若是宿主系統裏不存在文件夾,Docker 會自動建立文件夾。

默認狀況下 mount 的數據是可讀可寫的。咱們能夠添加 ro 參數設置成只讀權限,此時:

    • 在容器中沒法對 bind mount 數據進行修改。 
    • 只有 host 有權修改數據。

例如:

docker run -itd -v /tmp/jason:/test:ro  --name mivm alpine /bin/sh

 

 

 咱們從容器修改文件,會發現沒有權限

 

 

若是容器目標文件夾裏有文件,宿主機文件夾沒有文件,則容器的文件夾會被隱藏

 

驗證

使用容器讀取剛剛掛載的文件夾的文件,看是否和宿主機上的test.txt文件類容同樣

docker exec mivm cat /test/test.txt

 

 

 在容器建立一個新的文本文檔mivm.txt,在宿主機上查看

docker exec mivm /bin/sh -c "echo \"Hello mivm\" > /test/mivm.txt"

 

 

 刪除容器,查看宿主機文件是否還存在

docker stop mivm &&docker rm mivm

查看宿主機

 

 

 

新建立容器   mivm-test綁定掛載宿主機剛纔的目錄,來繼續使用剛纔的文件

docker run -itd -v /tmp/jason:/test --name mivm-test  alpine /bin/sh

進入容器查看  /test目錄

docker exec -it mivm-test /bin/sh

 

 能夠看到文件還在

 

這是第一種數據持久化的方法,在大多數狀況下都適用

 

 

Docker 卷

若是想持久化容器裏已有的文件,須要建立一個 Docker 卷,把卷掛載到容器裏的/usr/bin,因爲 Docker 卷的特性,新卷能夠經過容器預先填充內容,因此容器裏的/usr/bin的內容會被寫入到卷裏。

  • 建立:docker volume create
  • 刪除某個卷:docker volume rm 卷名    刪除卷以前先確保卷沒有被容器使用
  • 刪除全部未使用的卷:docker volume prune
  • 列出全部卷:docker volume ls
  • 查看某個卷的信息:docker volume inspect 卷名

例子:

建立一個volume卷

docker volume create mivm-data

查看該卷

 

 

驗證:

建立一個容器將剛剛建立的卷掛載到容器裏

docker run -itd -v mivm-data:/tmp/test --name mivm alpine /bin/sh

 

 -v後面的兩個參數,第一個是卷名稱,第二個是掛載目標路徑,卷名稱必須存在,Docker 不會自動建立卷。

 

列出容器的文件

docker exec mivm ls /tmp/test

 

 能夠看到是空的

 

使用容器向掛載點寫入文件

docker exec mivm /bin/sh -c "echo \"Hello mivm\" > /tmp/test/mivm.txt"

結束並刪除掉容器

docker stop mivm && sudo docker rm mivm

從新建立新容器並掛載mivm-data卷

docker run -itd -v mivm-data:/tmp/test --name mivm-test-1 alpine /bin/sh

 

 讀取咱們剛剛寫入的文件

docker exec mivm-test-1 cat /tmp/test/mivm.txt

 

 

參考:

https://www.hangge.com/blog/cache/detail_2403.html

http://c.biancheng.net/view/3203.html

https://www.qikqiak.com/k8s-book/docs/6.數據共享與持久化.html

相關文章
相關標籤/搜索