【问题标题】:How to preserve apt-cache archive directory when using docker / host volumes使用 docker / host 卷时如何保留 apt-cache 存档目录
【发布时间】:2017-11-30 01:07:57
【问题描述】:

用例相当简单。我正在对接我们的本地配置(它利用厨师来配置我们的 ubuntu 服务器)。我正在使用一些数据卷来共享我想要作为 docker 容器缓存的主机目录: 例如:

docker run -d -P -h docker -v /foo/apt-cache:/var/cache/apt/archives foo:base

但是,/var/cache/apt/archives 目录中的 debian 软件包文件在每次安装软件包后都会不断被炸毁。有人可以指出在 docker 中发生这种情况的位置和解决方法,以便我可以跨容器很好地保留我的 apt-get 缓存吗?

提前致谢

【问题讨论】:

    标签: caching ubuntu chef-infra docker apt-get


    【解决方案1】:

    共享 /var/cache/apt/archives 似乎是一个脆弱的解决方案。也许您应该尝试设置一个运行 apt-cacher-ng 的容器并在您的其他容器上配置 apt 以使用该代理。

    Docker 有一个 article 解释如何设置它。

    【讨论】:

    • 托马斯,谢谢你的建议;我会看看那篇文章。虽然为了我自己的启迪,你会不会碰巧知道为什么这些包会被删除?我正在利用其他卷进行与缓存相关的行为,这些行为在构建/运行中持续存在而没有问题,所以我想知道是否有一些 apt-get clean 操作正在幕后发生。删除缓存的 deb 包 def。以前在自己使用 vagrant + chef 时没有发生过。
    • 我不知道,但是有厨师和流浪者供应确实让很多人怀疑某种恰当的行动。也许是一个愚蠢的猜测,但 apt 也可能会使用可能存储在其他地方的索引文件来跟踪缓存中的内容。
    【解决方案2】:

    意识到我需要从 docker ubuntu 基础映像中删除“/etc/apt/apt.conf.d/no-cache”文件。

    有一些钩子可以在安装后从缓存中删除 debian 包(以减少容器中占用的空间)

    【讨论】:

    • 如果多个 docker 镜像使用相同的挂载卷,您可能会遇到一些奇怪的问题。如果两个 docker 镜像大致同时启动,一个容器可能会覆盖另一个容器正在使用的文件。 apt-cacher-ng(加上 apt 代理设置)的优点是您可以在 LAN 上安全地缓存包。您是为创建 docker 映像进行缓存(并行性不是问题),还是像修改轻量级虚拟机一样修改正在运行的容器(使用 bash 或类似的入口点)?
    • 在破坏者:/etc/apt/apt.conf.d/docker-clean
    • @ives 层缓存是一个很好的折衷方案,但如果你的大部分时间由于某种原因浪费在包上,为什么不绑定挂载呢? - 在本地:它会像 Vagrant 的插件一样缓存包管理器的东西 - 在 gitlab ci 中:它会在每次构建时打包/解包缓存目录所以至少在我的情况下,似乎没有任何具体风险,只是速度提升,无需维护 apk/apt/yum/pip/npm 之类的缓存代理。
    猜你喜欢
    • 2018-01-13
    • 2021-04-23
    • 2022-01-06
    • 2017-09-06
    • 2018-07-28
    • 1970-01-01
    • 2019-09-04
    • 2021-11-29
    • 2018-09-25
    相关资源
    最近更新 更多