docker 容器中的高效 svn 检出

Efficient svn checkout in docker container

我想检出我的 docker 容器中的一些文件(特别是测试套件 http://llvm.org/svn/llvm-project/test-suite/trunk)。

现在我只是在 Docker 文件中使用 RUN svn co http://llvm.org/svn/llvm-project/test-suite/trunk train.out/llvm-test-suite

它有效,但看起来效率不高:在每个 docker-compose 上,我需要在加载测试时等待约 5 分钟。 有没有更好的方法来防止 Docker 每次都检出这个文件?我目前看到的唯一选择是将文件包含到容器中。

您通常不会 运行 来自 Docker 文件的源代码控制工具。在主机目录中检查它们(更好的是,如果你可以管理它,将 Dockerfile 直接添加到你要构建的存储库)和 运行 docker build 及其所有直接在磁盘上输入。

这有几个很好的理由:

  • Docker 图像缓存通常意味着 Docker 不会重复“克隆”、“结帐”或“拉取”类型的操作:它知道它已完成它一次并且已经知道它的输出并跳过该步骤,即使有您没有的新提交。

  • svngit 之类的工具添加到您只需要构建它的图像中,会使它不必要地变大。 (多阶段构建可以避免这种情况,但它们相对较新。)

  • 更常见的用例是克隆需要凭据的私有存储库,并且很难避免将这些凭据泄漏到最终图像中。 (同样,多阶段构建可以避免这种情况,但要小心,但最好不要完全暴露安全性。)