Dockerfile 命令“Volume”的用途是什么?

2024-03-20

当 Dockerfile 包含 VOLUME 指令时(例如)VOLUME [/opt/apache2/www, ...](希望这个路径在实际安装中存在),这意味着这个路径将被安装到某个东西上(对吗?)。此 VOLUME 指令适用于图像,而不是针对图像的一个实例(容器),而是针对每个实例。

无论如何,无论镜像是否包含定义的卷,在启动容器时,运行命令都可以通过将本地主机路径映射到容器路径来创建卷。

docker run --name understanding_volumes -v /localhost/path1:/opt/apache2/www -v /localhost/path2:/any/container/path image_name

上面应该清楚地表明,虽然/any/container/path在 Dockerfile 中没有定义为 VOLUME,我们可以在运行容器时挂载它。

也就是说,这个 SOF 问题对此有所启发 -在 DockerFile 中定义 VOLUME 挂载点而不是 adhoc cmd-line -v 的目的是什么? https://stackoverflow.com/questions/33148754/what-is-the-purpose-of-defining-volume-mount-points-within-dockerfile-rather-tha。这里提到了 VOLUME 指令的一个好处。也就是说,其他容器可以从中受益。使用--from-container(找不到此选项docker run --help,不确定答案是否意味着--volumes-from)无论如何,其他容器可以通过某种自动方式访问安装点。伟大的。

我的第一个问题是,是另一个卷路径/any/container/path image_name安装到容器上理解卷也可用于第二个容器使用--from-container or --volumes-from(哪个选项是正确的)?

我的下一个问题是,使用 VOLUME 指令只是为了让其他容器链接到这个路径 --> 就是让数据/opt/apache2/www通过简单的链接可用于其他容器。所以这只是分享。或者是否有任何数据也可以提供给第一个容器。


在 Dockerfile 中定义卷的优点是可以将镜像定义中的卷位置指定为镜像创建者向镜像用户提供的文档。这只是唯一的好处。

它很早就被添加到 Docker 中,很可能当时数据容器是持久数据的唯一方法。我们现在有一个针对已过时数据容器的命名卷的解决方案。我们还添加了 compose 文件来定义容器如何以易于理解和重用的语法运行。

虽然自我记录图像有一个优点,但也有很多缺点,以至于我强烈建议不要在图像内定义体积致我的客户和任何发布图像以供一般重复使用的人:

  1. 该卷被强制提供给最终用户,无法取消定义映像中的卷。

  2. 如果在运行时未定义卷(使用-v或撰写文件),用户将在其目录中看到匿名卷docker volume ls与创造它们的事物没有任何关联。这些几乎总是无用的磁盘空间浪费。

  3. 它们破坏了扩展图像的能力,因为在扩展之后图像中的体积发生任何变化VOLUME该行通常会被 docker 忽略。这意味着用户永远无法添加自己的初始卷数据,这非常令人困惑,因为 docker 不会发出警告,表明它在镜像构建期间忽略了用户的更改。

  4. 如果您需要作为用户运行时拥有一个卷,您始终可以使用-v或撰写文件,即使该卷未在 Dockerfile 中定义。许多用户有这样的误解:您必须在映像中定义它才能在运行时使其成为命名卷。

使用能力--volumes-from不受定义图像中体积的影响,但我建议您避免使用此功能。它在群体模式中不存在,并且您可以通过使用安装在两个容器中的命名卷来获得所有相同的功能以及更细的粒度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dockerfile 命令“Volume”的用途是什么? 的相关文章

