目錄
PS:關於卷的官方文檔:https://docs.docker.com/storage/
1. 三種掛載數據的方法
- volumes
docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)。
保存數據的最佳方式。
- bind mounts
將宿主機上的任意位置文件或者目錄掛載到容器中。
- tmpfs
掛載存儲在主機的內存中,不持久存儲。
常用爲 volumes,bind mounts,tmpfs並不常用
2. 管理卷
Volume:
volume屬於管理命令
命令下的參數比較少,也比較好理解
create //創建
inspect //查看卷詳情
ls //列出卷
rm //刪除卷
prune //刪除所有未使用的卷
創建一個卷
$ docker volume create web_01_vol
創建的卷在這個目錄下:
/var/lib/docker/volumes
如何掛載
如何掛載這個捲到容器中
$ docker container run -itd --name=web_01 -p 8080:80 --mount src=web_01_vol,dst=/usr/share/nginx/html nginx
容器創建成功後,該目錄也會掛載到 /var/lib/docker/volumes/web_01_vol/_data
修改index.html文件 驗證
如果沒有指定掛載卷,會自動掛載一個卷
重新創建一個卷積,共用一個卷,卷積的文件通用,數據卷不會因爲容器的刪除而丟失,它會長期保留。
$ docker container run -d --name=test_01 --mount src=web_01_vol,dst=/usr/share/nginx/html nginx
刪除卷
$ docker container stop 7740ca246029 f11f0c5fbcf5 //關機
$ docker container rm f11f0c5fbcf5 7740ca246029 //刪除容器
$ docker volume rm web_01_vol //刪除卷
Bind Mounts
它是將宿主機的某個文件掛載到容器中
其命令格式都一樣
實例:
創建一個Bind 卷
假如宿主機 /home/目錄下有個1.txt文件需要掛載到容器中
目錄跟文件均可掛載,掛載到容器的文件和目錄跟宿主機其實差不多是一個軟鏈接狀態,容器中改變文件或宿主機改變文件都會受影響。
$ docker container run -itd --name=test_01 --mount type=bind,src=/home/test/123.txt,dst=/home/1.txt centos
驗證
如果沒有指定卷,會報錯。
$ docker container inspect c4a1deeb58d2
刪除Bind卷
跟Volume一樣
$ docker container stop 7740ca246029 f11f0c5fbcf5 //關機
$ docker container rm f11f0c5fbcf5 7740ca246029 //刪除容器
$ docker volume rm web_01_vol //刪除卷
Volume 與 Bind 特點
Volume
- 多個運行容器之間共享數據,多個容器可以同時掛載相同的卷。
- 當容器停止或被移除時,該卷依然存在。
- 當明確刪除卷時,卷纔會被刪除。
- 將容器的數據存儲在遠程主機或其他存儲上(間接)
- 將數據從一臺Docker主機遷移到另一臺時,先停止容器,然後備份卷的目(/var/lib/docker/volumes/)
Bind
- 從主機共享配置文件到容器。默認情況下,掛載主機/etc/resolv.conf到每個容器,提供DNS解析。
- 在Docker主機上的開發環境和容器之間共享源代碼。例如,可以將Maven target目錄掛載到容器中,每次在Docker主機
- 上構建Maven項目時,容器都可以訪問構建的項目包。
- 當Docker主機的文件或目錄結構保證與容器所需的綁定掛載一致時