【问题标题】:Docker bind mount usageDocker 绑定挂载使用
【发布时间】:2019-04-08 09:14:35
【问题描述】:

我们的应用程序运行在一个 unix 盒子(比如说 box1)上,一个 nfs 文件管理器安装在 /var/app/data 目录上。

应用程序在安装目录/var/app/data 上写入一些文本文件。

我们的下游应用程序(在其他一些 unix 机器上运行)将读取这些文件,因为它们存在于 nfs 文件管理器上。我们计划将我们的应用程序迁移到 docker。

我正在考虑使用绑定挂载功能,因为它允许我将主机(box1)目录/var/app/data 映射到容器中的任何目录。

但是我发现大多数博客都建议使用卷而不是绑定挂载。 根据我的理解,有人可以请教如何在我的场景中使用卷挂载,我们不能在创建卷时提及源目录(在我的情况下为/var/app/data)。

【问题讨论】:

    标签: docker data-binding docker-volume


    【解决方案1】:

    看着documentation

    1. 创建一个 docker 卷:docker volume create my_vol
    2. 在容器中安装卷:docker run -d -v my_vol:/destination_with_content -n my_container busybox
    3. 用你想要的数据填充它:docker cp /var/app/data my_container:/destination_with_content
    4. 现在您可以运行所需的容器并传递填充的卷:docker run -d -v my_vol:/destination_new_container my_image

    【讨论】:

    • 感谢您的回复。卷 my_vol 的物理位置将与 /var/app/data 不同,因为物理位置将由 docker 本身管理。上述步骤基本上是将 /var/app/data 文件夹中的数据共享给容器,以便应用程序可以使用 /destination_with_content 中的数据。但是我的应用程序生成的数据呢?在容器中运行的应用程序不会对 /var/app/data(存在于主机上)进行写访问。
    • 我认为这正是 docker 命名卷和绑定挂载之间的区别。命名卷:docker 决定将数据放在主机上的哪个位置。在集群中运行 docker 并使用例如音量插件。它使您的集群主机不可知,因为您不必了解主机的目录结构,因为您不必在代码中的任何位置放置特定目录(因为 docker 本身会处理它可以找到的位置特定卷的目录)。绑定安装则相反。您必须知道主机上的目录并明确绑定它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2019-04-29
    • 2020-07-26
    相关资源
    最近更新 更多