若是想讓數據持久保留,兩種方法:html
一、Docker 的綁定掛載功能,這個功能能夠將宿主系統的文件或文件夾掛載到容器裏docker
二、使用 Docker 捲來建立一個卷並掛載到容器裏。spa
下面咱們就一塊兒來了解下這兩種方法以及如何使用。.net
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 參數設置成只讀權限,此時:
例如:
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 卷,把卷掛載到容器裏的/usr/bin
,因爲 Docker 卷的特性,新卷能夠經過容器預先填充內容,因此容器裏的/usr/bin
的內容會被寫入到卷裏。
例子:
建立一個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