volume
什么是volume(数据卷)?
它将宿主机目录映射到容器内目录,方便我们操作容器内文件,迁移容器产生的数据。从而为容器提供额外的持久化存储。
如果数据都在容器中,那么把容器删除以后,数据也会随之丢失
如:mysql容器,容器删了,里面的数据就都没了,所以要把数据进行持久化
数据卷和直接挂载区别
数据卷挂载 | 直接挂载 | |
宿主机目录 --> 数据卷 ---> 容器内目录 | 宿主机目录 ---> 容器内目录 | |
创建方式 | docker管理,非自动创建目录,目录结构较深,数据卷不存在的话,会自动去创建数据卷 | 自定义目录,位置任意 |
挂载类型 | 只挂载目录 | 目录和文件 |
对容器内数据影响 | 覆盖容器中的数据 | |
移植性 | 移植性强 ,数据卷可以挂多个容器,无需指定host目录 | 移植性弱,与host path直接绑定 |
解释比喻
当涉及到 Docker 中的挂载和数据卷,可以使用以下比喻来帮助理解:
想象一辆运输卡车代表一个 Docker 容器,而卡车上的货物代表容器中的数据。现在我们将考虑宿主机上的文件系统与容器之间的关系。
挂载(Mounting)比喻为将宿主机上的某个目录和卡车上的货物直接绑定在一起。
假设卡车上有一个特定的货物存放区域,我们可以将宿主机上的一个目录(例如,家中的一个储物柜)与卡车上的货物存放区域进行绑定。
这样,当你往储物柜中放入或取出物品时,卡车上的货物存放区域也会相应地更新。同样,卡车上的货物存放区域发生的任何变化也会反映在储物柜中。
这样,储物柜和卡车上的货物就形成了一个共享的存储空间,你可以随时访问和操作其中的物品。
数据卷(Data Volumes)比喻为一个存储仓库,供多辆卡车共享使用。
假设有一个大型的存储仓库,里面有许多货架用于存放货物。
我们可以让多辆卡车都访问这个存储仓库,并将自己的货物放在其中的特定货架上。
每辆卡车都可以独立地存取自己放在仓库中的货物,而且这些货物在仓库中的位置是固定的,不会受到卡车的运输和启动顺序的影响。
这样,不同的卡车可以随时访问共享的存储仓库,并在其中存取和操作自己的货物。
通过这两个比喻,我们可以理解挂载和数据卷的概念。
挂载是直接将宿主机上的目录与容器绑定,实现宿主机和容器之间的数据共享和同步。
数据卷则是一个独立的存储空间,供多个容器共享和访问,实现容器之间的数据共享和持久化。