快速初始化容器化Gin項目
Gin是一個使用Go語言開發(fā)的Web框架,追求性能和效率。
1、使用Gin快速初始化項目
(1) 創(chuàng)建項目目錄:在命令行中創(chuàng)建一個新目錄,用于存放項目文件。然后進入該目錄:
mkdir my-gin-demo
cd my-gin-demo
(2) 初始化 Go 模塊:在項目目錄中運行以下命令以初始化 Go 模塊。這會創(chuàng)建一個 go.mod 文件,用于管理項目依賴。
go mod init github.com/your-username/my-gin-demo
(3) 安裝 Gin 框架:下載并安裝 Gin 框架。這個命令會把 Gin 框架作為項目依賴下載到本地。
go get -u github.com/gin-gonic/gin
(4) 創(chuàng)建并編輯 main.go 文件:在項目目錄中創(chuàng)建一個 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("中間件開始執(zhí)行了")
c.Set("request", "中間件")
// 執(zhí)行路由對應的函數(shù)
//c.Next()
status := c.Writer.Status()
fmt.Println("中間件執(zhí)行完畢", 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"`
}
(5) 構建項目:在項目目錄my-gin-demo下執(zhí)行命令編譯項目:
go build -o server .
執(zhí)行完畢后,會得到`server`可執(zhí)行文件。可以直接運行此文件。也可以按照下面方式運行項目。
(6) 運行項目:在命令行中執(zhí)行以下命令來運行你的項目:
go run main.go
這將啟動 Gin 服務器,默認監(jiān)聽 `8083` 端口。
現(xiàn)在,已經初始化了一個簡單的使用 Gin 框架的 Golang 項目。你可以根據(jù)需求進一步開發(fā)和擴展這個項目。
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
(2) 構建鏡像:構建鏡像,這里的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 .
(3) 推送鏡像
# 推送鏡像
docker push harbor.dev.mangod.com/golang/my-gin-demo:0.0.1
(4) 拉取鏡像并且啟動容器
# 拉取鏡像并且啟動容器
docker run -d -p 8083:8083 harbor.dev.mangod.com/golang/my-gin-demo:0.0.1
(5) 查看日志
docker logs -f 容器ID
至此,Gin項目已經打包成Docker鏡像,并且以容器化的方式運行了。
3、項目地址
https://github.com/yclxiao/my-gin-demo.git
4、總結
本文主要聊了,如何使用Gin快速初始化一個項目,再將Gin項目打包成鏡像,最后以容器化的方式運行。