如果想讓數據持久保留,兩種方法:
1、Docker 的綁定掛載功能,這個功能可以將宿主系統的文件或文件夾掛載到容器里
2、使用 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