Dockerfile的多阶段构建(multi-stage builds)

4 篇文章 0 订阅

编写Dockerfile的时候会遇到一个问题,制作镜像的时候由于需要编译可执行文件而引入了大量运行时不需要的工具,导致镜像特别大。比如:为了编译一个go的可执行文件,需要引入golang这个官方镜像进行编译,这个镜像大小是810M,但是真正运行的时候是不需要如此大的镜像的。那么 multi-stage builds 就起到了很大的作用

hello.go

package main

import (
    "fmt"
    "time"
)

func main() {
    for {
        fmt.Println("hello world")
        time.Sleep(time.Second)
    }
}

Dockerfile

FROM golang as compile_stage

COPY ./hello.go /tmp/hello.go

RUN go build -o /tmp/hello /tmp/hello.go


FROM alpine

# 从之前那个golang镜像环境中将编译好的hello拷贝过来
COPY --from=compile_stage /tmp/hello .

CMD ["./hello"]

多阶段构建出来的镜像是以最后那个FROM为基础的

这样go build -t hello . 制作出来的镜像只有7M多,而golang镜像本身就有810M,相差甚大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mingw-w64-builds 和 llvm-mingw 都是为 Windows 平台提供的开发工具集。 mingw-w64-builds 是一个基于 MinGW(Minimalist GNU for Windows)的项目,旨在为 Windows 提供一个开发环境,使开发者能够使用 GNU 工具链(如 GCC 编译器)来编译 Windows 下的应用程序。mingw-w64-builds 支持 32 位和 64 位的 Windows 平台,并提供了一系列开发工具和库,如 GCC 编译器、GDB 调试器、MSYS2 等。mingw-w64-builds 的目标是提供一个免费、开源、易于使用的开发环境,使开发者能够方便地在 Windows 上进行 C/C++ 开发。 llvm-mingw 则是基于 LLVM(Low Level Virtual Machine)的一个 MinGW 工具集。LLVM 是一个 modulable 编译器和工具链的项目,它提供了一组可扩展的工具,适用于多种编程语言。llvm-mingw 则是将 LLVM 和 MinGW 结合起来,为 Windows 平台提供了一套完整的开发工具链。通过使用 llvm-mingw,开发者可以使用 LLVM 提供的优秀代码生成能力,将高级语言代码(如 C、C++)编译为高效的机器码。llvm-mingw 提供了基于 LLVM 的编译器 Clang、调试器 lldb、库等工具,为开发者提供了一个现代化、高效的 Windows 开发环境。 mingw-w64-builds 和 llvm-mingw 都在为 Windows 平台上的开发者提供更好的开发工具支持,使他们能够更方便地进行应用程序的开发和调试。根据个人的需求和喜好,开发者可以选择适合自己的工具集来进行开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值