【问题标题】:How to benefit of the docker image cache when cloning a git repo克隆 git repo 时如何利用 docker 图像缓存
【发布时间】:2015-10-08 21:27:31
【问题描述】:

我有一个私有 git 存储库,我必须将它添加到我的 docker 映像中。为此,我将其克隆到与Dockerfile 相同的目录中,然后使用以下 docker 命令:

ADD my_repo_clone /usr/src/

我的仓库有一个我克隆的版本标签,v1。所以我克隆的文件总是一样的。

问题是当我构建这个 docker 镜像时,我总是得到一个 新的 镜像而不是替换旧的:

docker build --rm -t "org_name/image_name" .

显然,因为文件的ctime 发生了变化,docker 缓存没有看到我的文件相同,所以我总是得到一个新的图像,我想避免这种情况。

我尝试touch克隆的回购并将atimemtime更改为固定日期,但这仍然不够。

如何阻止 Docker(不更改计算文件哈希并重新构建它的 Docker 源代码)始终创建新图像。

或者如何在映像构建过程中克隆存储库? (为此我需要 SSH 转发,因为 repo 是私有的,而且我也无法在映像构建过程中使 SSH 代理转发工作)

【问题讨论】:

  • 您是否需要 Docker 映像中的实际 git 存储库,或者如果您只有 v1 标签的文件,您会很高兴吗?
  • 文件也正常。

标签: docker docker-image


【解决方案1】:

由于您不关心存储库本身,只需要标记 v1 的文件,因此您可以使用 git archive 而不是 git clone 来生成保存文件的 tar 存档对于标签v1

最后,docker ADD 指令将归档文件注入到镜像中。

生成的 tar 存档的 mtime 将是记录中标记的时间:

git 归档在给定树 ID 与给定提交 ID 或标签 ID 时的行为不同。在第一种情况下,当前时间用作存档中每个文件的修改时间。在后一种情况下,使用引用的提交对象中记录的提交时间


尝试:

git archive --remote=https://my.git.server.com/myoproject.git refs/tags/v1 --format=tar > v1.tar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多