随机推荐

  • Laravel 中使用 try 和 catch 进行错误处理 [重复]

    这个问题在这里已经有答案了 我想在我的应用程序中实现良好的错误处理 我强制使用此文件来捕获错误 应用 服务 PayUService try this gt buildXMLHeader Should be this gt buildXMLH
  • iOS 检测系统音量变化。私有 API 与否? AVSystemController_SystemVolumeDidChangeNotification

    可以听AVSystemController SystemVolumeDidChangeNotificationNSNotification 是否被视为 在 App Store 审核过程中 使用私有 API 在我的应用程序中 我需要显示和更新
  • MySql 中是否有用于添加列的“IF NOT EXISTS”子句?

    我需要在一些数据库上运行这个 MySql 代码 我怀疑其中一些数据库已经有了这个专栏 有没有类似的东西if not exists对于下面的代码 ALTER TABLE comments ADD COLUMN active int 1 NOT
  • Google Maps API V3 使用限制是每个网站访问者还是每个网络服务器?

    我对每天 2500 个地理编码请求的 API 使用限制是否感到困惑 http code google com apis maps documentation geocoding Limits http code google com api
  • 显示字段上内联 AJAX 调用的验证错误

    当 AJAX 调用返回验证失败时 我试图在字段 内联 上显示错误消息
  • 如何构造动态变量NAMES?

    我想循环数据 并创建动态地图 稍后可以将更多数据推入其中 例如 foreach item in bob john andy set item map end 这样以后我就可以这样做 bob map put foreach count som
  • 测试浏览器是否支持该样式

    我可以执行以下操作来检查浏览器是否不支持列计数 css3 属性 然后使用我自己的代码 if WebkitColumnCount in document body style MozColumnCount in document body s
  • 远程更新Jenkins“系统消息”字符串的方法?

    有没有办法远程插入 更新 Jenkins 系统消息 显示在屏幕顶部的实例描述 我们通过 API 部署 Jenkins 作业 并希望能够一目了然地知道部署了哪些版本的作业 没有用于修改系统消息的API 该值只能由配置窗口 https gith
  • NHibernate + ASP.NET + 在视图中打开会话 + L2Cache

    我正在使用 CodeProject 的众所周知的Open Session in View处理 NHibernate 会话 它能很好地与Level 2 Cache 有人成功做过吗 我应该使用NH Burrow反而 任何有关 ASP NET 最
  • 设置 hadoop 时 SSH 出现问题

    我是hadoop的新手 我在计算机上安装了Ubuntu 12 10 我想在一个节点上以伪分布式模式安装Hadoop 我搜索并获得了很多教程 但我在SSH方面遇到了问题 我做了什么教程说 我确信问题出在 SSH 上 我得到了 openssh
  • 如何随着方向的变化包含android计时器的值[重复]

    这个问题在这里已经有答案了 我正在构建一个简单的计时器应用程序 其中我使用 android 计时器来跟踪经过的时间 但是当我启动计时器并将方向更改为横向时 计时器会重置并再次显示 00 00 我希望它保持其价值 布局为portrait an
  • ImageView 中的动画scaleType =“centerCrop”

    有没有办法对scaleType centerCrop 进行动画处理 我需要将图像缩放到 certerCrop 以便图像可以覆盖 imageView 的整个区域 但我需要对其进行动画处理 以便在缩放图像之前向用户展示图像的实际外观 我打算这样
  • 实体框架 4 中的唯一键

    现有的数据库模式具有唯一的非主键以及一些依赖它们的外键 是否可以在 Entity Framework v4 中定义唯一键 不是主键 如何 实体框架6 1现在支持数据注释和 Fluent API 的唯一性 数据注释 参考 http msdn
  • 如何输出Django Admin生成的SQL

    如何输出 Django 管理员生成的 SQL 来查询 dangelist 页面的结果 我尝试覆盖queryset via def queryset self args kwargs qs super MyAdmin self queryse
  • 全局 css Reset * { margin: 0; 的缺点是什么?填充:0; }?

    全局 css Reset margin 0 的缺点是什么 填充 0 人们更喜欢 eric meyer 的 css 这是埃里克 梅耶尔 CSS html body div span applet object iframe h1 h2 h3
  • 错误:带有模板的“{”标记之前需要类名

    我正在尝试创建一个简单的基类和另一个继承它的类 我收到以下错误 guard room h 17 1 error expected class name before token 我看过其他帖子 似乎我在某个地方存在循环依赖 但我已尽我所读的
  • 将 vue 的槽嵌套在槽中

    更新 这是我在这里试图实现的简化版本 来自下面的线程对话 接受组件 A 接受组件 B 接受条件 if 条件为 true 用组件 A 包裹组件 B 并渲染 仅适用于其他情况 渲染组件 B I m有兴趣创建一个有条件地呈现包装器的组件 我估计理
  • 使用 php 创建一个 javascript 警报,其中包含 php 变量?

    我正在制作一个表单 当某些字段未填写或填写正确时 该表单应该创建一个 javascript 警报 我希望能够获取放入 php 变量中的错误消息并将其显示在 javascript 警报窗口中 以下代码不起作用 function died er
  • tkInter 列表框中的隐藏 ID

    我想知道是否可以以某种方式将隐藏的 id 与列表框中的每个条目一起存储 原因是我有一个表 其中包含来自数据库的唯一 ID 用户不可见 但用于唯一标识每个记录 我将表缓存在内存中并使用键入的字典身份证号码 我想创建一个列表框 它允许我选择其中
  • Dockerfile 命令“Volume”的用途是什么?

    当 Dockerfile 包含 VOLUME 指令时 例如 VOLUME opt apache2 www 希望这个路径在实际安装中存在 这意味着这个路径将被安装到某个东西上 对吗 此 VOLUME 指令适用于图像 而不是针对图像的一个实例