[docker]動態掛卷與資料卷管理
阿新 • • 發佈:2019-01-05
宣告:
本部落格歡迎轉發,但請保留原作者資訊!
內容系本人學習、研究和總結,如有雷同,實屬榮幸!
動態掛卷
目前docker不支援動態掛卷。
有同事就提出,以下方法是否可行:
1. 將塊裝置通過ln連結到容器與host的對映目錄。
2. 將塊裝置掛載到容器與host的對映目錄。
以下是實驗過程:
由於非特權無法看到/dev下的裝置,因此ln連結實際是無效的。 同理,對於其他塊裝置,也是這樣的。
當然,我們可以配置privileged,則可以看到這些裝置。但是privileged本身存在很大的安全隱患。
code> [[email protected] ~]# docker run --rm -t -i -v /home/test:/home/test centos:latest bash [[email protected] /]# ls /home/test/ [[email protected] ~]# ln -s /dev/loop1 /home/test/loop1 [[email protected] ~]# ls /home/test/loop1 -l lrwxrwxrwx. 1 root root 10 Jan 23 03:33 /home/test/loop1 -> /dev/loop1 [[email protected] /]# ls /home/test/ -l total 0 lrwxrwxrwx. 1 root root 10 Jan 23 08:33 loop1 -> /dev/loop1
可以看到這種方法也是不行的。原因是容器的目錄系統與host是隔離的。
因此即使對映到了容器中,在host中繼續對對映目錄映象掛載操作,也不會影響容器內部。
[[email protected] ~]# docker run --rm -t -i -v /home/test:/home/test centos:latest bash
[[email protected] /]# ls /home/test/
a.txt
[[email protected] home]# touch /home/test/a.txt
[[email protected] home]# mount /dev/loop10 /home/test
[ [email protected] home]# ls /home/test/
lost+found
[[email protected] /]# ls /home/test/
a.txt
[[email protected] home]# umount /home/test/
[[email protected] home]# ls /home/test
a.txt
資料卷管理
資料卷
資料卷是特別設計的目錄,繞過了容器的Union File System,向容器提供持久化資料和共享資料的能力。
- 資料卷可以多個容器共享和重用
- 資料卷獨立於容器存在
- 更新容器映象,不影響資料卷
- 資料卷的讀寫是直接的,繞過容器的Union File System 例子:
$ docker run -t -i -v /test centos:latest bash $ docker run -t -i -v /home/test:/home/test centos:latest bash $ docker run -t -i -v /home/test/data.txt:/home/test/data.txt centos:latest bash
資料卷容器
$ docker run -d -v /data/ --name dbdata centos:latest bash
$ docker run -d --volume-from dbdata --name app centos:latest app
備份
$ docker run --volumes-from dbdata -v $(pwd):/backup busybox tar xvf /backup/backup.tar
參考:
1. docs.docker.com/userguide/dockervolumes 2. dockerone.com/article/149