我想创建一个多阶段构建过程,而每个docker文件都嵌套在它们自己的本地目录中,并且每个Docker文件都有相应的依赖项。有没有办法从本地的不同目录导入Docker文件,而我可以使用Docker的FROM
命令导入它,以在构建中创建几个阶段?
如果没有,我是否可以将ADD
其他暂存的Docker文件放入当前的Docker文件中,然后在docker容器中使用FROM
,在FROM
中添加并在FROM {path/to/docker/locally}
中使用它1}?
也许我正在考虑多阶段构建错误的方式。
或者我可以简单地运行setpath
吗?这不适合我。
答案 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
答案 2 :(得分:0)
如果我正确地理解了这个问题,那么你想要实现的是建立一个图像,然后使用相同的图像并在其上构建一些东西(下一个“阶段”)。
Docker支持这个概念,但不支持导入另一个Dockerfile。
Dockerfiles和它们所在的目录是自包含的,i。即构建映像所需的唯一内容是这些目录内容。因此,您无法从其他目录加载其他Dockerfiles。
要走的路是建立基本形象,例如: G。 myappimage
,使用Dockerfile myappimage/Dockerfile
。构建之后,您可以使用mytestingimage/Dockerfile
在另一个Dockerfile(例如FROM myappimage
)中引用此基本图像,以在mytestingimage
之上构建图像(myappimage
)。
然后,mytestingimage
与myappimage
完全相同,但ADD
和其他命令添加了其他图层。