使用来自不同存储库的代码运行多个Docker容器的最佳做法是什么?

时间:2017-11-17 17:58:42

标签: docker dockerfile

我有一个网络应用程序,包含多个服务(包括postgres数据库和redis),在多个存储库中。理想情况下,我希望将所有Docker的东西放在一个仓库中,然后从那里构建。但是,我遇到了麻烦,因为构建容器涉及在其他目录(或存储库)中编译代码,而你不能从另一个目录ADD。符号链接也不起作用。而且我不想从github拉入容器以避免在野外使用ssh密钥。有没有办法完成我想要做的事情?或者每个repo都需要自己的Dockerfile吗?

2 个答案:

答案 0 :(得分:1)

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

您可以ADD将两个目录放入容器中。 如果您在parent/

$ docker build -f project1/Dockerfile .

Dockerfile就像是跟随。

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

答案 1 :(得分:1)

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

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

您的问题是docker构建上下文限制了可以访问文件的范围。我建议您将docker 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将是透明的,因为它假定所有依赖都在构建上下文中。

FROM ...
ADD file1 file1
ADD file2 file2

...