docker容器中高效的svn签出
我想签出docker容器中的一些文件(特别是测试套件) 现在我只使用docker容器中高效的svn签出,docker,svn,docker-compose,Docker,Svn,Docker Compose,我想签出docker容器中的一些文件(特别是测试套件) 现在我只使用runsvncohttp://llvm.org/svn/llvm-project/test-suite/trunk train.out/llvm测试套件内部Dockerfile 它可以工作,但看起来效率不高:在加载测试时,我需要在每个docker组件上等待约5分钟。 有没有更好的方法防止Docker每次都签出此文件?目前我看到的唯一选择是将文件包含到容器中。您通常不会从Dockerfile中运行源代码管理工具。在主机目录中检查它
runsvncohttp://llvm.org/svn/llvm-project/test-suite/trunk train.out/llvm测试套件
内部Dockerfile
它可以工作,但看起来效率不高:在加载测试时,我需要在每个docker组件上等待约5分钟。
有没有更好的方法防止Docker每次都签出此文件?目前我看到的唯一选择是将文件包含到容器中。您通常不会从Dockerfile中运行源代码管理工具。在主机目录中检查它们(更好的做法是,如果您能够管理它,将
Dockerfile
直接添加到您尝试构建的存储库中),然后运行docker build
,将其所有输入直接放在磁盘上
这有几个很好的理由:
- Docker映像缓存通常意味着Docker不会重复“克隆”、“签出”或“拉取”类型的操作:它知道它已经完成了一次,并且已经知道它的输出并跳过该步骤,即使您没有新的提交
- 将
或svn
等工具添加到只需构建的图像中,会使图像变得不必要的大。(多阶段构建可以避免这种情况,但它们相对较新。)git
- 更常见的情况是克隆需要凭据的私有存储库,很难避免将这些凭据泄漏到最终映像中。(同样,多阶段构建可以避免这种情况,但最好不要暴露安全性。)
Dockerfile
直接添加到您尝试构建的存储库中),然后运行docker build
,将其所有输入直接放在磁盘上
这有几个很好的理由:
- Docker映像缓存通常意味着Docker不会重复“克隆”、“签出”或“拉取”类型的操作:它知道它已经完成了一次,并且已经知道它的输出并跳过该步骤,即使您没有新的提交
- 将
或svn
等工具添加到只需构建的图像中,会使图像变得不必要的大。(多阶段构建可以避免这种情况,但它们相对较新。)git
- 更常见的情况是克隆需要凭据的私有存储库,很难避免将这些凭据泄漏到最终映像中。(同样,多阶段构建可以避免这种情况,但最好不要暴露安全性。)
svn co
),但正如您所描述的,应该发生的事情和Docker不应该自己重复这一步骤。我对svn知之甚少,但是将签出的项目目录作为卷附加到容器中并没有帮助?一个有趣的问题是为什么Docker层缓存不缓存它。您通常不希望这样(即使远程存储库中发生了更改,它也不会重复svn co
),但正如您所描述的,应该发生的事情和Docker不应该自己重复此步骤。