Skip to content
 

容器存储

更新: 8/1/2026字数: 0 字 时长: 0 分钟

Docker 的存储机制是理解容器特性的关键。默认情况下,在容器内部创建的所有文件都存储在一个可写容器层(Container Layer)中。这种默认机制带来两个核心问题:

  1. 生命周期绑定:容器销毁时,其内部产生的数据也会随之丢失。
  2. 性能与移植性较差:写时复制(CoW)机制会导致写入性能低于普通文件系统,且数据难以在宿主机与其他容器间共享。

为了解决数据持久化和共享问题,Docker 提供了三种主要的挂载存储方式:

核心持久化方式对比

存储类型宿主机存储位置管理方式最佳适用场景
Volume(数据卷)/var/lib/docker/volumes/Docker 完全托管数据库数据、生产环境持久化、容器间共享数据
Bind Mount(绑定挂载)宿主机任意绝对路径用户直接管理本地代码开发调试、共享宿主机的配置文件
tmpfs Mount(内存挂载)仅存储在宿主机内存(RAM)中系统内存隔离敏感信息(密钥/密码)、高频读写的临时高速缓存

三种挂载方式详解

1. Volumes(数据卷)—— 生产环境的首选

数据卷是由 Docker 维护的独立存储空间,独立于容器的生命周期。

  • 优点:由 Docker 统一管理,迁移和备份方便;性能高于可写容器层;支持第三方卷驱动(如 NFS、云存储)。
  • 常用命令
bash
# 创建数据卷
docker volume create my_data

# 使用 -v 挂载数据卷到容器
docker run -d --name my_app -v my_data:/app/data nginx

2. Bind Mounts(绑定挂载)—— 开发调试的最佳助手

将宿主机上的某个具体文件或目录直接挂载到容器内部。

  • 优点:实时同步!在宿主机修改代码或配置,容器内立刻生效。
  • 注意:强依赖宿主机的目录结构;如果挂载到的容器目录非空,宿主机目录会直接覆盖容器内的原始文件。
  • 示例
bash
# 将宿主机的 /home/user/app 目录挂载到容器的 /app
docker run -d --name dev_app -v /home/user/app:/app nginx

3. tmpfs Mounts(内存挂载)—— 临时敏感数据

数据不会写入磁盘,而是直接保存在宿主机内存中。容器停止后,内存中的数据会自动清除。

  • 优点:读写性能极高,且不会在磁盘留下敏感痕迹(如密码、Token)。
  • 示例
bash
docker run -d --name secret_app --tmpfs /app/secrets nginx

底层原理:联合文件系统(OverlayFS)

当容器向内部写数据时,Docker 使用了 OverlayFS 联合文件系统:

  • 镜像层(ReadOnly):底层多个只读层,所有容器共享。
  • 容器层(ReadWrite):最顶部的一个可写层。
  • 写时复制(Copy-on-Write, CoW):当容器尝试修改镜像层中的已有文件时,Docker 会先将该文件复制一份到顶层的容器层,然后再进行修改。这种设计极大地节省了磁盘空间。