关于go:docker-打包进阶如何优化镜像image大小

一、新建go代码我的项目

1、新建目录

mkdir hello && cd hello && touch main.go

2、关上main.go 补充代码

package main

func main() {
    println("hello world , hi")
}

二、docker打包-单个构建

1、生成Dockerfile文件

touch Dockerfile

2、关上Dockerfile 补充代码

#go环境
FROM golang:1.19

# 在容器内设置 /hello 为当前工作目录
RUN mkdir /hello
WORKDIR /hello
# 把文件复制到当前工作目录
COPY . .

#执行go build生成二进制打包文件hello
RUN go build -o hello ./main.go

# docker run 时执行命令
ENTRYPOINT ["./hello"]

3、构建docker镜像 hello

docker build -t hello .

此时咱们能够查看docker客户端,生成了一个 993M大小的二进制镜像!

其实咱们只是写了一个 “hello world,hi” 字符串。
为什么这么大?
因为咱们装置了golang:1.19环境。

三、多阶段构建

咱们关上Dockerfile,改成如下代码:

#go环境
FROM golang:1.19.0-alpine3.16 as build

# 在容器内设置 /hello 为当前工作目录
RUN mkdir /hello
WORKDIR /hello
# 把文件复制到当前工作目录
COPY . .

#执行go build生成二进制打包文件hello
RUN go build -o hello_new ./main.go




FROM alpine:3.16.2 as prod
WORKDIR /hello_new
COPY --from=build /hello .
# docker run 时执行命令
ENTRYPOINT ["./hello_new"]

此时再build

docker build -t  hello_new .

整个包的大小只有 6.75M了。

而后再执行一下

➜  hello git:(master) ✗ docker run hello_new     

输入:

hello world , hi

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理