Geek

博客园 首页 新随笔 联系 订阅 管理

docker 分段构建

参考教程

# Go语言环境基础镜像
FROM golang:latest

# 将源码拷贝到镜像中
COPY server.go /go/release/

# 指定工作目录
WORKDIR /go/release

# 编译镜像时,运行 go build 编译生成 app 可执行的二进制文件
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOARM=6 go build -ldflags '-w -s' -o app server.go

# 指定容器运行时入口程序 app
ENTRYPOINT ["/go/release/app"]


分段构建

# 构建:使用golang:1.13版本
FROM golang:1.13 as build

# 容器环境变量添加,会覆盖默认的变量值
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct

# 设置工作区
WORKDIR /go/release

# 把全部文件添加到/go/release目录
ADD . .

# 编译:把cmd/main.go编译成可执行的二进制文件,命名为app
RUN GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -ldflags="-s -w" -installsuffix cgo -o app cmd/main.go

# 运行:使用scratch作为基础镜像
FROM scratch as prod

# 在build阶段复制时区到
COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 在build阶段复制可执行的go二进制文件app
COPY --from=build /go/release/app /
# 在build阶段复制配置文件
COPY --from=build /go/release/config ./config

# 启动服务
CMD ["/app"]

posted on 2022-06-21 00:38  .geek  阅读(182)  评论(0编辑  收藏  举报