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
相关问题
环境如何构建?
510浏览 • 0回复 待解决
后台录像需要怎么做呢?
2262浏览 • 1回复 待解决
三表连表查询+groupby怎么做
653浏览 • 1回复 待解决
鸿蒙的OTA升级要怎么做
787浏览 • 0回复 待解决
polarDB私有化部署怎么做
1588浏览 • 1回复 待解决
请问怎么做MySQL的数据优化?
561浏览 • 2回复 待解决
docker需要安装centos安装java吗?
601浏览 • 1回复 待解决
求助镜像语言环境判断方法?
3691浏览 • 1回复 待解决
JS 镜像语言环境判断方法
2631浏览 • 1回复 待解决
官网Codelab中的ArkUI项目无法构建
5478浏览 • 1回复 待解决
DevEco构建Hap和APP有什么区别?
11429浏览 • 1回复 待解决
应用侧显示华为云mqtt数据是怎么做
5438浏览 • 1回复 待解决
MQTT 服务器 怎么做压力测试,求指导?
1769浏览 • 1回复 待解决
如何在Native侧构建一个ArkTS对象
215浏览 • 1回复 待解决