赞
踩
使用docker volume create
创建一个Volume数据卷,命令参数为数据卷的名称。
# docker volume create nginx-html
nginx-html
查看当前服务器docker引擎下所有的命名数据卷。
# docker volume ls
DRIVER VOLUME NAME
local nginx-html
通过docker volume inspect <数据卷名称>
查看该数据卷的信息,核心信息是Mountpoint表示该数据卷在宿主机上的文件路径。
# docker volume inspect nginx-html
[
{
"CreatedAt": "2022-04-05T08:32:19+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-html/_data",
"Name": "nginx-html",
"Options": {},
"Scope": "local"
}
]
这时我们可以去宿主机路径"/var/lib/docker/volumes/nginx-html/_data"看一下,里面什么文件都没有,是个空目录。
启动nginx容器,注意-v
的映射关系是宿主机nginx-config(Volume)到容器内/usr/share/nginx/html
路径的映射,实际上就是宿主机文件目录/var/lib/docker/volumes/nginx-html/_data
到容器内/usr/share/nginx/html
路径的映射。
docker run -d --name volume-nginx \
-p 80:80 \
-v nginx-html:/usr/share/nginx/html/ \
nginx:latest
容器启动之后,我们再去看一下"/var/lib/docker/volumes/nginx-html/_data"路径,我们发现这个路径下多出来一些文件,都是nginx默认的html文件。
这就是Volumes的好处:
docker cp
。如何销毁Volume? 销毁Volume的前提是没有容器使用它,可以使用
docker volume rm
命令进行删除。
不同点 | volumes | bind mounts |
---|---|---|
Source位置 | /var/lib/docker/volumes/… | 可以任意指定 |
对已有挂载点影响 | 在容器第一次启动的时候,容器内映射目录的数据复制到volume | 宿主机路径下的文件,覆盖掉容器内挂载路径文件的内容 |
是否支持单个文件映射 | 不支持,只能是目录 | 支持 |
权限控制 | 读写或者只读 | 读写或者只读 |
移植性 | 强,无需指定宿主机文件目录,默认在/var/lib/docker/volumes/ 目录下 | 弱,与宿主机绝对路径强绑定 |
假设我们现在有一百台服务器,我们希望nginx容器在任何一台服务器上启动都使用同样的配置,达到同样的运行效果,该怎么做?
/var/lib/docker/volumes/
目录下。假如某天某个服务器/var/lib/docker
磁盘空间不足,我们只需要重新挂载一个服务器硬盘,将/var/lib/docker
的文件及目录整体迁移至新硬盘的新路径即可,修改docker默认存储路径为新路径,就对于容器的运行没有任何影响。/var/lib/docker
vim /etc/docker/daemon.json
,添加如下内容:
{
"data-root": "/data/docker"
}
文件修改之后,重启docker引擎(需要注意的是:修改默认存储路径,如果你不希望原始的镜像及容器、数据卷等丢失,请先进行数据迁移。)
systemctl daemon-reload
systemctl restart docker
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。