1. 程式人生 > >Docker 數據卷

Docker 數據卷

docker

Docker適合許多無狀態的服務,對於數據的存儲和共享一般是通過數據卷和數據卷容器的方式,這裏將介紹Docker數據卷的相關內容。


docker數據卷的實現方式有兩種:

1、創建一個數據卷容器。

2、創建一個容器,分配存儲空間,讓其他容器訪問。


數據卷

數據卷可以當作一個特殊的容器。docker的其他容器都可以對他進行訪問,類似於NFS。

創建一個數據卷,在容器內部掛載/data:

docker run -it --name volume -v /data centos

-v 指定掛載一個卷或者容器卷。

在容器中可以看到有一個/data目錄:

[[email protected] /]# df -h|grep data
/dev/mapper/centos-root             38G  3.8G   34G  10% /data

我們可以通過查看容器的信息,確認容器中/data的所映射的宿主機目錄:

# docker inspect volume|grep  "Mounts" -A 10
        "Mounts": [
            {
                "Name": "0ceaa3d20a99dd152b542b,
                "Source": "/var/lib/docker/volumes/0ceaa3d20a99dd152b/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

在Source 項中,指定了本地的路徑/var/lib/docker/volumes/0ceaa/_data,映射到容器中的就是/data目錄,在容器的/data目錄中寫入的數據,在宿主機的此路徑一樣可以看到,其實相當於是容器掛載的宿主機的某個目錄。

使用上面的方式系統會默認使用宿主機/var/lib/docker/volumes這個路徑,如果我們想指定一個路徑可以使用如下方式:

宿主機創建一個掛載目錄:

 mkdir /docker_volume

創建容器卷,映射宿主機/docker_volume目錄到容器的/data目錄:

docker run  -it --name volume1 -v /docker_volume/:/data centos

可以指定容器對目錄的讀寫權限:

docker run  -it --name volume1 -v /docker_volume/:/data:ro  centos   #只讀
docker run  -it --name volume1 -v /docker_volume/:/data:rw  centos   #讀寫

如果設置為只讀狀態,嘗試對目錄文件進行修改時會提示只讀:

[[email protected] data]# touch bb
touch: cannot touch ‘bb‘: Read-only file system

也可以對文件進行掛載(不推薦):

docker run  -it --name volume1 -v /test.log/:/test.log  centos

容器卷可以不啟動,其他容器也能正常訪問,只有當所有容器都卸載容器卷磁盤時容器才可以被刪除。


訪問數據卷容器

數據卷容器就是讓一個容器訪問另一個容器的卷。

創建一個容器volumeA,訪問volume1容器中的/data目錄:

docker run -it --name volumeA --volumes-from volume1 centos

查看volumeA中的目錄:

# df -h|grep data
/dev/mapper/centos-root                  38G  3.8G   34G  10% /data

容器就可以共享宿主機的/docker_volume目錄中的所有文件了。

提示:如果是通過以上的方式從宿主機映射一個目錄到容器中,其他容器通過掛載此容器的方式來訪問數據卷,當這個容器停止甚至刪除後對其它容器不會有任何影響。




本文出自 “Trying” 博客,轉載請與作者聯系!

Docker 數據卷