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:当容器和主机都主动且持续地对数据进行更改时。从文档:
Mac 用于
osxfs将从 macOS 共享的目录和文件传播到 Linux VM。这种传播使这些目录和文件可用于在 Docker Desktop for Mac 上运行的Docker 容器。**默认情况下,这些共享是完全一致的,这意味着每次在 macOS 主机上或通过容器中的挂载发生写入时,更改都会刷新到磁盘,以便共享中的所有参与者都具有完全一致的视图.在某些情况下,完全一致性会严重影响性能。 ** Docker 17.05 及更高版本引入了选项以在每个挂载、每个容器的基础上调整一致性设置。以下选项可用:
的
consistency选项,如果存在,可以是一种consistent,delegated或cached。此设置仅适用于 Mac 版 Docker 桌面,并在所有其他平台上被忽略。
Docker 卷标志是:
consistent或default:具有完全一致性的默认设置,如上所述。delegated:容器运行时的挂载视图是权威的。在容器中所做的更新在主机上可见之前可能会有延迟。
你什么时候用?例如,当容器不断更改数据并且您想在主机上备份这些数据时,您使用它,这是主机角度上的只读操作,因此将委托正确的选择。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)
小智 7
我觉得这个帖子需要更新以更好地反映当前情况。
自从 Docker for Mac 开始包含 gRPC-FUSE 以来,这些标志已从 Docker 文档中删除,因为不再需要它们。从 docker-compose.yml 文件中删除它们是安全的。
https://github.com/docker/for-mac/issues/5402
您可以看到 Docker Desktop 中默认选择了 gRPC-FUSE。转到“设置”>“常规”选项卡。
就我而言,我想要的体积readonly(:ro)也为:cached或:delegated。为此,您只需使用以下语法:
volumes:
- /external/folder:/internal/folder:ro,cached
Run Code Online (Sandbox Code Playgroud)
这个答案与问题没有直接关系,但具有相同的目的。
该码头工人同步项目旨在解决在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 的依赖关系,您必须在操作系统上安装它,但一旦设置好,它就可以正常工作。
| 归档时间: |
|
| 查看次数: |
8998 次 |
| 最近记录: |