1.直接编译得到运行文件 22M
使用的项目源码地址 (https://github.com/scoful/kingProject)
本地直接编译打一个linux运行包
set GOOS=linux
set GOARCH=amd64
go build main.go
结果是22M
-
不编译直接运行的镜像 941M
Dockerfile文件内容
# 基础镜像,基于golang最新镜像构建
FROM golang
# 作者
MAINTAINER scoful
# 全局工作目录
WORKDIR $GOPATH/kingProject
# 把运行Dockerfile文件的当前目录所有文件复制到目标目录
COPY . $GOPATH/kingProject
# 环境变量
# 用于代理下载go项目依赖的包
ENV GOPROXY https://goproxy.cn,direct
# 需暴露的端口
EXPOSE 8888
# 可外挂的目录
VOLUME ["/go/kingProject/config","/go/kingProject/log"]
# docker run命令触发的真实命令(相当于不编译打包,源代码直接运行)
ENTRYPOINT ["go","run","main.go"]
编译镜像后查询结果如下:
结果是941M,基本跟基础镜像golang的大小一致,而且因为没有预先编译,等到运行的时候再编译并拉取依赖包,run起来很慢
-
编译后的镜像 1.14G
Dockerfile文件内容
# 基础镜像,基于golang最新镜像构建
FROM golang
# 作者
MAINTAINER scoful
# 全局工作目录
WORKDIR $GOPATH/kingProject
# 把运行Dockerfile文件的当前目录所有文件复制到目标目录
COPY . $GOPATH/kingProject
# 环境变量
# 用于代理下载go项目依赖的包
ENV GOPROXY https://goproxy.cn,direct
# 编译
RUN GOOS=linux GOARCH=amd64 go build main.go
# 需暴露的端口
EXPOSE 8888
# 可外挂的目录
VOLUME ["/go/kingProject/config","/go/kingProject/log"]
# docker run命令触发的真实命令(相当于直接运行编译后的可运行文件)
ENTRYPOINT ["./main"]
结果是1.14G,更大了,因为加上了编译过程中拉取的包,但是预先编译,所以直接run,速度很快
-
优化:使用alpine版本的基础镜像 517M
优化的方向:如果一个镜像在https://hub.docker.com/里能搜到有alpine版本,尽量用alpine版本,相当于是官方提供的最小化可用版本
Dockerfile文件内容
# 基础镜像,基于golang