gin web框架docker多阶段构建实战

简介: 自从知道有多阶段构建以后,就实战了一把,顺便记录下来,供参考

准备项目

初始化一个项目

# mkdir demobuild
# cd demobuild/
# go mod init gindemo
go: creating new go.mod: module gindemo


编写代码gindemo.go

packagemainimport"github.com/gin-gonic/gin"funcmain() {
r :=gin.Default()
r.GET("/ping", func(c*gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
        })
    })
r.Run("0.0.0.0:9091") // listen and serve on 0.0.0.0:8080}

尝试运行

没运行成功,提示需要安装gin

#gorungindemo.gogindemo.go:3:8: norequiredmoduleprovidespackagegithub.com/gin-gonic/gin; toaddit:
gogetgithub.com/gin-gonic/gin


安装依赖

#gogetgithub.com/gin-gonic/gingoget: addedgithub.com/gin-gonic/ginv1.7.4

再次运行

#gorungindemo.go[GIN-debug] [WARNING] CreatinganEngineinstancewiththeLoggerandRecoverymiddlewarealreadyattached.[GIN-debug] [WARNING] Runningin"debug"mode.Switchto"release"modeinproduction.-usingenv:   exportGIN_MODE=release-usingcode:  gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET/ping-->main.main.func1 (3handlers)
[GIN-debug] ListeningandservingHTTPon0.0.0.0:9091

多阶段构建

编写Dockerfile

FROM golang:1.17 as build
WORKDIR /go/src/gindemo
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOPROXY=https://goproxy.cn,direct go build -ldflags="-w-s" -o gindemo .
FROM ubuntu:18.04
WORKDIR /usr/local/demo
COPY --from=build /go/src/gindemo/gindemo .
EXPOSE9091CMD ["./gindemo"]

查看目录结构

# tree.
|-- Dockerfile
|-- gindemo.go
|-- go.mod
`-- go.sum0 directories, 4 files

执行构建镜像

如果没有多阶段构建,你的操作可能如下:

  1. 在本地把go程序编译好,再通过docker的方式拷贝到容器镜像中,那么本地环境是存在差异的
  2. 在容器镜像中,先是安装go环境,然后配置go可执行文件环境变量,最后编译,强耦合在一起了
# docker build . -t morebuild:test

检测镜像是否构建成功

# docker images|grep morebuildmorebuild                                              test      4a0218330261   25 seconds ago      69.5MB

项目运行

运行容器

docker run -it-d-p9091:9091 morebuild:test

查看容器内部

45f54为容器运行部分ID

# docker exec -it 45f54 bashroot@45f541ce524f:/usr/local/demo# pwd/usr/local/demo
root@45f541ce524f:/usr/local/demo# lsgindemo
root@45f541ce524f:/usr/local/demo# ps -efUID        PID  PPID  C STIME TTY          TIME CMD
root         10006:13 pts/0    00:00:00 ./gindemo
root        110006:13 pts/1    00:00:00 bashroot        2311006:13 pts/1    00:00:00 ps-ef

curl访问

curl http://127.0.0.1:9091/ping

查看容器日志

# docker logs -f 45f54[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in"debug" mode. Switch to "release" mode in production.
- using env: exportGIN_MODE=release
- using code:  gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on 0.0.0.0:9091
[GIN] 2021/10/29 -06:23:43 | 200 |      58.471µs |      172.17.0.1 | GET      "/ping"


至此已经演示完毕了

目录
相关文章
|
5月前
|
Docker 容器 Perl
云效flow构建docker镜像更换apt源为阿里镜像源
在 Dockerfile 中添加命令以更换 Debian 源为阿里云镜像,加速容器内软件包下载。核心命令通过 `sed` 实现源地址替换,并更新 apt 软件源。其中 `cat` 命令用于验证替换是否成功,实际使用中可删除该行。
1047 32
|
4月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
3月前
|
运维 监控 数据可视化
容器化部署革命:Docker实战指南
容器化部署革命:Docker实战指南
|
2月前
|
供应链 测试技术 开发者
用 Docker 轻松部署 ERPNext 15:多场景实战指南
ERPNext 15 是一款功能全面的开源企业资源规划系统,结合 Docker 容器化部署,具备高效、灵活、低成本等优势。适用于小微企业数字化起步、多分支机构协同办公、开发者测试环境搭建、短期项目管理及企业内部培训等多种场景。模块化设计支持按需扩展,满足不同规模企业需求,是实现高效企业管理的理想选择。
用 Docker 轻松部署 ERPNext 15:多场景实战指南
|
5月前
|
监控 Java Go
无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测
本文将介绍一种基于 Docker 多阶段构建的无侵入 Golang 应用观测方法,通过此方法用户无需对 Golang 应用源代码或者编译指令做任何改造,即可零成本为 Golang 应用注入可观测能力。
299 85
|
3月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
3月前
|
安全 Java Docker
Docker 部署 Java 应用实战指南与长尾优化方案
本文详细介绍了Docker容器化部署Java应用的最佳实践。首先阐述了采用多阶段构建和精简JRE的镜像优化技术,可将镜像体积减少60%。其次讲解了资源配置、健康检查、启动优化等容器化关键配置,并演示了Spring Boot微服务的多模块构建与Docker Compose编排方案。最后深入探讨了Kubernetes生产部署、监控日志集成、灰度发布策略以及性能调优和安全加固措施,为Java应用的容器化部署提供了完整的解决方案指南。文章还包含大量可落地的代码示例,涵盖从基础到高级的生产环境实践。
136 3
|
3月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。