1. 程式人生 > >[docker]動態掛卷與資料卷管理

[docker]動態掛卷與資料卷管理

宣告:

本部落格歡迎轉發,但請保留原作者資訊!

內容系本人學習、研究和總結,如有雷同,實屬榮幸!

動態掛卷

目前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