介绍
docker存储主要是涉及到3个方面:
第一个是容器启动时需要的镜像
镜像文件都是基于图层存储驱动来实现的,镜像图层都是只读层,
第二个是: 容器读写层,
容器启动后,docker会基于容器镜像的读层,映射出一个读写层,容器运行产生的一些数据或者对镜像层文件的修改都是在这层体现,但是容器删除这些数据就没有了,这些数据并没有存在外部,而是容器读写层中。
第三个是: docker的数据卷volume,
Docker 卷
Docker 卷用于持久化容器的数据。它们可以被看作是独立于容器生命周期的存储区域。管理 Docker 卷的主要命令有:
docker volume create
:创建一个新的卷。docker volume ls
:列出所有卷。docker volume inspect
:查看卷的详细信息。docker volume rm
:删除一个或多个卷。docker run -v <volume_name>:/container/path ...
:在运行容器时挂载卷
容器卷信息具体内容: CSDN
Docker的数据卷是独立于容器的图层文件系统的,它是利用外部的文件挂载到内部,上面的数据即使容器删除了上面的数据还是存在。具体的目录在:
docker的root dir 上的volumes
Docker卷和Linux系统中的LVM区别
Docker 卷(Volumes)和 Linux 逻辑卷管理器(LVM, Logical Volume Manager)虽然都与存储有关,但它们服务于不同的目的,并且在使用场景、功能特性和实现方式上都有显著的区别。
Docker 卷 (Volumes)
用途:
- Docker 卷主要用于容器内的数据持久化。当容器被删除或重新创建时,卷中的数据不会丢失。
- 它们提供了一种将宿主机文件系统的一部分挂载到容器中的方法,使得数据可以在多个容器之间共享。
特性:
- 独立于容器生命周期:即使容器停止或被删除,卷中的数据仍然保留。
- 性能:直接访问宿主机的文件系统,通常比使用联合文件系统更高效。
- 易于备份和迁移:可以方便地备份卷的内容,也可以将卷从一个宿主机迁移到另一个宿主机。
- 共享性:可以被多个容器同时挂载和使用。
操作:
- 创建卷:
docker volume create my_volume
- 列出卷:
docker volume ls
- 检查卷信息:
docker volume inspect my_volume
- 删除卷:
docker volume rm my_volume
- 使用卷:
docker run -v my_volume:/path/in/container my_image
Linux 逻辑卷管理器 (LVM)
用途:
- LVM 是一种高级磁盘管理技术,用于在 Linux 系统中灵活地管理和分配存储空间。
- 它允许你动态调整分区大小,组合多个物理磁盘为一个大的逻辑卷,以及在线添加或移除磁盘。
特性:
- 灵活性:可以轻松地扩展或缩小逻辑卷的大小。
- 抽象层:提供了物理磁盘和文件系统之间的抽象层,使你可以更灵活地管理存储。
- 跨物理磁盘:可以跨越多个物理磁盘创建逻辑卷。
- 快照支持:支持创建逻辑卷的快照,便于备份和恢复。
操作:
- 创建物理卷:
pvcreate /dev/sda1
- 创建卷组:
vgcreate my_vg /dev/sda1
- 创建逻辑卷:
lvcreate -L 10G -n my_lv my_vg
- 扩展逻辑卷:
lvextend -L +5G /dev/my_vg/my_lv
- 调整文件系统大小:对于 ext4 文件系统,使用
resize2fs /dev/my_vg/my_lv
;对于 XFS 文件系统,使用xfs_growfs /dev/my_vg/my_lv
- 查看状态:
pvs
,vgs
,lvs
主要区别
-
应用场景:
- Docker 卷主要用于容器的数据持久化和共享。
- LVM 用于整个系统的磁盘管理,提供更高级的磁盘空间分配和管理功能。
-
生命周期:
- Docker 卷是独立于容器的,即使容器被删除,卷依然存在。
- LVM 的逻辑卷是与系统相关的,一旦系统被重装或格式化,逻辑卷需要重新配置。
-
管理粒度:
- Docker 卷主要针对单个目录或文件进行管理。
- LVM 可以管理整个磁盘分区,甚至跨越多个物理磁盘。
-
性能:
- Docker 卷直接访问宿主机文件系统,通常性能较好。
- LVM 提供了额外的抽象层,可能引入一些性能开销,但在大多数情况下影响不大。
-
功能:
- Docker 卷提供了简单的数据持久化和共享机制。
- LVM 提供了更多的高级功能,如动态调整大小、快照、镜像等。
总结来说,Docker 卷和 LVM 在 Linux 中扮演着不同的角色,分别解决不同层次的存储问题。选择哪种方式取决于你的具体需求和使用场景。