如何添加:cached或:委托给docker-compose.yml卷列表?

red*_*red 17 docker docker-compose

标题说明了一切.我有几个卷设置为readonly(:ro)但想要测试:cached:delegated帮助文件i/o性能,但无法弄清楚如何在compose文件中设置它.

哦,我已经测试过:

volumes: - external:internal:cached

avi*_*amg 47

说明volumes在docker上使用配置的目的是为了在宿主机和docker容器之间共享数据,并确保两者之间的数据一致性(a中发生的事情在b中表示,反之亦然)。挂载的卷是容器的“一部分”并且是相关的。常见的用法是在容器和机器的文件系统中存储共享数据备份。如果容器被移除,我们将在容器娱乐中加载卷。

域名注册地址:

  • 用途cached:当主机执行更改时,容器处于只读模式。
  • 用途delegated:当 docker 容器执行更改时,主机处于只读模式。
  • 用途default:当容器和主机都主动且持续地对数据进行更改时。
  • 确保在您的机器上使用更新的 docker-compose 和 docker 版本

从文档

Mac 用于osxfs将从 macOS 共享的目录和文件传播到 Linux VM。这种传播使这些目录和文件可用于在 Docker Desktop for Mac 上运行的Docker 容器。**默认情况下,这些共享是完全一致的,这意味着每次在 macOS 主机上或通过容器中的挂载发生写入时,更改都会刷新到磁盘,以便共享中的所有参与者都具有完全一致的视图.

在某些情况下,完全一致性会严重影响性能。 ** Docker 17.05 及更高版本引入了选项以在每个挂载、每个容器的基础上调整一致性设置。以下选项可用:

consistency选项,如果存在,可以是一种consistentdelegatedcached。此设置仅适用于 Mac 版 Docker 桌面,并在所有其他平台上被忽略。

Docker 卷标志是:

  1. consistentdefault:具有完全一致性的默认设置,如上所述。
  2. delegated:容器运行时的挂载视图是权威的。在容器中所做的更新在主机上可见之前可能会有延迟。 你什么时候用?例如,当容器不断更改数据并且您想在主机上备份这些数据时,您使用它,这是主机角度上的只读操作,因此将委托正确的选择。
  3. cached: macOS 主机的挂载视图是权威的。在主机上所做的更新在容器中可见之前可能会有延迟。你什么时候用?例如,当您的主机不断更改容器服务读取和使用它的数据(如配置/源代码/来自服务器的渲染数据等...)

用法

- <my-first-host-volume>:<first-container-volume-path>:delegated
- <my-second-host-volume>:<second-container-volume-path>:cached
Run Code Online (Sandbox Code Playgroud)

示例

version: '3.4'
services:

  jenkins:
     image: jenkins/jenkins:lts
     environment:
       - JENKINS_HOME=/var/jenkins_home
     container_name: jenkins  
     volumes:
       - '~/jenkins/:/var/jenkins_home:delegated'
       - '~/environment_keys:/var/data:cached'
     ports:
       - 0.0.0.0:8080:8080
     expose:
       - 5000  
     restart: unless-stopped
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但该链接中没有引用 docker 卷标志,如“一致”、“默认”、“委派”和“缓存” (7认同)
  • 我似乎无法在 docker-compose 网站上找到这方面的文档。您能提供一个链接吗 (4认同)
  • @goonerify 我认为这些指令不再适用。我可以找到许多 2018/19 年的文章引用这些内容,但没有官方文档在任何地方提到它。 (3认同)

小智 7

我觉得这个帖子需要更新以更好地反映当前情况。

自从 Docker for Mac 开始包含 gRPC-FUSE 以来,这些标志已从 Docker 文档中删除,因为不再需要它们。从 docker-compose.yml 文件中删除它们是安全的。

https://github.com/docker/for-mac/issues/5402

您可以看到 Docker Desktop 中默认选择了 gRPC-FUSE。转到“设置”>“常规”选项卡。


red*_*red 6

我没有运行新的(边缘通道)版本的Docker所以命令不起作用.升级后,一切都按预期工作.

  • 什么版本的`cached` 添加到 docker 中? (3认同)

Dod*_*act 6

就我而言,我想要的体积readonly:ro)也为:cached:delegated。为此,您只需使用以下语法:

volumes:
 - /external/folder:/internal/folder:ro,cached
Run Code Online (Sandbox Code Playgroud)


Cyr*_*ris 5

这个答案与问题没有直接关系,但具有相同的目的。

码头工人同步项目旨在解决在MacOS和Windows慢同步的这些问题。我已经为一些 Ruby on Rails 应用程序设置了它,结果令人惊讶。对于其他类型的项目,结果应该是相同的。

这是我的模板 dockerfile-compose

version: '3.4'
volumes:
  app-code:
    external: true
services:
  backend:
    volumes:
      - app-code/:/app:rw
Run Code Online (Sandbox Code Playgroud)

和 docker-sync 文件

version: 2
syncs:
  app-code:
    src: './'
    sync_strategy: 'native_osx'
    sync_excludes:
      - '.git'
      - 'coverage'
      - .gitignore'
    watch_excludes:
      - '.*/.git'
      - '.gitignore'
      - 'log'
      - 'docker-*.yml'
Run Code Online (Sandbox Code Playgroud)

然后您可以docker-sync start或按照文档使用 docker-sync 而不是在docker-compose需要时自动启动/停止同步。

主要缺点之一是与 docker-sync gem 的依赖关系,您必须在操作系统上安装它,但一旦设置好,它就可以正常工作。