dockerfile 先构建编译环境得到目标代码后再构建目标镜像怎么做

之前看到过 docker 两次打包的文章,真正要用了却又搜不到。

dockerfile
编译
目标代码
2022-06-14 14:20:05
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
cuiyingfeng
1

Docker v17.05 开始支持多阶段构建 (multistage builds)。使用多阶段构建我们就可以很容易解决前面提到的问题,并且只需要编写一个 Dockerfile:

FROM golang:alpine as builder

RUN apk --no-cache add git

WORKDIR /go/src/github.com/go/helloworld/

RUN go get -d -v github.com/go-sql-driver/mysql

COPY app.go .

RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM alpine:latest as prod

RUN apk --no-cache add ca-certificates

WORKDIR /root/

COPY --from=0 /go/src/github.com/go/helloworld/app .

CMD ["./app"]

构建镜像

$ docker build -t go/helloworld:3 .


对比三个镜像大小

$ docker image ls

REPOSITORY        TAG   IMAGE ID         CREATED            SIZE
go/helloworld     3     d6911ed9c846     7 seconds ago      6.47MB
go/helloworld     2     f7cf3465432c     22 seconds ago     6.47MB
go/helloworld     1     f55d3e16affc     2 minutes ago      295MB


很明显使用多阶段构建的镜像体积小,同时也完美解决了上边提到的问题。

 

以上内容来自

https://yeasy.gitbook.io/docker_practice/image/multistage-builds 

分享
微博
QQ
微信
回复
2022-06-14 15:28:15
相关问题
如何定制构建目标产物?
758浏览 • 2回复 待解决
在vue里怎么做环境的判断?
116浏览 • 1回复 待解决
编译构建怎么编写自定义任务?
656浏览 • 1回复 待解决
环境如何构建?
1996浏览 • 0回复 待解决
后台录像需要怎么做呢?
3978浏览 • 1回复 待解决
获取运行时编译构建参数
915浏览 • 1回复 待解决
fetch 怎么做超时处理?
414浏览 • 1回复 待解决
编译构建报错,提示CONFIGURE_SDK_ERROR
654浏览 • 1回复 待解决
三表连表查询+groupby怎么做
2057浏览 • 1回复 待解决
HarmonyOS 如何关闭键盘 关闭弹窗
345浏览 • 1回复 待解决