【发布时间】:2021-05-08 14:13:48
【问题描述】:
我正在使用docker-compose 为多个单独的项目编排容器。这些项目中的每一个都有自己的一组容器,并且与其他项目无关。
例如:
/my-projects/project-1/docker-compose.yml
/my-projects/project-2/docker-compose.yml
/my-projects/project-3/docker-compose.yml
然而,这些项目的相似之处在于它们都是 PHP 项目,并且使用 webpack 作为前端资产,因此共享相同的包管理器:composer 和 yarn。
出于性能考虑,我想知道是否可以在所有项目的目录根目录之外为包管理器缓存挂载一个共享卷?
例如:
/my-projects/caches/composer
/my-projects/caches/npm
/my-projects/project-1/docker-compose.yml
/my-projects/project-2/docker-compose.yml
/my-projects/project-3/docker-compose.yml
/my-projects/caches/composer 和 /my-projects/caches/npm 安装在每个项目的相关容器中。如果不清楚,一次只能启动一个项目。
目前,如果两个项目共享相同的 deps,则每个项目都会单独下载并缓存它。更高性能(就构建时间而言)是挂载一个公共卷并将包管理器的缓存指向那里,这样当“项目 A”下载到 dip 的更新时,“项目 B”可以从缓存中加载它。
【问题讨论】:
-
如果您打算使用绑定挂载 - 那么只需挂载它。没有额外的配置,只需要在任意多个容器中绑定挂载一个目录即可。
-
谢谢@anemyte!据我所知,docker-compose 文件中描述的挂载是相对/受限于项目的根目录——这些是项目之外的目录。
-
太棒了,我错过了!我会试验一下,看看有什么用。在这些项目中,
composer.json等在映像构建时不可用,因此作为单独的构建过程运行。谢谢大家。 -
绝对路径和相对路径(通过
..)都有效。是 Dockerfile 被限制在某个上下文根中,而不是 docker-compose.yml。 -
谢谢大家,这一切都非常有用 - 我确实对 Dockerfile 限制和 docker-compose [缺乏] 在这方面的限制感到困惑。 @NicoHaase 很有用,谢谢。
标签: performance docker docker-compose composer-php yarnpkg