簡介
集群當中掛載數據卷的方式采用--mount標志。而且-mount標記相比於-v意圖更明確.
如果不進行數據掛載的話,當容器不在時,對應的數據也不會持久存在
存儲方式
- 卷存儲,由docker管理使用docker -volume create創建管理。卷也是docker官方推薦的持久化方式
- 綁定掛載,就是把宿主機的地址掛載到容器內
- tmpfs掛載只存儲在主機系統的內存當中。(用到的比較少)
綁定目錄
采用-v的方式掛載容器。該文件或目錄不需要在Docker主機上已經存在,如果尚不存在,則按需創建
- 采用-v的形式宿主機的文件會覆蓋data里面的文件。
- 如果宿主機目錄為空的話,容器內掛載文件會清空
docker run -tid -v /etc/docker/redis/data:data --name redis redis
1.自動創建目錄
# 該路徑現在不存在,run之后自動生成
docker run -tid --name nginx -v /root/data/nginxtest:/etc/nignx/ nginx
圖中可見,在運行時會自動創建宿主機目錄,但是內容為空,並且容器也無法啟動,會報錯:未找到nginx.conf 也就是說**在映射的時候,宿主機沒有nginx.conf**文件.所以導致nginx無法啟動
2.自動創建文件
這里會看到直接報錯。
3.宿主機已存在文件掛載
正常掛載
4.掛載已存在目錄
正常掛載
總結
1.掛載空目錄容器內的信息會被覆蓋.
2.掛載目錄時會自動創建目錄,但是文件不會創建
3.如果需要掛載目錄,需要先把需要掛載的內容cp到宿主機,然后執行掛載
創建數據卷
數據卷項目綁定d目錄有如下優點:
- 更容易遷移和備份
- 可以使用docker cli命令管理卷
- 卷在liunx和windows 都可以使用
- 可在多個容器之間共享數據卷
# 創建數據卷
docker volume create my-data
# 查看信息
docker volume inspect my-data
# 查看所有卷信息
docker volume ls
# 刪除卷
docker volume rm my-data
掛載數據卷
首先需要創建數據卷,當然也可以在創建service的時候,指定數據卷名稱,會自動創建一個數據卷,集群中的數據卷都是采用--mount參數進行掛載。
type為bind的時候,掛載的是主機路徑,必須引用主機上現有的路徑,並且不會自動創建該路徑,如果路徑不存在,服務創建失敗
type為volume的時候掛載的是數據卷。
# 掛載數據卷
docker service create --mount type=volume,src=redisdata,dst=/data --name redis redis
# 掛載目錄
docker service create --mount type=bind,src=/data,dst=/data --name redis redis