docker數據持久化


如果想讓數據持久保留,兩種方法:

1、Docker 的綁定掛載功能,這個功能可以將宿主系統的文件或文件夾掛載到容器里

2、使用 Docker 卷來創建一個卷並掛載到容器里。

下面我們就一起來了解下這兩種方法以及如何使用。

Docker 數據持久化

 

Docker 綁定掛載

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

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

例如:

在宿主系統創建一個/tmp/jason文件夾並創建一個test文檔,文檔內容為“hello,jason”:

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

查看test.txt

 

 

 創建一個容器將剛剛創建的文件夾掛載到容器里

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM