docker-三种挂载

Docker 三种挂载

·4 分钟阅读·1528 字
📋 目录

Docker 三种挂载:volume / bind mount / tmpfs 原理+区别+选型(入库完整版)

一、总览

三种挂载用来解决:容器读写层upper删容器即丢数据,把数据落地宿主机、持久化。

  1. volume(数据卷,docker管理):Docker统一管理目录,默认路径/var/lib/docker/volumes/xxx/_data
  2. bind mount(绑定挂载):自定义宿主机任意目录/文件 → 容器内路径
  3. tmpfs(内存挂载):数据放宿主机内存,断电/删容器全部丢失

二、1. volume(-v 卷名:容器路径)

1.命令示例

# 创建名为nginxvol的数据卷,挂载/usr/share/nginx/html
docker run -v nginxvol:/usr/share/nginx/html nginx
  • 宿主机真实目录:/var/lib/docker/volumes/nginxvol/_data
  • 由dockerd全权管理,用户尽量不要直接改底层目录

特点

  1. 自动创建目录,不用手动提前建宿主机文件夹;
  2. 不受宿主机目录权限、路径约束;
  3. 容器删除,volume保留,新容器可复用挂载;
  4. 支持docker volume ls/rm/create生命周期管理;
  5. 适合:业务持久化数据(mysql数据、应用日志)。

三、2. bind mount(-v 宿主机绝对路径:容器路径)

# 宿主机/opt/nginx/html映射容器/usr/share/nginx/html
docker run -v /opt/nginx/html:/usr/share/nginx/html nginx

特点

  1. 宿主机目录必须提前存在,不存在直接报错;
  2. 用户全权管控宿主机目录,可随意修改文件;
  3. 路径自由,任意目录/单个文件都能挂载;
  4. 容器删除,宿主机数据原样保留;
  5. 典型场景:本地开发代码热部署、配置文件挂载

关键坑

宿主机空目录挂载容器非空目录:容器目录原有内容会被宿主机空目录覆盖

四、3.tmpfs挂载(—tmpfs,内存盘)

docker run --tmpfs /tmp nginx

特点

  1. 数据只存在宿主机内存,不落地磁盘
  2. 容器销毁、服务器重启数据全部清空;
  3. 无持久化,读写速度极高;
  4. 适用:临时缓存、会话临时文件、不需要落地的临时数据。

五、读写权限配置

:ro 只读挂载,容器内部无法修改挂载目录:

# 只读,容器不能改html文件
docker run -v nginxvol:/usr/share/nginx/html:ro nginx

六、三者横向对比表

类型存储位置生命周期适用场景
volume/var/lib/docker/volumes独立于容器,删容器卷保留mysql、redis持久化
bind mount用户自定义宿主机路径完全由宿主机管理配置挂载、本地开发
tmpfs宿主机内存容器停止数据丢失临时缓存、临时文件

七、生产选型口诀

  1. 正式业务持久化 → volume
  2. 本地调试、挂载配置文件 → bind mount
  3. 临时高速缓存、不能落盘数据 → tmpfs

关联文档