go 编译打包指令
CGO_ENABLED : 0/1CGO 表示golang中的工具,CGO_ENABLED=0 表示CGO禁用,交叉编译中不能使用CGO的打包为Linux
CGO_ENABLED=0 CC=x86_64-unknown-linux-gnu-gcc CXX=x86_64-unknown-linux-gnu-g++ GOOS=linux GOARCH=amd64 go build -o app .- 禁止交叉编译
CC=x86_64-unknown-linux-gnu-gcc CXX=x86_64-unknown-linux-gnu-g++ GOOS=linux GOARCH=amd64 go build -o app .打包为Windows
CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 go build .减少 构建到镜像的体积: 参考
FROM golang:1.21 AS builderMAINTAINER LookekeENV VERSION 1.0
WORKDIR /app
# 拷贝当前目录下可以执行文件COPY . .
RUN go env -w GOPROXY=https://proxy.golang.com.cn,direct# 里要加-tags netgo进行静态编译,否则由于alipne基础镜像缺少必要的动态库,可能会出现类似“no such file or directory"的报错# 或者直接禁用gcc,然后进行编译RUN go mod downloadRUN go env -w CGO_ENABLED=0 GOOS=linux GOARCH=amd64RUN go build -o myapp .
FROM alpine:latest
WORKDIR /app
# 从 builder 镜像中复制 Go 二进制文件到当前镜像中COPY --from=builder /app/myapp .
# 设置时区为上海RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeRUN echo 'Asia/Shanghai' >/etc/timezone
# 设置编码ENV LANG C.UTF-8
# 暴露端口EXPOSE 4000
# 定义容器启动时运行的命令ENTRYPOINT ["/app/myapp"]