0

我有两个泊坞窗图像。Image x 只是将一些文件复制到图像中,Image y 复制其他文件并安装一些需要的库。我想构建基于这两个图像的第三个 dockerfile=z 。

z 示例:

从 x 。.

从 y 。.

如何构建可以使用来自 x 和 y 的文件的 dockerfile z?

4

2 回答 2

1

以下内容来自 Docker 官网。

使用多阶段构建

对于多阶段构建,您可以在 Dockerfile 中使用多个 FROM 语句。每个 FROM 指令都可以使用不同的基础,并且它们中的每一个都开始构建的新阶段。您可以选择性地将工件从一个阶段复制到另一个阶段,从而在最终图像中留下您不想要的一切。为了展示它是如何工作的,让我们调整上一节中的 Dockerfile 以使用多阶段构建。

Dockerfile:

FROM golang:1.7.3
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html  
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM alpine:latest  
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"]

您只需要单个 Dockerfile。您也不需要单独的构建脚本。只需运行 docker build。

$ docker build -t alexellis2/href-counter:latest .

最终结果是与以前相同的微小生产图像,但复杂性显着降低。您不需要创建任何中间图像,也不需要将任何工件提取到本地系统。

它是如何工作的?第二条指令以图像为基础FROM开始一个新的构建阶段。alpine:latestCOPY --from=0行仅将构建的工件从前一个阶段复制到这个新阶段。Go SDK 和任何中间工件都被留下,不会保存在最终图像中。

资料来源:Docker 多阶段构建

于 2020-05-09T15:18:34.150 回答
0

尝试这个:

FROM x as image1

FROM y as image2

FROM centos

COPY --from=image1 <source_path> <destinantion_path>

COPY --from=image2 <source_path> <destinantion_path>

参考

于 2020-05-09T15:25:00.403 回答