gpt4 book ai didi

docker - 在 Docker 容器中处理持久数据时绑定(bind)挂载和卷有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 12:38:25 24 4
gpt4 key购买 nike

我想知道为什么我们有两种不同的选择来做同样的事情,两者之间有什么区别。

最佳答案

对于持久性数据,我们基本上有 3 种类型的卷或挂载:

  1. 绑定(bind)挂载

  2. 命名卷

  3. dockerfiles 中的卷

绑定(bind)挂载基本上只是从容器内的主机绑定(bind)某个目录或文件(docker run -v/hostdir:/containerdir IMAGE_NAME)

命名卷是您使用 docker volume create VOLUME_NAME 手动创建的卷。它们是在 /var/lib/docker/volumes 中创建的,并且只能通过它们的名称来引用。假设您创建了一个名为“mysql_data”的卷,您可以像这样引用它 docker run -v mysql_data:/containerdir IMAGE_NAME

然后在 dockerfiles 中有卷,它们是由 VOLUME 指令创建的。这些卷也在 /var/lib/docker/volumes 下创建,但没有特定名称。他们的“名字”只是某种散列。运行容器时会创建卷,并且可以方便地保存持久数据,无论您是否使用 -v 启动容器。开发人员可以说出重要数据在哪里以及哪些数据应该持久化。

我应该使用什么?

您想使用什么主要取决于偏好或您的管理。如果您想将所有内容保留在“docker 区域”(/var/lib/docker)中,您可以使用卷。如果您想保留自己的目录结构,可以使用绑定(bind)。

Docker 建议使用卷而不是使用绑定(bind),因为卷是由 docker 创建和管理的,并且绑定(bind)有更多失败的可能性(也由于第 8 层问题)。 p>

如果您使用绑定(bind)并希望将容器/应用程序转移到另一台主机上,则必须重建目录结构,因为每个主机上的卷更加统一。

关于docker - 在 Docker 容器中处理持久数据时绑定(bind)挂载和卷有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47150829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com