AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 996785
Accepted
GKman
GKman
Asked: 2019-12-27 03:23:37 +0800 CST2019-12-27 03:23:37 +0800 CST 2019-12-27 03:23:37 +0800 CST

docker - 卷与挂载绑定。用例是什么?

  • 772

在阅读和玩了一会儿 docker 之后,我正在考虑在我的生产环境中使用它。但是,我仍在尝试了解挂载绑定和卷之间的区别。

根据 Dockers 关于挂载绑定的文档(https://docs.docker.com/storage/bind-mounts/):

绑定挂载从 Docker 早期就已经存在。与卷相比,绑定挂载的功能有限。当您使用绑定挂载时,主机上的文件或目录会挂载到容器中。文件或目录由其在主机上的完整路径或相对路径引用。相比之下,当您使用卷时,会在主机上 Docker 的存储目录中创建一个新目录,并且 Docker 管理该目录的内容。

从这个(以及从玩弄)在我看来,安装绑定和卷是同一件事,唯一的区别是数据的位置。(卷存储在 docker 的“私有”存储区域,而挂载绑定可以存储在任何地方)。是的,安装绑定必须在启动 docker 容器之前存在,而卷可以在容器启动时由 docker 引擎创建 - 但这种差异是不敬的性能或维护明智的。

我无法理解文档(https://docs.docker.com/storage/volumes/)中所述的卷的所谓好处,因为它们似乎都同样适用于挂载绑定。

谁能解释一下volumes和mount-binds(性能和维护方面)之间的主要区别,最重要的是它们的用例?

谢谢您的帮助。

docker
  • 1 1 个回答
  • 22639 Views

1 个回答

  • Voted
  1. Best Answer
    BMitch
    2019-12-27T07:50:16+08:002019-12-27T07:50:16+08:00

    默认情况下,本地命名卷与您描述的完全一样,绑定挂载到特殊的 docker 目录。我看到的差异:

    • 首先,最大的问题是命名卷和主机卷(又名绑定挂载)之间的行为差​​异。Docker 将从镜像的内容中初始化一个命名卷。这包括文件所有者和权限。这意味着您可以避免担心主机卷经常遇到的权限问题。

    • 第二,便携性。可以从不同的 docker 主机使用命名卷,而无需担心本地文件系统路径或运行命令的用户。无论是在 MacOS 笔记本电脑上,还是在生产中的 Linux 服务器上,您都可以只命名一个卷并假设它将作为默认 docker install 的一部分工作。

    • 第三,如何管理。主机卷通常在 docker 之外进行管理,这是权限问题经常发挥作用的地方(因为主机上的 UID/GID 通常与容器内的 UID/GID 不匹配)。使用命名卷,您可以在另一个 docker 容器中管理它们,您可以在其中控制安装的工具、创建的用户等。

    命名卷还有另一个很大的不同。那是因为我在上面说“默认”,并且可以通过多种方式配置命名卷。卷驱动程序可以更改为另一个可感知云的驱动程序。或者,您可以将选项传递给本地卷驱动程序,以从本地绑定挂载更改为特定目录,以更改您可以使用挂载系统调用执行的任何操作。这包括对不同目录执行绑定挂载、NFS 挂载,您甚至可以将自己的覆盖文件系统创建为卷,以允许容器访问和修改容器内部的某些数据,而无需更改基础层中的底层文件。

    通过使用命名卷,您还可以将存储的管理与容器的管理分开。您只需指向名称,外部工具就可以创建该卷以指向该环境中的适当位置。

    我与本地卷驱动程序一起使用的命名卷的一些示例包括:

    # named bind mount
    $ docker volume create --driver local \
          --opt type=none \
          --opt device=/home/user/test \
          --opt o=bind \
          test_vol
    
    # nfs
    $ docker volume create --driver local \
          --opt type=nfs \
          --opt o=nfsvers=4,addr=nfs.example.com,rw \
          --opt device=:/path/to/dir \
          foo
    
    # overlay
    $ docker volume create --driver local --opt type=overlay \
        --opt o=lowerdir=${PWD}/ro-data,upperdir=${PWD}/upper1,workdir=${PWD}/work1 \
        --opt device=overlay overlay1
    
    • 19

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve