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


相关文章
|
Linux Docker 容器
Docker中Dockerfile的构建过程
本章主要对Docker中自定义镜像的一种方式,docker进行简单的介绍。
131 1
Docker中Dockerfile的构建过程
|
4月前
|
Docker 容器
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
|
缓存 Docker 容器
50-Docker-多阶段构建和镜像瘦身
50-Docker-多阶段构建和镜像瘦身
|
缓存 网络协议 Linux
Dockerfile构建镜像过程中的错误记录及解决方法
本文记录了在一次使用Dockefile构建镜像的途中遇到的问题,以及后续的解决方法。
7157 1
|
运维 Java Linux
简单的一批的DockerFile构建
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段, * Dockerfile是软件的原材料 * Docker镜像是软件的交付品 * Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例 Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
142 1
|
存储 缓存 Java
多阶段构建:Docker 下如何实现镜像多阶级构建?
我们知道 Docker 镜像是分层的,并且每一层镜像都会额外占用存储空间,一个 Docker 镜像层数越多,这个镜像占用的存储空间则会越多。
180 0
|
Shell Go 容器
Dockerfile-多阶段构建(1)
Dockerfile-多阶段构建(1)
240 0
|
Shell Linux 开发工具
一文简单了解并构建Dockerfile
一文简单了解并构建Dockerfile
196 0
|
测试技术 Docker 索引
Dockerfile-多阶段构建(3)
Dockerfile-多阶段构建(3)
|
存储 关系型数据库 MySQL
Dockerfile命令及实践构建一个网站
dockerfile用于构建docker镜像的,部署一个用于运行你所需的容器环境。相当一个脚本,通过dockerfile自己的指令,来构建软件依赖、文件依赖、存储、 定制docker镜像的方式有两种: 手动修改容器内容,导出新的镜像 基于Dockerfile自行编写指令,基于指令流程创建镜像。
132 0