快速初始化容器化Gin项目

简介: Gin是一个使用Go语言开发的Web框架,追求性能和效率。本文主要聊:如何使用Gin快速初始化一个项目,再将Gin项目打包成镜像,最后以容器化的方式运行。

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

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

  1. 创建项目目录:

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

mkdir my-gin-demo
cd my-gin-demo
  1. 初始化 Go 模块:

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

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

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

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

    在项目目录中创建一个 main.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 build -o server .
执行完毕后,会得到`server`可执行文件。可以直接运行此文件。也可以按照下面方式运行项目:
  1. 运行项目:

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

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

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

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

2、项目容器化

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

  1. 编写Dockerfile

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

# 使用官方的 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仓库里的项目组。

# 构建镜像
docker build -t harbor.dev.mangod.com/golang/my-gin-demo:0.0.1 .
  1. 推送镜像
# 推送镜像
docker push harbor.dev.mangod.com/golang/my-gin-demo:0.0.1
  1. 拉取镜像并且启动容器
# 拉取镜像并且启动容器
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、项目地址

https://github.com/yclxiao/my-gin-demo.git

4、总结

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

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

原文链接:https://mp.weixin.qq.com/s/TqKoMAAv2kOuQZH-MlWcuw

相关文章
|
6月前
|
IDE API 开发工具
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Counter容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Counter容器组件
151 1
|
6月前
|
IDE 开发工具 Windows
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RowSplit容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RowSplit容器组件
152 0
|
6月前
|
IDE 开发工具 Windows
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之ColumnSplit容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之ColumnSplit容器组件
87 0
|
6月前
|
IDE API 开发工具
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Column容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Column容器组件
128 0
|
6月前
|
XML Java 数据格式
Spring IoC容器初始化过程(xml形式)
Spring IoC容器初始化过程(xml形式)
79 0
|
7天前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
15天前
|
人工智能 Anolis 开发者
|
1月前
|
SQL Shell 数据库
在TDengine容器中创建初始化数据库的Shell命令实例
以上就是在Docker容器环境中部署并初始化TDengine数据库的全过程,希望对你有所帮助。
61 0
|
3月前
|
消息中间件 Kubernetes 数据库
在k8S中,初始化容器(init container)概念原理是什么?
在k8S中,初始化容器(init container)概念原理是什么?
|
5月前
|
Java Spring 容器
使用ContextLoaderListener初始化Spring容器
使用ContextLoaderListener初始化Spring容器