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 數據卷