1. 卷(Volume)

  • 定义:由 Docker 自己管理的存储区域,保存在宿主机的 /var/lib/docker/volumes/ 下。

  • 特点

    • 与容器解耦,生命周期独立(容器删掉,卷不会丢失,除非显式删除)。
    • 更适合生产环境,因为 Docker 会帮你处理权限、存储路径。
    • 可以跨容器共享。
  • 用法

    docker run -d \
      -v myblog_mysql-data:/var/lib/mysql \
      mysql:8.0
    
    • mysql-data 是卷名,如果不存在会自动创建。
    • 卷的存放目录
      在这里插入图片描述

2. 目录挂载(Bind Mount)

  • 定义:把宿主机上的某个目录,直接映射到容器内。

  • 特点

    • 宿主机和容器实时同步,方便调试和开发。
    • 路径必须存在,否则可能报错或自动创建空目录。
    • 不太适合跨机器迁移,因为依赖于宿主机的目录结构。
  • 用法

    docker run -d \
      -v /app/myconf:/etc/mysql/conf.d \
      mysql:8.0
    
    • /app/myconf 是宿主机目录,/etc/mysql/conf.d 是容器目录。

3. 区别总结

特性卷 (Volume)目录挂载 (Bind Mount)
管理方式Docker 自己管理依赖宿主机目录
生命周期容器删除后仍存在目录是否存在取决于宿主机
可移植性高(只需要卷名)低(路径固定)
使用场景数据持久化、跨容器共享本地开发、测试、调试

4. 混合使用的典型例子

在 MySQL + WordPress 里常见:

services:
  mysql:
    image: mysql:8.0
    volumes:
      - myblog_mysql-data:/var/lib/mysql           # 卷:持久化数据
      - ./myconf:/etc/mysql/conf.d          # 挂载:加载自定义配置
  • 存放数据库数据,避免丢失。
  • 挂载把本地配置文件直接注入容器,方便修改调试。

5. 如何找 Docker 官方镜像持久化目录

1. MySQL

👉 MySQL 官方镜像

官方说明:MySQL 的数据文件默认存放在 /var/lib/mysql

2. Redis

👉 Redis 官方镜像

Redis 的数据默认存放在 /data

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