在开始这项工作之前大家可以先去看一下docker官方给出关于空镜像scratch的说明,采用官方简单的一句话就是:scratch是一个明确的空图像,特别是对于“从头开始”构建图像。
分阶段构建镜像就会用到scratch这个空镜像,这样的好处是可以大大节约服务器资源,比如用普通的镜像(golang:1.18-alpine)来说,它在构建完之后大约占300MB左右,那么我们通过分阶段构建的话可能只需要20MB左右(与你的程序文件以及系统安装的文件内容有关,总之会比原镜像小很多),这里我在想scratch既然是个空镜像干净的环境那么它系统加载的内容也会非常少,在一定程度上是不是也存在提升了程序的性能,这里懂的原理的同学可以交流。
接下来是分阶段构建镜像所用到的Dockerfile和docker-compose.yml以及相关文件的演示:
Dockerfile:
FROM golang:1.18-alpine as builder
# 设置必要的环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64 \
GOPROXY=https://goproxy.cn,direct
RUN set -ex \

本文介绍了使用Docker空镜像scratch进行分阶段构建镜像。分阶段构建可节约服务器资源,如用golang:1.18-alpine普通镜像构建后约占300MB,分阶段构建可能只需20MB左右。文中演示了相关文件编写,构建出的镜像节省近30倍空间,且程序能正常运行,还提及了docker的“悬空镜像”。
最低0.47元/天 解锁文章
1561

被折叠的 条评论
为什么被折叠?



