用不同仓库的代码运行多个Docker容器的最佳实践是什么?

我有一个networking应用程序,包括多个服务(包括postgres数据库和Redis的),在多个回购。 理想情况下,我希望将所有Docker的东西放在一个回购中,并从那里进行构build。 但是,由于构build容器涉及编译其他目录(或存储库)中的代码,所以我遇到了麻烦,并且不能从其他目录中添加。 Symlinking也不起作用。 我不想从github拉到一个容器,以避免在野外ssh密钥。 有没有办法完成我想要做的? 还是每个回购需要自己的Dockerfile?

最好为每个项目维护一个dockerfile,并保持每个项目独立于其他项目,以便可以分别构build每个项目。

但是,如果你不能这样做,可以有一些解决方法。

你的问题是docker构build上下文限制了可以访问文件的范围。 我build议你把docker build包装在一个脚本中,收集所有的依赖关系并发出一个构build命令。 脚本可能看起来像这样:

 mkdir build-dir cp <path-to-file1> build-dir/file1 cp <path-to-file2> build-dirfile2 cp <path-to-Dockerfile> build-dir/Dockerfile ... docker build -t image . rm -rf build-dir 

Dockerfile将是透明的,因为它假定所有的依赖关系都在构build上下文中。

 FROM ... ADD file1 file1 ADD file2 file2 ... 

假设你有两个目录parent/project1parent/project2 ,并且Dockerfile位于parent/project1/

您可以将两个目录添加到容器中。 如果您在parent/

 $ docker build -f project1/Dockerfile . 

Dockerfile是如下所示。

 ADD project1 /path/to/directory1 ADD project2 /path/to/directory2