操作 Docker 存储卷的常用指令汇总

本文详细介绍了Docker中的存储卷概念,包括管理卷、绑定卷和临时卷的区别,以及如何通过`dockerrun`命令中的-v和--mount参数进行创建和映射。还涵盖了volume的生命周期管理和数据持久性问题。
摘要由CSDN通过智能技术生成

1. 什么是存储卷?

   存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。使得可以在宿主机和容器内共享数据库内容,让容器直接访问宿主机中的内容,也可以宿主机向容器写入内容,容器和宿主机的数据读写是同步的

  存储卷可以分为三类:

  1. 管理卷:默认映射到宿主机的/var/lib/docker/volumes 目录下, 只需要在容器内指定容器的挂载点是什么,而被绑定宿主机下的那个目录,是由容器引擎 daemon 自行创建一个空的目录。
  2. 绑定数据卷:映射到宿主机指定路径下,在宿主机上的路径要人工的指定一个特定的路径。
  3. 临时数据卷:映射到于宿主机内存中,一旦容器停止运行,tmpfs、mounts 会被移除,数据就会丢失,用于高性能的临时数据存储。

2. 管理卷

   存储卷可以通过命令方式创建,也可以在创建容器的时候通过 -v and --mount 指定。

2.1 Volume 命令操作

命令功能
docker volume create创建存储卷
docker volume inspect显示存储卷详细信息
docker volume ls列出存储卷
docker volume prune清理所有无用数据卷
docker volume rm删除卷,使用中的无法删除
2.1.1 docker volume create
  • 功能:创建存储卷
docker volume create [OPTIONS] [VOLUME]
  • 参数:
    • -d:指定驱动,默认是 local
    • –label:指定元数据(标签,给卷添一些备注信息)

image.png

    通过这种方式创建出来的卷的默认的目录是/data/var/lib/docker/volumes/

image-20240213222504552

--label 是设置卷的备注信息。

image-20240213214447049

2.1.2 docker volume inspect
  • 功能:查看卷详细信息(上面的演示)
docker volume inspect VOLUME
2.1.3 docker volume ls
  • 功能:列出所有的卷
docker volume ls [OPTIONS]
  • 参数:
    • –format:指定相应个格式,如 json,table
    • -f:过滤
    • -q:仅显示名称

image-20240213220014550

2.1.4 docker volume rm
  • 功能:删除卷,需要容器不使用。
docker volume rm [OPTIONS] VOLUME [VOLUME...]
  • 参数:-f:强制删除

image-20240213221204816

2.1.5 docker volume prune
  • 功能:删除不使用的本地卷
docker volume prune [OPTIONS]
  • 参数:
    • –filter:过滤
    • -f:不提示是否删除

2.2 -v 或者–mount 指定

2.2.1 -V 参数
docker run -v name:directory[:options]
  • 参数
    • 第一个参数:卷名称
    • 第二个参数:卷映射到容器的目录
    • 第三个参数:选项,如 ro 表示 readonly(表示只读,不允许删除容器中的文件)
# 运行一个容器
docker run -d --name mynginx2 -v volnginx2:/user/share/nginx/html/ nginx:1.24.0

  运行一个容器,将容器/user/share/nginx/html/目录下的文件自动拷贝volnginx1卷上(自己创建这个卷)。

image-20240214164117096

image-20240214164801567

  • 如果删除容器中的文件,宿主机将会跟着删除。

image-20240214165059819

  为了避免上面的这种情况,就要加上 :ro 就可避免容器中的文件被删除。ro它表示只读,可以修改宿主机的文件,但是容器里的文件修改不了。

docker run -d --name mynginx2 -v volnginx2:/user/share/nginx/html/:ro nginx:1.24.0
2.2.2 --mount 参数
  • 功能:完成目录映射
--mount '<key>=<value>,<key>=<value>'
  • 参数:
    • type:类型表示 bind, volume, tmpfs
    • src:对于命名卷,这是卷的名称。对于匿名卷(名称为一串字符串),省略此字段。
    • dst,target:文件或目录挂载在容器中的路径。
    • ro,readonly:只读方式挂载。
docker run -d --name mynginx4 --mount 'src=nginxvol4,dst=/usr/share/nginx/html,ro' nginx:1.24.0

  将容器中/usr/share/nginx/html目录下的文件与nginxvol4卷相映射。

  1. 如果删除容器,卷是不会删除的,也就说宿主机中的文件会保留(这也是卷的作用)。
  2. 如果修改宿主机中的文件,容器里的文件会自动更新(前提是容器不是只读模式)。

3 绑定卷

  绑定卷跟管理卷中的 -v、––mount是一样的。

3.1 -v 参数创建卷

  • 功能:完成卷映射
docker run -v name:directory[:options]
  • 参数:
    • 第一个参数:宿主机目录,这个和管理卷是不一样的。(随着写法变动)
    • 第二个参数:卷映射到容器的目录。
    • 第三个参数:选项,如 ro 表示 readonly
# 运行并绑定
docker run -d --name mynginx6 -v /root/data:/usr/share/nginx/html nginx:1.24.0

  这时候就是将宿主机中的/root/data目录与容器中的/usr/share/nginx/html目录相绑定。这时候容器和宿主机中的初始文件都消失了(index.html)。

image-20240215104034668

  /root/data目录下没有html文件,没有拷贝过来。

# 查看详细信息
docker inspect mynginx6

image-20240215104224393

3.2 --mount 参数

  这跟 -v 是很相似的,就是将卷的名称替换为宿主机的目录,区别是一定要加上type参数,bind 表示绑定卷。

docker run -d --name myngixn7  --mount type=bind,src=/root/data,dst=/usr/share/nginx/html nginx:1.24.0

-v 与 --mount 的区别: -v 创建卷的时候,宿主机的目录可以不用存在;而 --mount 必须先创建目录再绑定,不然会报错。

4.临时卷

  临时卷数据位于内存中,在容器与宿主机之外。

4.1 指定 --tmpfs 创建

  在创建一个临时目录/test1

docker run --name mynginx8 -d --tmpfs /test1 nginx:1.24.0

  可以通过 docker inspect mynginx8 来查看。

image-20240215114732051

   /test1 在容器的目录中,但是数据是存储在内存中的。如果容器重启,那么该目录下的。

image-20240215115148428

4.2 --mount 参数

--mount '<key>=<value>,<key>=<value>'
  • 参数:
    • type:类型表示 bind, volume,tmpfs。
    • src:宿主机目录,这个和管理卷是不一样的。
    • dst,target:文件或目录挂载在容器中的路径。
    • ro,readonly:只读方式挂载。

  只需要 type 类型为 tmpfs 就行了。

docker run -d -p 80:80 --name bind1 --mount type=tmpfs,source=/root/data,target=/usr/share/nginx/html nginx:1.24.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值