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

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

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

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
相关问题
官网Codelab中的ArkUI项目无法构建
3206浏览 • 1回复 待解决
应用侧显示华为云mqtt数据是怎么做
3481浏览 • 1回复 待解决
求助镜像语言环境判断方法?
1391浏览 • 1回复 待解决
JS 镜像语言环境判断方法
773浏览 • 1回复 待解决
DevEco构建Hap和APP有什么区别?
3988浏览 • 1回复 待解决
目标:鸿蒙基础开发
3189浏览 • 5回复 待解决
搭建鸿蒙环境时,编译报错
2734浏览 • 1回复 待解决
鸿蒙如何根据Component 得到bitmap呢
1786浏览 • 1回复 待解决
如何编写打 nginx 的 dockerfile 文件?
297浏览 • 1回复 待解决
编译hispark, pegasus, hi3861, wifi 代码失败
2860浏览 • 1回复 待解决