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 不会重复“克隆”、“结帐”或“拉取”类型的操作:它知道它已完成它一次并且已经知道它的输出并跳过该步骤,即使有您没有的新提交。
将 svn
或 git
之类的工具添加到您只需要构建它的图像中,会使它不必要地变大。 (多阶段构建可以避免这种情况,但它们相对较新。)
更常见的用例是克隆需要凭据的私有存储库,并且很难避免将这些凭据泄漏到最终图像中。 (同样,多阶段构建可以避免这种情况,但要小心,但最好不要完全暴露安全性。)
我想检出我的 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 不会重复“克隆”、“结帐”或“拉取”类型的操作:它知道它已完成它一次并且已经知道它的输出并跳过该步骤,即使有您没有的新提交。
将
svn
或git
之类的工具添加到您只需要构建它的图像中,会使它不必要地变大。 (多阶段构建可以避免这种情况,但它们相对较新。)更常见的用例是克隆需要凭据的私有存储库,并且很难避免将这些凭据泄漏到最终图像中。 (同样,多阶段构建可以避免这种情况,但要小心,但最好不要完全暴露安全性。)