最简单的Go Dockerfile编写姿势,没有之一!

简介: 最简单的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 builder
  LABEL stage=gobuilder
  ENV CGO_ENABLED 0
  ENV GOOS linux
  ENV GOPROXY https://goproxy.cn,direct
  WORKDIR /build/zero
  ADD go.mod .
  ADD go.sum .
  RUN go mod download
  COPY . .
  COPY service/hello/etc /app/etc
  RUN go build -ldflags="-s -w" -o /app/hello service/hello/hello.go
FROM alpine
RUN apk update --no-cache
RUN apk add --no-cache ca-certificates
RUN apk add --no-cache tzdata
ENV TZ Asia/Shanghai
WORKDIR /app
COPY --from=builder /app/hello /app/hello
COPY --from=builder /app/etc /app/etc
CMD ["./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 🤝

5. 项目地址

https://github.com/tal-tech/go-zero

相关文章
|
6月前
|
缓存 Ubuntu Linux
Docker Buildx 简介与安装指南
Docker Buildx 是一个强大的工具,提供了多架构构建、并行构建和高级缓存管理等功能。通过正确安装和配置 Buildx,可以显著提升 Docker 镜像的构建效率和灵活性。希望本文能帮助你更好地理解和使用 Docker Buildx,以提高开发和部署的效率。
3267 16
|
Kubernetes 数据安全/隐私保护 Docker
k8s使用私有镜像仓库的访问凭据配置
k8s使用私有镜像仓库的访问凭据配置
674 1
|
存储 弹性计算 中间件
|
存储 Kubernetes Cloud Native
部署Kubernetes客户端和Docker私有仓库的步骤
这个指南涵盖了部署Kubernetes客户端和配置Docker私有仓库的基本步骤,是基于最新的实践和工具。根据具体的需求和环境,还可能需要额外的配置和调整。
291 1
|
Web App开发 JavaScript 前端开发
react18【系列实用教程】搭建开发环境(2024版)Vite+React (官方推荐)(含@配置,react-developer-tools 和 Redux DevTools 下载安装)
react18【系列实用教程】搭建开发环境(2024版)Vite+React (官方推荐)(含@配置,react-developer-tools 和 Redux DevTools 下载安装)
907 1
|
存储 关系型数据库 MySQL
|
关系型数据库 MySQL Serverless
【随手记】MySQL窗口函数计算累加和
【随手记】MySQL窗口函数计算累加和
857 0
|
算法 计算机视觉
指针式仪表的表盘自动识别算法
指针式仪表的表盘自动识别算法
2227 0
指针式仪表的表盘自动识别算法
|
tengine Linux 应用服务中间件
基于 Alpine 环境源码构建 alibaba-tengine(阿里巴巴)的 Docker 镜像
当前 alibaba-tengine 发布版本为 v3.0.0,github 源码地址:https://github.com/alibaba/tengine/releases/tag/3.0.0
1055 2
|
存储 JavaScript 前端开发
Vue 3和Element组件库的分页功能实现
随着Web应用程序的发展,数据量的增加和复杂性的提高,分页功能成为了用户友好和高效展示数据的重要手段。Vue 3是由Evan You于2020年推出的JavaScript框架,具有响应式和组件化开发的特点。Element是一套基于Vue.js的UI组件库,提供了大量易于使用和高度定制化的组件。本论文将介绍如何利用Vue 3和Element组件库实现优秀的分页功能,提升用户体验。
1367 3