Docker Volume(数据卷)配置

Docker Volume(数据卷)配置


一、什么是 Docker Volume

  • Volume(数据卷)是由 Docker 管理的一块用于持久化数据的独立存储区域。
  • 存放位置通常是宿主机 /var/lib/docker/volumes/ 下。
  • 卷可以在容器删除、重启后保持数据不丢失,并支持多个容器共享访问。

二、使用 Volume 的好处

  • 数据持久化:容器删除后数据仍保留。
  • 数据共享:多个容器可读写同一份数据。
  • 备份迁移方便:卷可单独备份和迁移。
  • 更安全:避免直接操作宿主机敏感目录。
  • 性能优化:比传统 Bind Mount(直接目录挂载)有更好的性能(取决于驱动)。

三、Volume 基本操作命令

命令 说明
docker volume create my-volume 创建数据卷
docker volume ls 查看所有数据卷
docker volume inspect my-volume 查看指定数据卷详情
docker volume rm my-volume 删除数据卷

四、在容器中挂载 Volume 的方式

1. -v 参数(快捷方式)

docker run -d -v my-volume:/app/data my-image
  • my-volume 卷挂载到容器内 /app/data 目录。

挂载宿主机本地目录:

docker run -d -v /host/path:/container/path my-image

2. --mount 参数(推荐方式)

docker run -d \
  --mount type=volume,source=my-volume,target=/app/data \
  my-image

挂载宿主机目录(Bind Mount):

docker run -d \
  --mount type=bind,source=/host/path,target=/container/path \
  my-image

五、在 docker-compose.yml 中配置 Volume

version: '3.8'
services:
  app:
    image: my-image
    volumes:
      - my-volume:/app/data

volumes:
  my-volume:

挂载宿主机目录示例:

services:
  app:
    image: my-image
    volumes:
      - /host/path:/container/path

六、Volume 存储位置

  • 默认存在宿主机 /var/lib/docker/volumes/卷名/_data/ 目录下。
  • 不建议直接操作,应通过挂载或备份等方式管理。

七、常见使用场景

场景 说明
数据持久化 保存数据库、程序生成的数据等
日志收集 容器应用日志统一输出到宿主机
配置文件挂载 方便动态修改配置
多容器共享数据 文件上传、存储共享等

八、Docker Compose 中 Volume 高级配置

volumes: 下可以写的详细配置:

配置项 作用
driver 卷驱动,默认 local
driver_opts 驱动参数,指定挂载类型和路径
labels 卷标签,方便管理和查询
external 指定使用外部已存在的卷
name 手动指定卷名称(通常用 volumes 下的key名)

九、详细示例

volumes:
  esdata01:
    driver: local
  infinity_data:
    driver: local
  mysql_data:
    driver: local
  minio_data:
    driver: local
  redis_data:
    driver: local

高级配置示例(绑定宿主机目录)

volumes:
  redis_data:
    driver: local
    driver_opts:
      type: none
      device: /data/docker/redis
      o: bind
    labels:
      project: redis-cluster
      env: prod

外部卷示例

volumes:
  my_external_volume:
    external: true

十、总结

  • volumes: 只是定义卷,挂载需要在 services 中通过 volumes: 引用。
  • 推荐在生产环境:
    • 对重要数据使用 Volume挂载
    • 对配置文件、日志目录使用 Bind Mount挂载
  • 开发环境可以简单挂宿主机目录,便于调试。

⭐️ 小建议

docker-compose.yml 的时候,卷的定义要规范,明确挂载需求,特别是生产环境,否则容易出现数据丢失风险。

posted @ 2025-04-28 18:49  槑孒  阅读(384)  评论(0)    收藏  举报