跨多个 docker-compose 项目的共享卷

Shared volume across multiple docker-compose projects

我正在使用 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 作为前端资产,因此共享相同的包管理器:composeryarn .

我想知道,为了性能,是否可以在包管理器缓存的所有项目的根目录之外挂载共享卷?

例如:

/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 安装在每个项目的相关容器内。如果不清楚,一次只能启动一个项目。

目前,如果两个项目共享相同的 dep,那么每个项目都会单独下载和缓存它。一个更高效的(就构建时间而言)将是安装一个公共卷并将包管理器的缓存指向那里,这样当“项目 A”下载更新到 dip 时,“项目 B”可以从缓存加载它。

您可以简单地在每个需要它的容器上安装与卷绑定相同的目录。你can use absolute paths。甚至文档中的示例之一也使用绝对路径作为绑定安装。

但是,在映像构建期间卷不可用(docker-compose buildcomposer installnpm installyarn install 等命令应该是 运行无论如何。

尽管如果您 运行 在容器 运行 时执行这些命令,没有什么能阻止您将这些缓存目录安装到每个容器中。