如果我从我的主机上运行composer install
,我打我的本地作曲家缓存:如何缓存docker build的软件包管理器下载?
- Installing deft/iso3166-utility (1.0.0)
Loading from cache
然而,建立在其Dockerfile容器中时:
RUN composer install -n -o --no-dev
我下载所有的东西,如:
- Installing deft/iso3166-utility (1.0.0)
Downloading: 100%
这是预期的,但我喜欢避免它。即使在重建时,它也会再次下载所有内容。
我想有一个作曲家的通用缓存,我也可以转发其他码头项目。
我看着这一点,并找到了办法define a volume in the Dockerfile:
ENV COMPOSER_HOME=/var/composer
VOLUME /var/composer
我还说,我Dockerfile
,并预计将只有一次下载的文件,事后命中缓存。
然而,当我修改我的composer
时,例如,删除-o
标志,并重新运行docker build .
,我预计会在构建缓存中生效,但我仍然会再次下载供应商。
卷应该如何在Docker容器中有数据缓存?
体积将持续一个容器实例,但不是在构建。您可以创建一个指定的卷,它将保留在一个静态位置,但您将一个解决方案耦合到一个环境。你需要考虑在构建vs之后你想要做什么。您可以设置某种本地存储库来充当缓存/代理。 – ldg
我也很苦恼。你有没有想出一个办法呢?我想也许使用HTTP代理并指导Docker使用它可以工作。可能排除hub.docker。com从代理到不保留下载图像的两个副本。 – gooli
@gooli发表了一个关于我如何处理这个问题的答案。 Thx提醒。 – k0pernikus