编辑
2024-02-08
TechNotes
00

目录

概念
是什么?
为什么需要?
能干什么?
绑定方式
匿名绑定
具名绑定
Bind Mount
数据卷管理
示例

概念

是什么?

数据卷相当于是容器的虚拟文件系统和主机的真实文件系统之间的一个桥梁,建立数据卷就相当于是打通了容器于主机之间的文件交互通道,可以让容器运行时所产生的数据变更被保存到主机中,能够更方便的对数据进行备份以及保护

为什么需要?

当我们在容器中运行一些关键的应用如MySQL、Redis等服务,其中都会存储着一些关键数据,这些数据是你希望即使删除容器也不应该被删除的,此时我们便需要用到数据卷了。

能干什么?

你可以将数据卷理解为文件目录的映射,我们可以通过 Docker 提供的相关命令,来将主机中的某一个文件目录映射到容器中,此时当你在容器中操作该目录下的文件时,实际上操作的就是主机中的文件。

image.png

  • 可以使用docker volume ls命令来查看已经存在的docker volume

绑定方式

匿名绑定

在启动容器时直接使用 -v /container_dir 即可完成匿名绑定,匿名绑定的方式将在 Docker 的 volumes 目录下生成一个 sha256 的字符串作为目录名,且指定的 /container_dir 中的文件或目录会被保存在该处,匿名绑定的 volume 在容器被删除的时候,数据卷也会被删除

  • 命令例子
bash
docker run --rm -d -p 80:80 -v /www/test nginx
  • 匿名绑定方式由于不知道名称,因此如果需要查看数据卷在主机的哪个位置,需要使用 docker inspect container_id 来查看

image.png

具名绑定

同样是启动容器时绑定一个数据卷,不同的是可以为该数据卷起个名字 -v volume-name

,通过名字你可以快速的定位并管理这些 volume, 具名绑定的 volume 在容器被删除的时候,数据卷不会被删除

  • 命令例子
bash
docker 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

image.png

Bind Mount

绑定并加载主机的某个文件目录到容器中,这种方式是平常最常用的。这种绑定方式与前面两种一样,也是在容器启动时使用 -v host_dir

的格式来完成映射

  • 命令例子
bash
docker 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 来查看相关命令的使用

  • Usage: docker volume COMMAND

Manage volumes

  • Commands:
    • create 创建一个数据卷
    • inspect 显示一个或多个数据卷的详细信息
    • ls 查看目前已有的数据卷列表
    • prune 删除所有本地没有被使用的数据卷
    • rm 删除一个或多个数据卷

示例

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
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:GYC

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!