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"


至此已经演示完毕了

目录
相关文章
|
1天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
10 2
实战~如何组织一个多容器项目docker-compose
|
1天前
|
安全 应用服务中间件 网络安全
实战经验分享:利用免费SSL证书构建安全可靠的Web应用
本文分享了利用免费SSL证书构建安全Web应用的实战经验,涵盖选择合适的证书颁发机构、申请与获取证书、配置Web服务器、优化安全性及实际案例。帮助开发者提升应用安全性,增强用户信任。
|
17天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
36 9
|
17天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
50 7
|
17天前
|
监控 前端开发 JavaScript
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
27 6
|
19天前
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
如何构建一个优秀的高性能、高可靠的应用系统对每一个开发者至关重要
23 2
|
25天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
23天前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
32 1
|
25天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
25天前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
66 1