数据卷相当于是容器的虚拟文件系统和主机的真实文件系统之间的一个桥梁,建立数据卷就相当于是打通了容器于主机之间的文件交互通道,可以让容器运行时所产生的数据变更被保存到主机中,能够更方便的对数据进行备份以及保护
当我们在容器中运行一些关键的应用如MySQL、Redis等服务,其中都会存储着一些关键数据,这些数据是你希望即使删除容器也不应该被删除的,此时我们便需要用到数据卷了。
你可以将数据卷理解为文件目录的映射,我们可以通过 Docker 提供的相关命令,来将主机中的某一个文件目录映射到容器中,此时当你在容器中操作该目录下的文件时,实际上操作的就是主机中的文件。
docker volume ls
命令来查看已经存在的docker volume在启动容器时直接使用 -v /container_dir 即可完成匿名绑定,匿名绑定的方式将在 Docker 的 volumes 目录下生成一个 sha256 的字符串作为目录名,且指定的 /container_dir 中的文件或目录会被保存在该处,匿名绑定的 volume 在容器被删除的时候,数据卷也会被删除
bashdocker run --rm -d -p 80:80 -v /www/test nginx
docker inspect container_id
来查看同样是启动容器时绑定一个数据卷,不同的是可以为该数据卷起个名字 -v volume-name
,通过名字你可以快速的定位并管理这些 volume, 具名绑定的 volume 在容器被删除的时候,数据卷不会被删除
bashdocker run --rm -d -p 80:80 -v nginx-www:/www/test nginx
bash[root@ser977621502852 _data]# docker run -d --rm --name nginx02 -p 8090:80 -v nginx02:/usr/share/nginx/html nginx
2c5e47e0997d00474644942eef507296c569124b0348b31d751dcf40184c3cdd
[root@ser977621502852 _data]# docker volume ls
DRIVER VOLUME NAME
local eab1ce65fdf3112b004ff3f5c8456423dec55a49b0629889d966a34c60fd363d
local nginx02
绑定并加载主机的某个文件目录到容器中,这种方式是平常最常用的。这种绑定方式与前面两种一样,也是在容器启动时使用 -v host_dir
的格式来完成映射
bashdocker run --rm -d -p 80:80 -v /www/gyc:/www/gyc -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf nginx
Docker 为我们提供了一些专门用于管理数据卷的命令 docker volume,通过下面的 Usage 来查看相关命令的使用
Manage volumes
bash[root@ser977621502852 _data]# docker volume ls
DRIVER VOLUME NAME
local eab1ce65fdf3112b004ff3f5c8456423dec55a49b0629889d966a34c60fd363d
local nginx02
[root@ser977621502852 _data]# docker volume create gycvolume
gycvolume
[root@ser977621502852 _data]# docker volume ls
DRIVER VOLUME NAME
local eab1ce65fdf3112b004ff3f5c8456423dec55a49b0629889d966a34c60fd363d
local gycvolume
local nginx02
[root@ser977621502852 _data]# docker volume inspect gycvolume
[
{
"CreatedAt": "2024-02-8T016:26:00Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/gycvolume/_data",
"Name": "gycvolume",
"Options": null,
"Scope": "local"
}
]
[root@ser977621502852 _data]# docker volume rm gycvolume
gycvolume
[root@ser977621502852 _data]# docker volume ls
DRIVER VOLUME NAME
local eab1ce65fdf3112b004ff3f5c8456423dec55a49b0629889d966a34c60fd363d
local nginx02
本文作者:GYC
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!