Golang项目通用Dockerfile编写

作者: 不屈真实 | 来源:发表于2020-09-07 10:34 被阅读0次

    golang go path和go mod的区别

    go path 所有运行的go文件都要放在gopath文件下, 因为下载下来的包都在这里目录下可以引用
    go path顾名思义,需要一个环境变量 GOPATH
    GOPATH/src 存放项目源代码GOPATH/bin 存放项目可执行文件
    go mod 他有一套引用机制 无论你的go文件在哪里 都可以引用包

    go path方式

    #编译镜像
    FROM  golang:1.13.5-alpine3.10  as builder
    MAINTAINER  TigerwolfC@***.com.cn
    WORKDIR  /go/src
    COPY  .  .
    RUN  go  build  -o  myapp
     
    #产物运行镜像
    FROM  alpine:latest
    WORKDIR  /root
    COPY  --from=builder /go/src/myapp  .
    EXPOSE 8088
    CMD  [“./myapp”]
    

    go mod方式

    FROM golang:1.13.5-alpine3.10 as builder
    #ENV GOPROXY https://goproxy.io
    ENV GO111MODULE on
    WORKDIR /go/cache
    ADD go.mod .
    ADD go.sum .
    RUN go mod download
    WORKDIR /go/release
    ADD . .
    RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o myapp main.go
    
    FROM scratch as prod
    COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    COPY --from=builder /go/release/gin_demo /
    COPY --from=builder /go/release/conf ./conf
    CMD ["/myapp"]
    

    逐行拆解

    首先,这个dockerfile分为builder和final两部分。

    builder选择了golang:1.13.5-alpine3.10作为编译的基础镜像,相比于golang:1.13, 一方面是因为它体积更小,另一方面是我发现golang:1.13的编译结果,在alpine:3.10中会报not found的错误,虽说有人提供了其它的解决方案,但是能直接避免,为啥不避免呢。

    WORKDIR  /go/src
    ADD . .
    

    指定工作目录,复制代码
    再下面的四行,

    ENV GOPROXY https://goproxy.cn
    ENV GO111MODULE on
    WORKDIR /go/cache
    ADD go.mod .
    ADD go.sum .
    RUN go mod download
    复制代码
    

    是配置了国内的代理,安装依赖包了。这里用go mod download的好处是下次构建镜像文件时,当go.modgo.sum没有改变时,它是有缓存的,可以避免重复下载依赖包,加快构建。

    builder的最后,就是把当前目录的文件拷过去,编译代码了。

    RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o myapp main.go
    
    

    final选择了alpine:3.10,一方面是体积小,只有5m;另一方面也是和构建镜像的alpine版本保持一致。

    接下来几行没啥说的,就是把构建结果、配置文件(有的话)和用户的相关文件拷过去。

    最后,设置一个CMD,完事!

    如果你程序的启动过程比较复杂,或者是要在启动时根据环境变量的值做不同的操作,那还是写个shell文件吧

    相关文章

      网友评论

        本文标题:Golang项目通用Dockerfile编写

        本文链接:https://www.haomeiwen.com/subject/piekektx.html