【docker学习之路】优化镜像

3 篇文章 0 订阅

在之前的文章Docker拉取,制作,提交镜像,推送到远程仓库中我们从centos镜像的基础上构建了一个拥有编译go项目的环境,但在提交后发现这样一个镜像有1G+的大小,这样镜像仓库早晚吃不消的。而且也没有必要把编译用的基础环境也一并提交上去。

改进

我最终需要的只是一个能运行app的容器,也就是说其他多余的环境和功能最终提交的时候可以省去。
那么我用基础镜像来编译。然后将二进制文件拷贝到alpine(一个轻巧的linux镜像)来运行app。

Dockerfile

# 使用自己制作的有go编译环境的镜像
FROM harbor.domain.com:8088/golang/golang1.12:v1.0 as base

# 开启go mod
ENV GOPROXY https://goproxy.io
ENV GO111MODULE on

# 切换当工作目录
WORKDIR /workplace

# 拷贝项目文件到工作目录
COPY . /workplace
# 设置环境变量
ENV GOOS linux
ENV GOARCH amd64
ENV CGO_ENABLED=0
# 拉包 & 编译 RUN go mod download &&
go build -o app

# 使用alpine镜像运行
FROM alpine as target

COPY --from=base /workplace/app /tmp/app

# 根据你的服务暴露容器端口
EXPOSE 8080

CMD ["/workplace/app"]

编译的时候指定最终编译的镜像

$ sudo docker build --target=target . -t $TEST_CONTAINER_NAME

最终镜像大小只有不到10M

在这里插入图片描述

当然镜像还有进一步优化的空间
比如编译时加参数-ldflags "-s -w"省略符号表和忽略调试信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值