docker 中 File Sharing 和Volumes 的区别

在 Docker 中,File Sharing 和 Volumes 都涉及到将文件和目录从主机系统映射到容器中,但它们的用途和实现方式有一些重要的区别:

一、简介

  1. File Sharing 是 Docker Desktop 在 Windows 和 macOS 上的一项功能,允许你将主机文件系统的一部分共享给 Docker 容器。这个功能通常用于让 Docker 容器访问主机上的文件。具体来说:
  • 共享机制:

    • 你需要在 Docker Desktop 的设置中手动配置哪些目录可以被 Docker 容器访问。
    • 通过这种方式,容器可以访问指定的主机目录。
  • 使用场景:

    • 常用于开发环境中,当你希望在主机系统和容器之间快速同步代码和配置文件时。
    • 适用于需要频繁访问和修改主机上的文件的场景。
  1. Volumes 是 Docker 提供的持久化存储解决方案。Volumes 由 Docker 管理,存储在 Docker 主机文件系统的特定位置。使用 Volumes 有以下特点:
  • 文件结构 :

  • 管理和隔离:

    • Volumes 是由 Docker 管理的,并且可以被多个容器共享使用。
    • 它们提供了更高的隔离性和安全性,适合生产环境中的数据持久化存储。
  • 使用场景:

    • 常用于数据库、日志文件、配置文件等需要持久化存储的数据。
    • 适用于需要跨容器共享数据的场景。
    • 适用于需要在容器重启后仍然保留数据的场景。

二、 具体区别

  1. 定义和配置:

    • File Sharing:在 Docker Desktop 的设置中配置,可以访问主机上的任意目录。
    • Volumes :通过 Docker CLI 或 Docker Compose 配置,使用 docker volume 命令进行管理。
  2. 性能和隔离性:

    • File Sharing:可能会受到主机文件系统和 Docker 之间的性能开销影响,特别是在 Windows 和 macOS 上。
    • Volumes:通常性能更好,因为它们是由 Docker 引擎直接管理和优化的。
  3. 持久性:

    • File Sharing:数据存储在主机的文件系统上,容器删除后数据仍然存在。
    • Volumes:数据同样持久化存储,容器删除后数据仍然存在,但存储位置由 Docker 管理。
  4. 使用方式:

    • File Sharing :需要在 Docker Desktop 设置中启用共享目录,然后使用 -v 参数挂载。例如:

      bash 复制代码
      docker run -v /host/path:/container/path ...
    • Volumes :可以使用 -v 或 --mount 参数挂载 Volume。例如:

      bash 复制代码
      docker volume create my-volume
      docker run -v my-volume:/container/path ...
  5. 文件系统结构 :

三、示例

File Sharing 示例

确保在 Docker Desktop 设置中共享了 E:\docker 目录:

bash 复制代码
docker run --name nginx-web -p 8088:80 -v /e/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /e/docker/nginx/www:/usr/share/nginx/html -v /e/docker/nginx/logs:/var/log/nginx -d nginx
Volume 示例

创建一个 Volume 并使用它:

bash 复制代码
docker volume create nginx-conf
docker volume create nginx-html
docker volume create nginx-logs

docker run --name nginx-web -p 8088:80 -v nginx-conf:/etc/nginx/nginx.conf -v nginx-html:/usr/share/nginx/html -v nginx-logs:/var/log/nginx -d nginx

四、总结

  • File Sharing 适用于开发环境中的快速文件同步和访问。
  • Volumes 适用于生产环境中的数据持久化和跨容器数据共享。
    选择哪种方式取决于你的具体需求和使用场景。
相关推荐
我要见SA姐11 小时前
GitHub Actions 自动化:5 个真实运维提效案例
运维·数据库·机器学习·oracle·回归
Android系统攻城狮2 小时前
Linux FFmpeg深度解析之avcodec_flush_buffers调用流程与实战(十九)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频进阶
Y3815326623 小时前
用 httpx 写 SerpBase 异步客户端:连接池与超时配置
运维·服务器·数据库
倔强的石头1063 小时前
【Linux指南】进程通信系列(七):System V 信号量 —— 同步互斥的内核原语
linux·运维·服务器
废柴程序员_熊熊3 小时前
10 分钟用 Docker 搭一套私有 Gitea:HTTPS、SSH、CI、备份一次配齐
docker
HZZD_HZZD4 小时前
大口径摄像水表白皮书拆解:DN40加装改造与字轮识别实测
运维·物联网·腾讯云
PellyKoo5 小时前
【Ubuntu】GTX 1080 Ti 显卡占用为0但功率高达60W的排查与解决
linux·运维·ubuntu
莫晓燚6 小时前
阿里云若依项目部署与日志采集---实战
运维·数据库·redis·阿里云·ruoyi
何中应6 小时前
Grafana如何共享面板
运维·grafana·可观测
科创致远6 小时前
ESOP 电子作业指导书 WiFi 网络应用实测报告
运维·服务器·网络