040、Docker managed volume(2019-03-01 週五)

三角形發表於2019-03-01
 
docker managed volume 與bind mount 在使用上最大的區別是不需要指定mount 源,指明mount point就可以了
 
[root@5bvkl harbor]# docker run --name web01 -d -v /usr/local/apache2/htdocs httpd
6651fcb21173bbcb57c248d513adb6bbd7813b89c74e1dc1ff52f7373340e13b
[root@5bvkl harbor]# docker inspect web01
......
        "Mounts": [
            {
                "Type": "volume",
                "Name": "209e95239ee86ead11a89a6b0b685cf4dbc05cfb746726f8707a69fc8fe19fd3",
                "Source": "/var/lib/docker/volumes/209e95239ee86ead11a89a6b0b685cf4dbc05cfb746726f8707a69fc8fe19fd3/_data",
                "Destination": "/usr/local/apache2/htdocs",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
......
[root@5bvkl harbor]# ll /var/lib/docker/volumes/209e95239ee86ead11a89a6b0b685cf4dbc05cfb746726f8707a69fc8fe19fd3/_data
total 4
-rw-r--r-- 1 root 40 45 Jun 12  2007 index.html
[root@5bvkl harbor]# cat /var/lib/docker/volumes/209e95239ee86ead11a89a6b0b685cf4dbc05cfb746726f8707a69fc8fe19fd3/_data/index.html
<html><body><h1>It works!</h1></body></html>
 
[root@5bvkl harbor]# docker volume inspect 209e95239ee86ead11a89a6b0b685cf4dbc05cfb746726f8707a69fc8fe19fd3
[
    {
        "CreatedAt": "2019-03-01T09:07:03+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/209e95239ee86ead11a89a6b0b685cf4dbc05cfb746726f8707a69fc8fe19fd3/_data",
        "Name": "209e95239ee86ead11a89a6b0b685cf4dbc05cfb746726f8707a69fc8fe19fd3",
        "Options": null,
        "Scope": "local"
    }
]
 
每當容器申請mount dockermanaged volume時,docker都會在/var/lib/docker/volume下生成一個目錄,該目錄中的內容和容器中mount point目錄中的內容完全一致。
 
因為當mount point是已經存在的目錄,那麼mount point目錄中的內容會被複制到dockerhost上,此時mount point已經不再是storage driver管理的層資料了,他已經是一個data volume,我們可以像bind mount一樣對資料進行操作
 
docker volume 也可以檢視mount資訊,但是隻能看到docker managed volume 的資訊,bind mount的資訊看不到
 
對比bind mount 和 docker managed volume
 
相同點:兩者都是host檔案系統中的某個路徑
 
不同點:
    1、volume位置docker manged volume不能指定
    2、對已經mount point 影響不同,前者用host上的檔案或者目錄進行覆蓋,後者將容器中的目錄複製到host上
    3、前者支援單個檔案,後者只支援目錄
    4、前者可以設定只讀,後者不支援
    5、移植性:前者移植性弱,與host path繫結,後者移植性強無需指定host目錄
 

相關文章