美文网首页
Dockerfile-多阶段构建(2)

Dockerfile-多阶段构建(2)

作者: 糖醋沼跃鱼 | 来源:发表于2022-04-06 12:30 被阅读0次

    Dockerfile-多阶段构建(2)

    来看多阶段构建如何做

    对于多阶段构建,我们可以在Dockerfile里使用多个FROM命令。每个FROM都可以使用不同的基础镜像,并且每一个都会开始一个新的构建阶段。我们可以选择性的将组建从一个阶段复制到下一个阶段中,最终,最后的构建只会留下所有需要的东西,不想要的东西都不会出现在最终镜像中,这样以来镜像的体积就会小很多了。

    接下来的例子,是优化了上一篇文章之中的构建Dockerfile-多阶段构建(1)

    Dockerfile

    # syntax=docker/dockerfile:1
    FROM golang:1.16
    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,不需要分开成两个文件。

    最终的结果是一样的,但是镜像体积变得更小,复杂性也显著降低。不再需要构建任何基础镜像。

    那他是如何工作的呢?
    第二个FROM指令以alpine:latest镜像为基础开始一个新的构建阶段。COPY --from=0能将构建的组建从上一个阶段复制到当前的新阶段。Go SDK和任何中间的依赖都会被留下,不会保存在最终的镜像当中。

    相关文章

      网友评论

          本文标题:Dockerfile-多阶段构建(2)

          本文链接:https://www.haomeiwen.com/subject/capdsrtx.html