快速初始化容器化Gin项目

Gin是一个使用Go语言开发的Web框架,追求性能和效率。

1、使用Gin快速初始化项目

  1. 创建项目目录:

    在命令行中创建一个新目录,用于存放项目文件。然后进入该目录:

perl 复制代码
mkdir my-gin-demo
cd my-gin-demo
  1. 初始化 Go 模块:

    在项目目录中运行以下命令以初始化 Go 模块。这会创建一个 go.mod 文件,用于管理项目依赖。

bash 复制代码
go mod init github.com/your-username/my-gin-demo
  1. 安装 Gin 框架:

    下载并安装 Gin 框架。这个命令会把 Gin 框架作为项目依赖下载到本地。

arduino 复制代码
go get -u github.com/gin-gonic/gin
  1. 创建并编辑 main.go 文件:

    在项目目录中创建一个 main.go 文件,并添加以下示例代码:

go 复制代码
package main

import (
  "fmt"
  "github.com/gin-gonic/gin"
  "net/http"
  "time"
)

func main() {
  r := gin.Default()

  r.Use(MiddleWare())

  v2 := r.Group("v2")
  {
    v2.POST("loginJSON", loginJSON)
  }
  r.Run(":8083")
}

func MiddleWare() gin.HandlerFunc {
  return func(c *gin.Context) {
    t := time.Now()
    fmt.Println("中间件开始执行了")
    c.Set("request", "中间件")
    // 执行路由对应的函数
    //c.Next()
    status := c.Writer.Status()
    fmt.Println("中间件执行完毕", status)
    t2 := time.Since(t)
    fmt.Println("time:", t2)
  }
}

func loginJSON(c *gin.Context) {
  var loginInfo Login
  if err := c.ShouldBindJSON(&loginInfo); err != nil {
    c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
    return
  }
  if loginInfo.User != "root" || loginInfo.Password != "admin" {
    c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
    return
  }
  c.JSON(http.StatusOK, gin.H{"status": "200"})
}

type Login struct {
  User     string `json:"username" binding:"required"`
  Password string `json:"password" binding:"required"`
}
  1. 构建项目:

    在项目目录my-gin-demo下执行命令编译项目:

go 复制代码
go build -o server .
go 复制代码
执行完毕后,会得到`server`可执行文件。可以直接运行此文件。也可以按照下面方式运行项目:
  1. 运行项目:

    在命令行中执行以下命令来运行你的项目:

go 复制代码
go run main.go
bash 复制代码
这将启动 Gin 服务器,默认监听 `8083` 端口。

至此,服务已启动,你可以调用`http://localhost:8083/v2/loginJSON`来调用接口,查看返回。

现在,已经初始化了一个简单的使用 Gin 框架的 Golang 项目。你可以根据需求进一步开发和扩展这个项目。

2、项目容器化

项目已经初始化完毕,接下来将Gin项目打包成Docker镜像,然后以容器化的方式运行。

  1. 编写Dockerfile

    在项目根目录下,增加Dockerfile,内容如下:

ini 复制代码
# 使用官方的 Golang 镜像作为基础镜像
FROM golang:1.19
# 设置工作目录
WORKDIR /data/golang/my-gin-demo
# 将本地文件复制到容器中
COPY . .
# 使用 Go Modules 下载依赖  编译项目
RUN go env -w GO111MODULE=on \
   && go env -w GOPROXY=https://goproxy.cn,direct \
   && go env -w CGO_ENABLED=0 \
   && go mod download \
   && go mod tidy \
   && go build -o server .

# 最终镜像使用轻量的 alpine 镜像
FROM alpine:latest
# 添加作者
LABEL MAINTAINER="baily@gmail.com"
# 设置工作目录
WORKDIR /data/golang/my-gin-demo
# 将二进制文件从前一个镜像中复制到这里
COPY --from=0 /data/golang/my-gin-demo/server ./
# 暴露端口
EXPOSE 8083
# 启动应用程序
ENTRYPOINT ./server
  1. 构建镜像

    构建镜像,这里的harbor.dev.mangod.com/golang/my-gin-demo是镜像名称,harbor.dev.mangod.com是自定义的harbor仓库地址,golang是harbor仓库里的项目组。

bash 复制代码
# 构建镜像
docker build -t harbor.dev.mangod.com/golang/my-gin-demo:0.0.1 .
  1. 推送镜像
perl 复制代码
# 推送镜像
docker push harbor.dev.mangod.com/golang/my-gin-demo:0.0.1
  1. 拉取镜像并且启动容器
bash 复制代码
# 拉取镜像并且启动容器
docker run -d -p 8083:8083 harbor.dev.mangod.com/golang/my-gin-demo:0.0.1
  1. 查看日志

    docker logs -f 容器ID

至此,Gin项目已经打包成Docker镜像,并且以容器化的方式运行了。

3、项目地址

github.com/yclxiao/my-...

4、总结

本文主要聊:如何使用Gin快速初始化一个项目,再将Gin项目打包成镜像,最后以容器化的方式运行。

本篇完结!感谢你的阅读,欢迎点赞 关注 收藏 私信!!!

原文链接: mp.weixin.qq.com/s/TqKoMAAv2...

相关推荐
E***U9454 分钟前
从新手到入门:如何判断自己是否真的学会了 Spring Boot
数据库·spring boot·后端
招风的黑耳19 分钟前
智慧养老项目:当SpringBoot遇到硬件,如何优雅地处理异常与状态管理?
java·spring boot·后端
回家路上绕了弯26 分钟前
分布式锁原理深度解析:从理论到实践
分布式·后端
磊磊磊磊磊42 分钟前
用AI做了个排版工具,分享一下如何高效省钱地用AI!
前端·后端·react.js
hgz07101 小时前
Spring Boot Starter机制
java·spring boot·后端
daxiang120922051 小时前
Spring boot服务启动报错 java.lang.StackOverflowError 原因分析
java·spring boot·后端
我家领养了个白胖胖1 小时前
极简集成大模型!Spring AI Alibaba ChatClient 快速上手指南
java·后端·ai编程
一代明君Kevin学长1 小时前
快速自定义一个带进度监控的文件资源类
java·前端·后端·python·文件上传·文件服务·文件流
aiopencode1 小时前
上架 iOS 应用到底在做什么?从准备工作到上架的流程
后端
哈哈老师啊2 小时前
Springboot简单二手车网站qs5ed(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端