Dockerfile-多阶段构建(2)

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

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和任何中间的依赖都会被留下,不会保存在最终的镜像当中。


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

相关实验场景

更多