我成功地使用了 Docker 的多阶段功能来构建一些代码,然后将生成的工件复制到最终图像中。
是否可以将这个庞大的 Dockerfile 拆分为多个文件?
我想提高各个阶段的可读性。当添加更多阶段时,这将变得更加重要。
编辑:我知道我可以编写一个 Makefile(或类似文件),我首先构建一个名为“myproject-stage1”的图像,然后使用FROM myproject-stage1 AS build. 但是,如果可能,我宁愿避免使用外部构建工具。
我成功地使用了 Docker 的多阶段功能来构建一些代码,然后将生成的工件复制到最终图像中。
是否可以将这个庞大的 Dockerfile 拆分为多个文件?
我想提高各个阶段的可读性。当添加更多阶段时,这将变得更加重要。
编辑:我知道我可以编写一个 Makefile(或类似文件),我首先构建一个名为“myproject-stage1”的图像,然后使用FROM myproject-stage1 AS build. 但是,如果可能,我宁愿避免使用外部构建工具。
如果您的 Dockerfile 当前看起来像:
FROM ubuntu:16.04 AS builder
RUN apt-get install build-essential
COPY . ./
RUN ./build_all_the_things \
&& make install PREFIX=/usr DESTDIR/out
FROM alpine:3.8
COPY --from=builder /out/ /
CMD the_app
您可以按原样轻松地将第一部分拆分为自己的 Dockerfile,然后构建它
docker build -f Dockerfile.builder -t me/builder .
COPY --from必须在你的 Dockerfile 中命名一些先前的阶段,但这个阶段不需要做太多;然后,您可以将其后半部分更改为
FROM me/builder AS builder
FROM alpine:3.8
COPY --from=builder /out/ /
CMD the_app
这样做的最大缺点是您需要两个单独docker build的命令来实际构建最终图像。您可以编写一个 shell 脚本来同时执行这两个操作。