• 如何将镜像体积海量缩减


    点击上方蓝色字体,选择“设为星标”

    回复”云原生“获取基础架构实践

    d2b594bb06b9165b60cd90f889d7a566.jpeg

    镜像的传统构建

    我们随便找个Golang代码项目作为案例,来开始构建一个镜像。下面我们以我的一个实战项目开始讲解:https://gitee.com/damon_one/uranus

    第一步:我们把项目代码克隆到本地:

    git clone https://gitee.com/damon_one/uranus

    第二步,书写其编译的Dockerfile:

    1. FROM golang:1.20
    2. WORKDIR /opt/app
    3. COPY . .
    4. go build -o hz-zeus ./zeus
    5. CMD ["/opt/app/hz-zeus"]

    这个 Dockerfile 描述的构建过程非常简单,我们首选 Golang:1.20 版本的镜像作为编译环境,将源码拷贝到镜像中,然后运行 go build 编译源码生成二进制可执行文件,最后配置启动命令。

    第三步,构建镜像:

    docker build -t hz-zeus -f Dockerfile .

    这样编译构建的镜像会很大,这里就不展示最后的镜像信息了。

    Dockerfile 优化

    从上面的 Dockerfile 可以看出,我们在容器内运行了 go build -o hz-zeus ./zeus,这条命令将会编译生成二进制的可执行文件,由于编译的过程中需要 Golang 编译工具的支持,所以我们必须要使用 Golang 镜像作为基础镜像,这是导致镜像体积过大的直接原因。

    既然依赖基础镜像比较大,那么我们是否可以替换为轻量级的镜像呢?发现可以将 Golang:1.20 基础镜像替换为 golang:1.20-alpine 版本。

    但,这样的构建之后,发现镜像还是很大。毕竟是在镜像内镜像编译二进制文件后构建

  • 相关阅读:
    java阻塞队列
    【C语言初阶】函数
    代码随想录算法训练营day44
    java基础05
    Vue必备知识点(简单+快速上手Vue)
    Spring Boot与Redis集成的最佳实践
    Linux自动化构建项目工具——Makefile/makefile
    蓝桥杯(3.11)
    ES6中 Promise 概念、基本用法和封装ajax(json数据使用)
    前端工程化与 webpack
  • 原文地址:https://blog.csdn.net/wangsofa/article/details/132062886