docker volume

本文深入探讨Docker数据卷的概念及其使用方式,包括卷的创建、管理、共享以及与容器的绑定挂载等操作,旨在帮助读者理解如何有效利用Docker卷来实现数据的持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker data volume

  • Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层
  • 如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即“写时复制(COW)”机制。

卷是持久化由Docker容器生成和使用的数据的首先机制。虽然绑定挂载依赖于主机的目录结构,但卷由Docker完全管理。与绑定安装相比,卷有几个优点:

  • 与绑定挂载相比,卷更容易备份或迁移
  • 您可以使用Docker CLI命令或Docker API管理卷
  • 卷在Linux和Windows容器上均可用
  • 卷可以在多个容器之间更安全地共享
  • 卷驱动程序允许您远程主机或云提供程序上存储卷,加密卷的内容或添加其它功能
  • 新卷的内容可以由容器预先填充

另外,与使容器的可写入层中的数据持久化相比,卷通常是更好的选择,因为使用卷不会增加容器的大小,并且容器的内容存在于给定容器的生命周期之外。

1202606-20180317183239359-1743698128.png

Docker有两种类型的卷,每种类型都在窗口中存在一个挂载点,但其在宿主机上的位置有所不同;

  • Bind mount volume(宿主机上的目录结构,类似mount --bind 命令)
  • Docker-managed volume (docker自己管理的目录)
Docker-managed volume
~]# docker run -it --name b1 -v /data docker.io/busybox:latest
查看容器b1的卷、卷标识符及挂载的主机目录
~]# docker inspect -f {{.Config.Volumes}}{{.Mounts}} b1

Bind-mount Volume
~]# docker run -it -v HOSTDIR:VOLUMEDIR --name b2 docker.io/busybox:latest
~]# docker inspect -f {{.Mounts}} b2
多个容器的卷使用同一个主机目录,例如
~]# docker run -it --name b1 -v /hostname/html/:/app/www/ docker.io/busybox:latest
~]# docker run -it --name b2 -v /hostname/html/:/app/www/ docker.io/busybox:latest


复制使用其它容器的卷,为docker run命令使用--volumes-from(复制另一个容器的卷定义)选项
~]# docker run -it --name b1 -v /hostname/html/:/app/www/ docker.io/busybox:latest
~]# docker run -it --name b2 --volumes-from b1 docker.io/busybox:latest
宿主机容器关联后
/hostname/html/{a,b,c}有a,b,c三个文件为空容器内生成目录和文件。并且不管怎样都是mount

volume相关命令:

[root@centos7 ~]# ls /var/lib/docker/volumes/
metadata.db

启动容器并挂载卷,创建文件并退出
[root@centos7 ~]# docker run --name b1 -it -v /app/html/ docker.io/busybox
/ # cd /app/html/
/app/html # ls
/app/html # echo "Hello World!" > index.html
/app/html # ls
index.html
/app/html # exit
[root@centos7 ~]# ls /var/lib/docker/volumes/
765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827  metadata.db
[root@centos7 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

查看b1这个容器的二级Mounts的详细信息。{{两个花括号表示二级选项
[root@centos7 ~]# docker inspect -f {{.Mounts}} b1
[{volume **765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827** /var/lib/docker/volumes/765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827/_data /app/html local  true }]
第一个参数:volume卷
第二个参数:卷名,哈希生成 
第三个参数:挂载至宿主机的目录
第四个参数:本地卷
第五个参数:我也不清楚,就当成可以正常使用的吧!


查看永久存储,哈希生成的目录名
[root@centos7 ~]# cat /var/lib/docker/volumes/765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827/_data/index.html 
Hello World!


[root@centos7 ~]# docker rm b1
b1

显示有哪些卷
[root@centos7 ~]# docker volume ls 
DRIVER              VOLUME NAME
local               765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827

删除卷
[root@centos7 ~]# docker volume rm 765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827
765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827
[root@centos7 ~]# ls /var/lib/docker/volumes/
metadata.db

转载于:https://www.cnblogs.com/dance-walter/p/8591709.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值