Dockerfile-多阶段构建(3)

简介: Dockerfile-多阶段构建(3)

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


相关文章
|
1月前
|
Docker 容器
Dockerfile 中的多阶段生成
Dockerfile 中的多阶段生成
15 0
|
1月前
|
运维 Docker 容器
|
1月前
|
缓存 应用服务中间件 nginx
dockerfile构建镜像详细解释与应用
Dockerfile 是一种可被 Docker 程序解释的脚本,用于定义如何构建容器镜像。它通过一系列指令指定镜像的配置和定制需求,支持自动化构建,简化开发、测试和部署流程。
|
5月前
|
Docker 容器
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
|
缓存 Docker 容器
50-Docker-多阶段构建和镜像瘦身
50-Docker-多阶段构建和镜像瘦身
|
缓存 网络协议 Linux
Dockerfile构建镜像过程中的错误记录及解决方法
本文记录了在一次使用Dockefile构建镜像的途中遇到的问题,以及后续的解决方法。
8194 1
|
运维 Java Linux
简单的一批的DockerFile构建
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段, * Dockerfile是软件的原材料 * Docker镜像是软件的交付品 * Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例 Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
150 1
|
存储 缓存 Java
多阶段构建:Docker 下如何实现镜像多阶级构建?
我们知道 Docker 镜像是分层的,并且每一层镜像都会额外占用存储空间,一个 Docker 镜像层数越多,这个镜像占用的存储空间则会越多。
218 0
|
Shell Go 容器
Dockerfile-多阶段构建(1)
Dockerfile-多阶段构建(1)
250 0
|
Go 开发工具
Dockerfile-多阶段构建(2)
Dockerfile-多阶段构建(2)
140 0