当前位置: 首页 > news >正文

最简单的Go Dockerfile编写姿势

1. Dockerfile一些额外注意点

  • 选择最简单的镜像

    比如alpine,整个镜像5M左右

  • 设置镜像时区

    RUN apk add --no-cache tzdata
    ENV TZ Asia/Shanghai
    

2. 多阶段构建

  • 第一阶段构建否则构建出可执行文件,确保构建过程独立于宿主机
  • 第二阶段将第一阶段的输出作为输入,构建出最终的极简镜像

3. 完整Dockerfile编写过程

  • 首先安装 goctl 工具

    GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/tal-tech/go-zero/tools/goctl

  • greet 项目下创建一个 hello 服务

    goctl api new hello

    文件结构如下:

    greet
    ├── go.mod
    ├── go.sum
    └── service└── hello├── Dockerfile├── etc│   └── hello-api.yaml├── hello.api├── hello.go└── internal├── config│   └── config.go├── handler│   ├── hellohandler.go│   └── routes.go├── logic│   └── hellologic.go├── svc│   └── servicecontext.go└── types└── types.go
    
  • hello 目录下一键生成 Dockerfile

    goctl docker -go greet.go

    Dockerfile 内容如下:

      FROM golang:alpine AS builderLABEL stage=gobuilderENV CGO_ENABLED 0ENV GOOS linuxENV GOPROXY https://goproxy.cn,directWORKDIR /build/zeroADD go.mod .ADD go.sum .RUN go mod downloadCOPY . .COPY service/hello/etc /app/etcRUN go build -ldflags="-s -w" -o /app/hello service/hello/hello.goFROM alpineRUN apk update --no-cache && apk add --no-cache ca-certificates tzdataENV TZ Asia/ShanghaiWORKDIR /appCOPY --from=builder /app/hello /app/helloCOPY --from=builder /app/etc /app/etcCMD ["./hello", "-f", "etc/hello-api.yaml"]
    
  • greet 目录下 build 镜像

    docker build -t hello:v1 -f service/hello/Dockerfile .

  • 查看镜像

    hello v1 5455f2eaea6b 7 minutes ago 18.1MB

    可以看出镜像大小约为18M。

  • 启动服务

    docker run --rm -it -p 8888:8888 hello:v1

  • 测试服务

    $ curl -i http://localhost:8888/from/you
    HTTP/1.1 200 OK
    Content-Type: application/json
    Date: Thu, 10 Dec 2020 06:03:02 GMT
    Content-Length: 14{"message":""}
    

4. 总结

goctl 工具极大简化了 Dockerfile 文件的编写,提供了开箱即用的最佳实践,并且支持了模板自定义。

如果觉得工具有帮助,欢迎 star 🤝

本文转自 https://learnku.com/articles/52449,如有侵权,请联系删除。


http://www.taodudu.cc/news/show-6102223.html

相关文章:

  • 运行环信Android Demo常见问题以及语音消息播放声音小的解决方法
  • win10安装并配置node.js
  • Springboot文件上传报错:failed to convert java.lang.String to org.springframework.util.unit.DataSize
  • 腾讯云8核 16G 18M配置服务器评测
  • 腾讯云轻量8核16G18M服务器带宽CPU流量性能测评
  • 8 年 Java 开发含泪刷题,架构岗现在好难进,有点崩溃
  • 腾讯云服务器8核16G18M配置测评
  • 成功将TTF字体从18M裁剪到1.8M
  • 腾讯云:轻量服务器8核16G18M配置性能及限制条件说明
  • 腾讯云轻量服务器性能评测:配置 8核 16G 18M 带宽
  • 腾讯云服务器性能评测:8核 16G 18M 配置
  • 腾讯云8核16G18M轻量服务器CPU带宽流量性能测评
  • 腾讯云轻量8核16G服务器18M带宽CPU流量性能测评
  • 腾讯云服务器评测:配置 8核 16G 18M 带宽
  • 腾讯云 8核 16G 18M 的轻量应用服务器评测
  • 工具人实锤!我用java中的文件IO流帮同事处理了足足18M的文本数据,泪目(一)
  • 18M 超轻量图像识别系统,商品、车辆、人脸识别一网打尽!
  • 《跨社交网络的隐私图片分享框架》EI
  • 2023年东南亚用户比较喜欢的社交媒体平台有哪些?
  • 短视频平台类的社交媒体市场现状与发展前景到底如何?
  • 推荐系统8——利用社交网络数据推荐
  • 海外社交媒体平台如何选择
  • 去中心化社交网络协议除了Nostr还有哪些?
  • 各种社交网站
  • 定位推送分享轻社交网络平台《足迹》——数据库设计
  • 2023年社交平台研究报告
  • 利用社交网络数据进行推荐
  • SocialFi 何以成就 Web3 去中心化社交未来
  • 细看10个不同类型的社交平台
  • 7个国外社交网络用户数据情况