使用来自两个基本映像的文件
Using files from two Base images
我有两张 docker 图片。 Image x 只是将一些文件复制到图像中,Image y 复制其他文件并安装一些需要的库。
我想构建第三个 dockerfile=z,它将基于这两个图像。
z 的示例:
来自 x
.
.
来自 y
.
.
如何构建 dockerfile z 以使用来自 x 和 y 的那些文件?
以下内容来自Docker官网
使用多阶段构建
对于多阶段构建,您可以在 Docker 文件中使用多个 FROM 语句。每个 FROM 指令都可以使用不同的基础,并且它们中的每一个都开始构建的新阶段。您可以有选择地将工件从一个阶段复制到另一个阶段,在最终图像中留下您不想要的所有内容。为了展示这是如何工作的,让我们调整上一节中的 Docker 文件以使用多阶段构建。
Docker文件:
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"]
您只需要一个 Docker 文件。您也不需要单独的构建脚本。只是 运行 docker build.
$ docker build -t alexellis2/href-counter:latest .
最终结果是与以前相同的微小生产图像,但复杂性显着降低。您不需要创建任何中间图像,也不需要将任何工件提取到本地系统。
它是如何工作的?第二条 FROM
指令以 alpine:latest
图像作为基础开始一个新的构建阶段。 COPY --from=0
行只将前一阶段的构建工件复制到这个新阶段。 Go SDK 和任何中间工件都被留下,并没有保存在最终图像中。
来源:Docker Multi Stage Builds
试试这个:
FROM x as image1
FROM y as image2
FROM centos
COPY --from=image1 <source_path> <destinantion_path>
COPY --from=image2 <source_path> <destinantion_path>
我有两张 docker 图片。 Image x 只是将一些文件复制到图像中,Image y 复制其他文件并安装一些需要的库。 我想构建第三个 dockerfile=z,它将基于这两个图像。
z 的示例:
来自 x . .
来自 y . .
如何构建 dockerfile z 以使用来自 x 和 y 的那些文件?
以下内容来自Docker官网
使用多阶段构建
对于多阶段构建,您可以在 Docker 文件中使用多个 FROM 语句。每个 FROM 指令都可以使用不同的基础,并且它们中的每一个都开始构建的新阶段。您可以有选择地将工件从一个阶段复制到另一个阶段,在最终图像中留下您不想要的所有内容。为了展示这是如何工作的,让我们调整上一节中的 Docker 文件以使用多阶段构建。
Docker文件:
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"]
您只需要一个 Docker 文件。您也不需要单独的构建脚本。只是 运行 docker build.
$ docker build -t alexellis2/href-counter:latest .
最终结果是与以前相同的微小生产图像,但复杂性显着降低。您不需要创建任何中间图像,也不需要将任何工件提取到本地系统。
它是如何工作的?第二条 FROM
指令以 alpine:latest
图像作为基础开始一个新的构建阶段。 COPY --from=0
行只将前一阶段的构建工件复制到这个新阶段。 Go SDK 和任何中间工件都被留下,并没有保存在最终图像中。
来源:Docker Multi Stage Builds
试试这个:
FROM x as image1
FROM y as image2
FROM centos
COPY --from=image1 <source_path> <destinantion_path>
COPY --from=image2 <source_path> <destinantion_path>