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

Dockerfile-多阶段构建(3)

作者: 糖醋沼跃鱼 | 来源:发表于2022-04-07 17:58 被阅读0次

    Dockerfile-多阶段构建(3)

    将构建阶段命名

    缺省情况下,阶段是没有命名的,但是我们可以通过他们的索引来引用他们,第一个FROM就是从0开始。
    但是,这样也不太好,可读性还差那么点,因为我们完全可以用想要的名字来命名,如果你需要也可以自己加上阶段索引,我们可以通过将AS < NAME >来命名阶段。

    下面这段用例,命名了阶段,并且在COPY指令中使用名称来改进前一个用例。这意味着我们的Dockerfile中的命令重新排序了,COPY也不会中断。

    # syntax=docker/dockerfile:1
    FROM golang:1.16 AS builder
    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=builder /go/src/github.com/alexellis/href-counter/app ./
    CMD ["./app"]  
    

    停在一个指定的构建阶段

    多阶段构建真的提供了不少花活,但我们不想构建整个镜像的时候,我们可以指定停在一个阶段(这有什么场景吗?)我感觉大多数的多阶段构建设计,都是为了最终的镜像吧,可能是我接触的太少了,接着看吧。下面这段用例假设我们使用上方的dockerfile来构建的,然后就可以停在builder构建阶段。

     docker build --target builder -t alexellis2/href-counter:latest .
    

    官方紧接着给了几个场景,好评

    • 当我我们需要debug一些具体构建阶段的时候
    • 官方推荐可以给一个debug阶段,该阶段将所有debug工具打开,然后进入production阶段
    • 使用testing阶段,如果app需要用一些数据来测试的话,然后production阶段可以用真实数据

    基本都是帮助我们debug,和测试的。

    使用外部镜像作为一个阶段

    使用多阶段构建时,不仅限于从之前的Dockerfile中创建的阶段进行复制。我们可以用COPY --from指令从独立的镜像中复制,可以使用本地的镜像名称,本地或Docker注册表上的ID,下面是用例:

    COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf
    

    相关文章

      网友评论

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

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