找回密码
 立即注册
快捷导航

[Docker/K8s] Docker容器的卷(数据卷、挂载卷)

[复制链接]
妙笔生花 2023-8-15 06:06:23 | 显示全部楼层
本帖最后由 妙笔生花 于 2023-8-15 06:07 编辑

docker卷的分类

  1. 挂载卷(Bind Mounts)

    将主机上的目录或文件挂载到容器中的指定路径上。通过指定主机路径和容器路径,可以在容器和主机之间共享数据。挂载卷可以实现实时数据同步,并且对挂载卷的修改会同时反映在容器和主机上。

  2. 数据卷(Volumes)

    这是Docker管理的容器内部的路径,用于持久化存储和共享数据。数据卷可以独立于容器存在,即使容器被删除,数据卷中的数据仍然保留。数据卷可以在多个容器之间共享数据,也可以方便地备份和恢复数据。

  3. 临时卷(Tmpfs Mounts)

    这是将内存中的临时文件系统挂载到容器中的指定路径上。临时卷只存在于容器的生命周期内,当容器停止时,临时卷中的数据将被清除。临时卷适用于需要临时存储和处理数据的场景。

  4. 匿名卷(Anonymous Volumes)

    这是在容器启动时自动创建的匿名卷,用于容器内部的临时数据存储。匿名卷的路径由Docker自动生成,并且在容器删除后会自动清除。匿名卷适用于临时性的数据存储需求。

docker 数据卷

数据卷 是由Docker自动管理的容器内部的路径,用于持久化存储和共享数据。数据卷可以独立于容器存在,即使容器被删除,数据卷中的数据仍然保留。数据卷可以在多个容器之间共享数据,也可以方便地备份和恢复数据。

使用docker volume create命令创建一个数据卷

docker volume create my_volume

在运行容器时使用-v--mount选项来指定数据卷的路径

docker run -v my_volume:/container/path redis
# 把名为my_volume的数据卷挂载到容器中的/container/path路径上

docker 挂载卷

挂载卷 是将主机上的目录或文件挂载到容器中的指定路径上。通过指定主机路径和容器路径,可以在容器和主机之间共享数据(这意味着容器和主机之间共享同一份数据,对挂载卷的修改会同时反映在容器和主机上)。挂载卷可以实现实时数据同步,并且对挂载卷的修改会同时反映在容器和主机上。

1、宿主与容器之间通过-v--mount选项映射添加容器卷

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录  镜像名
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu

创建一个名为u1的Ubuntu容器,以特权模式运行,并将主机的/tmp/host_data目录挂载到容器的/tmp/docker_data目录上。

  • -it: 以交互模式运行容器,并将其连接到当前终端,以便可以与容器进行交互。
  • --privileged=true: 在容器内部以特权模式运行,即容器内的进程将具有与主机相同的权限。这可以用于访问主机上的一些特权操作。
  • -v /tmp/host_data:/tmp/docker_data: 将主机的/tmp/host_data目录挂载到容器的/tmp/docker_data目录上。这意味着在容器中对/tmp/docker_data目录的操作将直接反映到主机的/tmp/host_data目录上。

2、容器卷的读写规则

ro:读和执行
docker run -it --privileged=true -v /mydocker/u:/tmp/u:ro --name=u2 ubuntu

创建一个名为u2的Ubuntu容器,在特权模式下运行,并将主机的/mydocker/u目录以只读模式挂载到容器的/tmp/u目录上。这样,容器内的进程只能读取/tmp/u目录中的文件,而不能对其进行写入或修改。

  • -v /mydocker/u:/tmp/u:ro: 将主机的/mydocker/u目录以只读模式挂载到容器的/tmp/u目录上。这意味着容器内的进程只能读取/tmp/u目录中的文件,而不能对其进行写入或修改。

3、容器卷的继承和共享(u2继承u1,u1继承主机,一主二从)

[root@syh u]# pwd
/mydocker/u (主机)
docker run -it --privileged=true -v /mydocker/u:/tmp/u --name u1 ubuntu(u1)
docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu (u2)
  • --volumes-from u1: 从名为u1的容器中挂载卷到当前运行的容器中。这意味着u2容器将继承u1容器中的卷,并可以访问其中的数据。

数据卷 和 挂载卷 的区别:

  1. 生命周期:挂载卷的生命周期与容器相同,当容器被删除时,挂载卷也会被删除;而数据卷可以独立于容器存在,即使容器被删除,数据卷中的数据仍然保留。
  2. 管理方式:挂载卷需要手动指定主机上的目录或文件进行挂载;而数据卷由Docker自动管理,可以使用docker volume create命令创建。
  3. 共享性:挂载卷可以在多个容器之间共享数据,多个容器可以同时访问同一个挂载卷;而数据卷也可以在多个容器之间共享数据,多个容器可以同时访问同一个数据卷。

什么情况下用 挂载卷?数据卷?

  • 如果需要在容器和主机之间共享数据,并且希望数据在容器被删除后仍然保留,可以使用挂载卷;

  • 如果需要在多个容器之间共享数据,并且希望数据独立于容器存在,可以使用数据卷。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-11-22 23:06

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表