当前位置: 首页 > 面试题库 >

具有命名卷或匿名卷的“数据容器”-概念问题?(讨论)

解念
2023-03-14
问题内容

a)匿名卷

使用数据容器时,您可以使用像这样的匿名卷

version '2'
services:
  consumer:
    volume_from:
      - data-container:rw
  data-container:
    image: cogniteev/echo
    command: echo 'Data Container'
    volume:
      - /var/www

b)名称卷

或者您可以使用这样的命名卷

version '2'
services:
  consumer:
    volume_from:
      - data-container:rw
  data-container:
    image: cogniteev/echo
    command: echo 'Data Container'
    volume:
      - my-named-volume:/var/www

 volumes:
   my-named-volume:
     driver: local

我通常会选择b),并且想讨论/解释这两个概念上的问题/缺点。那么优点和缺点是什么。

我们可以将其进行比较的方面可能是:

  1. 可移植性
  2. 数据容器的可升级性(为什么我们要升级容器?)
  3. 启动/停止(继续)兼容性?
  4. 多栈问题?
  5. 效率(卷的重用)

这个问题在这个问题上引起了讨论https://stackoverflow.com/a/38984689/3625317


问题答案:

简短的答案:命名数据卷是首选,不再需要数据容器,因此您永远不要volumes-from在任何新项目上使用。

您的命名卷版本正在合并一个命名容器和数据容器,它应该是:

version '2'
services:
  web:
    image: my-web-image
    volumes:
      - my-named-volume:/var/www

 volumes:
   my-named-volume:
     driver: local

通过合并两者,您增加了一个额外的间接层来达到您的命名卷,而没有任何其他好处。命名卷是在1.9版中创建的,用于替换数据容器,而数据容器本身就是提供持久性数据的一种骇人听闻的方法。命名卷相对于数据容器的优势包括:

  • 您的数据管理与容器管理是分开的,您可以删除所有正在运行的容器,并且仍然可以使用数据
  • 可以使用卷驱动程序将数据存储在不同的位置,这意味着您可以将其放在nfs,分布式文件系统甚至本地永久目录上
  • 您可以按任何顺序启动和停止任何容器,而无需依赖容器
  • 首次创建时,命名卷将收到它首先安装在其上的映像文件系统的副本,与数据容器的行为相同,这意味着它是无缝过渡(请注意,这不是主机卷的行为, aka绑定安装)

又见这个问题也讨论了名为卷VS数据容器和这个答案到另一个类似的问题。我们也为我工作的公司写了一篇博客文章。



 类似资料:
  • 问题内容: 在最新版本的Docker(v1.10)之前,我们认为我们可以使用DOC: 仅数据容器 。因此,我将创建此类DOC(基于例如busybox)并将其链接到我的容器。您仍然可以在Docker文档中阅读有关此内容的信息。 对于新版本的docker,据说我们应该使用而不是DOC 。这是一个示例: 在这里,我们创建并使用了命名卷。 关于此新功能的文档仍然很少。我在问: 我们可以用命名容器替换DOC

  • 进入上课页面,点击右侧“活动-问卷/讨论”。选择要发布的问卷/讨论,点击“发布”。

  • VOLUME 定义匿名卷 格式为: VOLUME ["<路径1>", "<路径2>"...] VOLUME <路径> 之前我们说过,容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,后面的章节我们会进一步介绍 Docker 卷的概念。为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile 中,我们可以

  • 请求header POST /v1/activities/{频道id}/signupRecord Authorization:Bearer {ACCESS TOKEN} Content-Type:application/json 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请将"{频道id}"替换您需要获取的频道id { "start_time

  • 英文原文:http://emberjs.com/guides/concepts/naming-conventions/ Ember.js使用命名惯例来连接各个对象,而不是通过大量的引用。对于路由,控制器以及模板,你都应该使用此命名惯例。 有些时候,或许你可以猜到某些正确的命名,但是,这篇指南在此概述了所有的命名惯例。在下面的例子中'App'是被选来作为命名空间的名字,或者说用来代表Ember应用,

  • Mudu.Room.Signup 报名问卷组件 获取报名问卷配置 Mudu.Init(41988, function () { console.log('Mudu Web Sdk 初始化成功') // 获取当前频道正在使用的问卷数据, 需要在频道初始化完成后调用 Mudu.Room.Signup.GetUsingSignup(function(dataStr){