通过FROM从不同的本地目录导入Dockerfile

时间:2018-03-27 13:23:21

标签: docker docker-compose docker-multi-stage-build

我想创建一个多阶段构建过程,而每个docker文件都嵌套在它们自己的本地目录中,并且每个Docker文件都有相应的依赖项。有没有办法从本地的不同目录导入Docker文件,而我可以使用Docker的FROM命令导入它,以在构建中创建几个阶段?

如果没有,我是否可以将ADD其他暂存的Docker文件放入当前的Docker文件中,然后在docker容器中使用FROM,在FROM中添加并在FROM {path/to/docker/locally}中使用它1}?

也许我正在考虑多阶段构建错误的方式。

或者我可以简单地运行setpath吗?这不适合我。

3 个答案:

答案 0 :(得分:3)

  

有没有办法从本地的不同目录导入Docker文件,而我可以使用Docker的FROM命令导入它,在构建中创建几个阶段?

没有。 FROM指令仅用于导入预构建的图像,不能用于导入Dockerfile。

  

如果没有,我能将其他分阶段的Docker文件添加到当前的Docker文件中吗?

没有。 ADD指令只能将构建上下文(通常是当前工作目录)中的文件复制到容器中。你不能ADD ../something /something

  

或者我可以简单地运行FROM {path / to / docker / local}?

没有。但是,对你有用的一种方法是,首先构建另一个图像,说它的名字是first-image:latest,然后你可以使用COPY指令从该图像中复制文件:

COPY --from=first-image:latest /some/file /some/file

答案 1 :(得分:3)

如果你使用 Docker 20.10+,你可以这样做:

# syntax = edrevo/dockerfile-plus

INCLUDE+ {path/to/docker/locally}

RUN ...

INCLUDE+ 指令由 Dockerfile 中的第一行导入。您可以在 https://github.com/edrevo/dockerfile-plus

阅读有关 dockerfile-plus 的更多信息

答案 2 :(得分:0)

如果我正确地理解了这个问题,那么你想要实现的是建立一个图像,然后使用相同的图像并在其上构建一些东西(下一个“阶段”)。

Docker支持这个概念,但不支持导入另一个Dockerfile。

Dockerfiles和它们所在的目录是自包含的,i。即构建映像所需的唯一内容是这些目录内容。因此,您无法从其他目录加载其他Dockerfiles。

要走的路是建立基本形象,例如: G。 myappimage,使用Dockerfile myappimage/Dockerfile。构建之后,您可以使用mytestingimage/Dockerfile在另一个Dockerfile(例如FROM myappimage)中引用此基本图像,以在mytestingimage之上构建图像(myappimage)。

然后,mytestingimagemyappimage完全相同,但ADD和其他命令添加了其他图层。