【问题标题】:Best practice - Anonymous volume vs bind mount最佳实践 - 匿名卷与绑定挂载
【发布时间】:2019-10-19 11:40:24
【问题描述】:

在容器中,

可以创建匿名卷

Dockerfile 中的语法(VOLUME /build

下面的语法,volumes/build 条目

cache:
  build: ../../
  dockerfile: docker/dev/Dockerfile
  volumes:
    - /tmp/cache:/cache
    - /build
  entrypoint: "true"

我的理解是,在容器进入Exited 状态后,这两种方法(以上)都使音量/build 也可用。

卷是匿名的,因为 /build 指向 docker 主机中的某个随机新位置(在 /var/lib/docker/volumes 目录中)

我发现匿名卷比命名卷更安全(例如/tmp/cache:/cache)。

因为/tmp/cache 位置很容易受到攻击,因为该位置更有可能被多个 docker 容器使用。


1)

为什么不鼓励使用匿名卷?

2)

VOLUME /buildDockerfile

不一样

volumes: 
 - /build 

docker-compose.yml 文件中?有没有一种情况,我们需要同时提及两者?

【问题讨论】:

  • 匿名挂载和绑定挂载都可以被其他容器重用

标签: docker docker-compose dockerfile


【解决方案1】:

您缺少第三个关键选项,命名卷。如果你声明:

version: '3'
volumes:
  build: {}
services:
  cache:
    image: ...
    volumes:
      - build:/build

Docker Compose 将为您创建一个命名卷;例如,您可以使用docker volume ls 查看它。您可以显式管理命名卷的生命周期,并在它们上设置几个偶尔有用的附加选项。 Docker 文档中有一些详细的 a page describing named volumes

我建议命名卷严格地优于匿名卷,因为它能够明确地看到它们何时被创建和销毁,并且能够在它们上设置额外的选项。您还可以将相同的命名卷挂载到多个容器中。 (在您提出的这一系列问题中,我通常鼓励您使用命名卷并将其挂载到多个容器中并替换 volumes_from:。)

命名卷与绑定挂载在两个方向上各有利弊。绑定挂载易于备份和管理,对于需要直接检查的日志文件等内容,它更容易;在 MacOS 系统上,它们非常慢。命名卷可以独立于任何主机系统目录布局运行,并且可以很好地转换为 Kubernetes 等集群环境,但检查或备份它们要困难得多。

您几乎不需要VOLUME 指令。您可以将卷或主机目录挂载到容器中,无论它是否被声明为卷。它的技术效果是在该位置挂载一个新的匿名卷,如果那里没有挂载其他任何东西的话;它的实际效果是它可以防止以后的 Dockerfile 步骤修改该目录。如果您有 VOLUME 行,您几乎可以随时将其删除而不会影响任何内容。

【讨论】:

    【解决方案2】:

    实际上,匿名卷 (/build) 的使用量是 encouraged 超过 bind mounts (/tmp/cache:/cache) 的使用量:

    与绑定挂载相比,卷有几个优点:

    • 卷比绑定挂载更容易备份或迁移。
    • 您可以使用 Docker CLI 命令或 Docker API 管理卷。
    • 卷可在 Linux 和 Windows 容器上运行。
    • 可以在多个容器之间更安全地共享卷。
    • 卷驱动程序允许您将卷存储在远程主机或云提供商上,以加密卷的内容,或添加其他 功能。
    • 新卷的内容可以由容器预先填充。

    关于你的第二个问题,是的。您可以在 docker-compose 文件或 Dockerfile 中创建匿名卷。无需在两个地方都指定。

    【讨论】:

    • 您是否将/tmp/cache:/cache 称为绑定挂载?查询已编辑..
    • 对查询中的第二个问题有任何想法吗?
    • 您可以使用 docker-compose 创建卷,而无需在 Dockerfile 中声明它们,因此您可以只定义一次匿名卷
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多