Docker 数据卷 (Volume) - 最佳实践和使用技巧

silverwq
2024-03-14 / 0 评论 / 61 阅读 / 正在检测是否收录...

为什么需要数据卷

因为容器内的文件系统和宿主机的文件系统之间是隔离的,通过数据卷,可以把容器内和宿主机的文件目录关联起来。

数据卷可以理解为一卷相同的数据,会放在同一个位置。

绑定方式

匿名绑定

匿名绑定的方式,只需要指定容器内的目录即可,不需要指定容器外的目录,当容器被删除后,这个容器外的数据也会被删除,所以用的很少

docker run --rm -d -p 80:80 --name nginx_volume -v /usr/share/nginx/html nginx

查看容器的挂载信息,可以进入/var/lib/docker/volumes/d5c4ded82f96bdbbd1521b11b8dcc010c1a2298240f39277b20c0719b685d985/_data目录修改index.html文件即可

docker inspect nginx_volume

ltr7s1fu.png

或者通过下面命令,也可以查看数据卷信息

docker volume ls

ltr847ob.png

需要注意的是,如果通过-f强制删除容器的话,数据卷也不会被删除

docker rm -f nginx_volume

如果使用Dockerfile里的VOLUME指定的的匿名绑定,容器被删除的时候,也不会被删除

具名绑定

具名绑定,需要指定数据卷的名称,例如nginx-html,这种方式,如果容器删除,相应的数据不会被删除。

如果我们不关心数据存在宿主机的哪个位置的话,这个方式用起来比较方便。

docker run --rm -d -p 80:80 --name nginx_volume -v nginx-html:/usr/share/nginx/html nginx

查看挂载到哪个目录

docker inspect nginx_volume

ltr8eydq.png

因为容器删除后,没有删除数据卷,可以手动删除

 docker volume rm nginx-html

bind mount

可以把宿主机的某个目录,映射到容器里的某个目录去。如果宿主机的目录有内容的话,容器里的目录就直接用这个目录。如果宿主机的目录没有内容,则宿主机默认使用容器里目录的内容。如果有多个目录需要映射,则用多个-v。

docker run --rm -d -p 80:80 --name nginx_volume -v /usr/local/www:/usr/share/nginx/html -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf nginx

这种方式好像没有创建数据卷,通过如下方式,看不到数据卷信息

docker volume ls

volume 数据卷管理

创建一个volume

docker volume create volume-name

查看有什么volume

docker volume ls

查看volume 的详情

docker volume inspect volume-name

ltr9vxiu.png

删除 volume

docker volume rm volume-name
0

评论 (0)

取消