把 Gin 打包到 Docker 中运行

单次构造

这种方式打包环境和运行环境都在同一个 Golang 底层镜像中

1
2
3
4
5
6
7
8
9
FROM golang:1.17-alpine
WORKDIR /build # 工作目录
ADD . ./ # 复制文件到工作目录
ENV GO111MODULE=on \ # 设置Go Module模式,并修改代理
GOPROXY=https://goproxy.cn
RUN go mod download # 下载go.mod里面所用到的包
RUN go build -o hejiusha . # 编译
EXPOSE 8888 # 暴露端口
ENTRYPOINT ["./hejiusha"] # 运行

多段构造

这种方式可以把编译环境和运行环境进行分割,极大的减小了运行镜像的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#----------build----------#
FROM golang:1.17-alpine AS builder
WORKDIR /build # 工作目录
ADD . ./ # 复制文件到工作目录
ENV GO111MODULE=on \ # 设置Go Module模式,并修改代理
GOPROXY=https://goproxy.cn
RUN go mod download # 下载go.mod里面所用到的包
RUN go build -o hejiusha . # 编译

#----------run----------#
FROM alpine:latest # 运行环境换为alpine
WORKDIR /build/ # 采用相同的目录作为工作目录
COPY --from=builder /build . # 把golang镜像中编译好的二进制文件复制到运行镜像中
EXPOSE 8888 # 暴露端口
ENTRYPOINT ["./hejiusha"] # 运行

俗世洪流,站得住脚已是千辛万苦,想要出人头地,恐怕比登天还难。