今日のクラウド コンピューティング時代では、コンテナ化はアプリケーションの展開および管理方法として非常に一般的になっています。 Gin フレームワークは GO 言語の軽量 Web フレームワークであり、高パフォーマンス、低メモリ消費、メンテナンスの容易さなどの特徴を備えているため、GO 言語を使用した Web 開発で推奨されるフレームワークの 1 つとなっています。この記事では、Gin フレームワークを使用してコンテナ化されたデプロイメントおよび管理機能を実装する方法を紹介します。一緒に学びましょう。
1. Docker の概要
Docker は現在最も人気のあるコンテナ テクノロジであり、アプリケーションとその依存関係をコンテナにパッケージ化して、どこでも簡単に実行できるようにします。 Docker はオープンソースであり、業界の事実上の標準コンテナ ソリューションとなっています。
2. Jin フレームワークの Docker パッケージ化の例
以下は、Docker を使用して Jin フレームワークをパッケージ化する簡単な例です:
mkdir docker-gin && cd docker-gin
#FROM golang:1.13
WORKDIR /go/src/app
RUN go get github.com/gin-gonic/gin
ADD ./go/src/app
CMD ["go", "run", "main.go"]
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/", func (c *gin.Context) {
c.JSON(200, gin.H{ "message": "Hello World", })
})
r .Run (":8080")
}
docker build -t docker-gin .
docker run -p 8080 :8080 docker-gin
これで、http://localhost:8080 を通じてアプリケーションにアクセスできるようになります。
しかしその後、展開と管理の目的を達成するためのロジックをさらに記述します。
3. コンテナ化のデプロイと管理
上記の例に基づいて、コンテナ化のデプロイと管理機能を実装するために次の 2 つの API を追加します:
file, header, err := c.Request.FormFile("file")
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return}
defer file.Close()
ファイル名に保存します := "deploy/" header.Filename
out, err := os.Create(filename)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return}
defer out.Close()
_, err = io. Copy(out, file)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return}// アップロードされたファイルを解凍します
zipReader, err := zip.OpenReader(filename )
エラーの場合 != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return}
_、zipFile := range zipReader.File {
srcObj, err := zipFile.Open() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } defer srcObj.Close() dstPath := "deploy/" + zipFile.Name if !strings.HasPrefix(dstPath, "deploy/") { c.JSON(http.StatusBadRequest, gin.H{"error": "invalid file"}) return } if zipFile.FileInfo().IsDir() { os.MkdirAll(dstPath, zipFile.Mode()) } else { dstObj, err := os.Create(dstPath) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } defer dstObj.Close() _, err = io.Copy(dstObj, srcObj) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } }
##// 新しいイメージをビルドし、Kubernetes デプロイメントを呼び出します。
cmd := exec.Command("bash", "-c", "docker build -t docker-gin-" strconv.FormatInt(time. Now() .Unix(), 10) " . && kubectl apply -fdeploy.yml") cmd.Dir = "./deploy"
out, err = cmd.CombinedOutput()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
}
# #DELETE / stop: 現在のコンテナを閉じます
// 現在のコンテナを取得しますID
ホスト名 , エラー := os.Hostname() if エラー != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
// 現在のコンテナを閉じます
cmd = exec.Command("bash", "-c", "kubectl)ポッドの削除 " podName)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
上記 2 つの API の実装は、コンテナ管理用の Kubernetes に基づいています。Kubernetes の使用については、ここでは詳しく紹介しません。
以上がGin フレームワークを使用してコンテナ化されたデプロイメントおよび管理機能を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。