Table des matières
Définir le répertoire de travail
Installer le framework Gin
Ajouter tous les fichiers dans le répertoire de travail
Exécuter la commande
Maison développement back-end Golang Utiliser le framework Gin pour implémenter des fonctions de déploiement et de gestion conteneurisées

Utiliser le framework Gin pour implémenter des fonctions de déploiement et de gestion conteneurisées

Jun 22, 2023 pm 06:58 PM
容器化 部署 gin框架

À l’ère actuelle du cloud computing, la conteneurisation est devenue une méthode très populaire de déploiement et de gestion d’applications. Le framework Gin est un framework Web léger du langage GO. Il présente les caractéristiques de hautes performances, de faible consommation de mémoire et de maintenance facile. Il est donc devenu l'un des frameworks préférés pour le développement Web utilisant le langage GO. Cet article expliquera comment utiliser le framework Gin pour implémenter des fonctions de déploiement et de gestion conteneurisées. Apprenons-en ensemble.

1. Introduction à Docker

Docker est actuellement la technologie de conteneur la plus populaire, qui peut regrouper des applications et leurs dépendances dans des conteneurs afin qu'elles puissent facilement s'exécuter n'importe où. Docker est open source et est devenu de facto la solution de conteneur standard du secteur.

2. Exemple de packaging Docker du framework Gin

Ce qui suit est un exemple simple d'utilisation de Docker pour empaqueter le framework Gin :

  1. Créez et entrez le répertoire d'ingénierie du projet :

mkdir docker-gin && cd docker-gin

  1. Créer un fichier Docker :

FROM golang:1.13

Définir le répertoire de travail

WORKDIR /go/src/app

Installer le framework Gin

RUN aller chercher github.com/gin-gonic/gin

Ajouter tous les fichiers dans le répertoire de travail

ADD ./go/src/app

Exécuter la commande

CMD ["go", "run", "main.go"]

  1. Créez un fichier 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",
})
Copier après la connexion

})
r.Run(":8080")
}

  1. Construisez l'image et exécutez le conteneur :

docker build -t docker-gin .
docker run -p 8080:8080 docker-gin

Vous pouvez le faire maintenant Accédez à notre application via http://localhost:8080.

Mais après cela, nous écrivons davantage une logique pour atteindre nos objectifs de déploiement et de gestion.

3. Déploiement et gestion de la conteneurisation

Sur la base de l'exemple ci-dessus, nous ajoutons les deux API suivantes pour implémenter les fonctions de déploiement et de gestion de la conteneurisation :

  1. POST /deploy : implémentez la fonction de déploiement de la conteneurisation

en téléchargeant un fichier zip, décompressez et créez une nouvelle image, et enfin déployez ce nouveau conteneur via la planification Kubernetes.

Ce qui suit est une implémentation simplifiée :

func handleDeploy(c *gin.Context) {
file, header, err := c.Request.FormFile("file")
if err != nil {

c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
Copier après la connexion

}
defer file.Close()

// Enregistrez le fichier téléchargé dans le
nom de fichier local := "deploy/" + header.Filename
out, err := os.Create(filename)
if err != nil {

c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}
reporter out.Close()
_, err = io.Copy(out, file)
if err != nil {

c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}

// Décompresser le fichier téléchargé
zipReader, err := zip. OpenReader(filename)
if err != nil {

c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}
reporter zipReader.Close()
for _, 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
  }
}
Copier après la connexion

}

// Créer une nouvelle image et appeler le déploiement de Kubernetes
cmd: = exec.Command("bash", "-c", "docker build -t docker-gin-"+strconv.FormatInt(time.Now().Unix(), 10)+" . && kubectl apply -f déployer .yml")
cmd.Dir = "./deploy"
out, err = cmd.CombinedOutput()
if err != nil {

c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}
c.JSON(http.StatusOK, gin.H {"message ": string(out)})
}

  1. DELETE /stop : ferme le conteneur actuel

Ce qui suit est une implémentation simplifiée :

func handleStop(c *gin.Context) {
// Get l'ID du conteneur actuel
nom d'hôte, err := os.Hostname()
if err != nil {

c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}
cmd := exec.Command("bash", "-c", "kubectl get pod -o jsonpath ='{.items [0].metadata.name}'")
cmdOutput, err := cmd.Output()
if err != nil {

c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}
podName := strings.TrimSpace(string(cmdOutput) )

// Fermez le conteneur actuel
cmd = exec.Command("bash", "-c", "kubectl delete pod "+podName)
cmdOutput, err = cmd.CombinedOutput()
if err != nil {

c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}
c .JSON(http.StatusOK, gin.H{"message": string(cmdOutput)})
}

L'implémentation des deux API ci-dessus est basée sur Kubernetes pour la gestion des conteneurs. ne sera pas présenté en détail ici.

4. Résumé

Cet article explique comment utiliser Docker pour encapsuler le framework Gin et implémenter des fonctions de déploiement et de gestion conteneurisées. En pratique, nous pouvons mettre en œuvre des implémentations plus détaillées basées sur les besoins réels. Voici juste un exemple simple. En bref, l'utilisation de la technologie de conteneurisation pour le déploiement et la gestion des applications peut améliorer l'efficacité du développement, éviter les problèmes de configuration de l'environnement et réduire les difficultés d'exploitation et de maintenance.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment déployer une interface web fiable sur un serveur Linux ? Comment déployer une interface web fiable sur un serveur Linux ? Sep 09, 2023 pm 03:27 PM

Comment déployer une interface web fiable sur un serveur Linux ? Introduction : À l'ère actuelle d'explosion de l'information, les applications Web sont devenues l'un des principaux moyens permettant aux individus d'obtenir des informations et de communiquer. Afin de garantir la confidentialité des utilisateurs et la fiabilité des informations, nous devons déployer une interface Web fiable sur le serveur Linux. Cet article explique comment déployer une interface Web dans un environnement Linux et fournit des exemples de code pertinents. 1. Installez et configurez le serveur Linux. Tout d'abord, nous devons préparer un Li.

Partage d'expérience en développement C# : microservices et pratique de conteneurisation Partage d'expérience en développement C# : microservices et pratique de conteneurisation Nov 22, 2023 am 08:44 AM

Partage d'expérience en développement C# : pratiques de microservices et de conteneurisation Avec l'essor du cloud computing et de l'architecture distribuée, les microservices et la conteneurisation sont devenus deux sujets brûlants dans le développement de logiciels modernes. L'architecture de microservices peut aider les développeurs à mieux diviser les fonctions du système et à améliorer l'évolutivité et la maintenabilité, tandis que la technologie de conteneurisation peut permettre un déploiement rapide et une expansion élastique. Cet article s'adressera aux développeurs C# et partagera quelques expériences et techniques dans la pratique des microservices et de la conteneurisation. 1. Présentation de l'architecture des microservices L'architecture des microservices est une méthode qui divise une application en une série de petits départements indépendants.

La combinaison parfaite de Nginx Proxy Manager et Docker : créez rapidement des applications conteneurisées La combinaison parfaite de Nginx Proxy Manager et Docker : créez rapidement des applications conteneurisées Sep 26, 2023 am 10:01 AM

La combinaison parfaite de NginxProxyManager et Docker : créez rapidement des applications conteneurisées. Avec le développement rapide de la technologie de cloud computing et de conteneurisation, de plus en plus de développeurs et d'entreprises déploient des applications dans des conteneurs. En tant que l'une des plates-formes de conteneurisation les plus populaires actuellement, Docker offre une commodité pour le déploiement, la gestion et l'expansion des applications. NginxProxyManager, en tant qu'outil de proxy inverse basé sur Nginx, peut nous aider à implémenter une application grâce à une configuration simple.

Comment résoudre le problème d'inaccessibilité après le déploiement du package de guerre par Tomcat Comment résoudre le problème d'inaccessibilité après le déploiement du package de guerre par Tomcat Jan 13, 2024 pm 12:07 PM

Comment résoudre le problème selon lequel Tomcat ne parvient pas à accéder au package war après son déploiement nécessite des exemples de code spécifiques. En tant que serveur Web Java largement utilisé, Tomcat permet aux développeurs de regrouper leurs propres applications Web développées dans des fichiers war pour le déploiement. Cependant, nous pouvons parfois rencontrer le problème de l'impossibilité d'accéder au package war après son déploiement. Cela peut être dû à une configuration incorrecte ou à d'autres raisons. Dans cet article, nous fournirons quelques exemples de code concrets qui résolvent ce dilemme. 1. Vérifiez le service Tomcat

Yolov10 : explication détaillée, déploiement et application en un seul endroit ! Yolov10 : explication détaillée, déploiement et application en un seul endroit ! Jun 07, 2024 pm 12:05 PM

1. Introduction Au cours des dernières années, les YOLO sont devenus le paradigme dominant dans le domaine de la détection d'objets en temps réel en raison de leur équilibre efficace entre le coût de calcul et les performances de détection. Les chercheurs ont exploré la conception architecturale de YOLO, les objectifs d'optimisation, les stratégies d'expansion des données, etc., et ont réalisé des progrès significatifs. Dans le même temps, le recours à la suppression non maximale (NMS) pour le post-traitement entrave le déploiement de bout en bout de YOLO et affecte négativement la latence d'inférence. Dans les YOLO, la conception de divers composants manque d’une inspection complète et approfondie, ce qui entraîne une redondance informatique importante et limite les capacités du modèle. Il offre une efficacité sous-optimale et un potentiel d’amélioration des performances relativement important. Dans ce travail, l'objectif est d'améliorer encore les limites d'efficacité des performances de YOLO à la fois en post-traitement et en architecture de modèle. à cette fin

Guide de déploiement de Gunicorn pour les applications Flask Guide de déploiement de Gunicorn pour les applications Flask Jan 17, 2024 am 08:13 AM

Comment déployer l'application Flask à l'aide de Gunicorn ? Flask est un framework Web Python léger largement utilisé pour développer divers types d'applications Web. Gunicorn (GreenUnicorn) est un serveur HTTP basé sur Python utilisé pour exécuter des applications WSGI (WebServerGatewayInterface). Cet article expliquera comment utiliser Gunicorn pour déployer des applications Flask, avec

Comment optimiser les performances des fonctions Java grâce à la conteneurisation ? Comment optimiser les performances des fonctions Java grâce à la conteneurisation ? Apr 29, 2024 pm 03:09 PM

La conteneurisation améliore les performances des fonctions Java des manières suivantes : Isolation des ressources : garantit un environnement informatique isolé et évite les conflits de ressources. Léger - consomme moins de ressources système et améliore les performances d'exécution. Démarrage rapide - réduit les délais d'exécution des fonctions. Cohérence : dissociez les applications et l'infrastructure pour garantir un comportement cohérent dans tous les environnements.

Meilleures pratiques et solutions aux problèmes courants pour le déploiement de projets Web sur Tomcat Meilleures pratiques et solutions aux problèmes courants pour le déploiement de projets Web sur Tomcat Dec 29, 2023 am 08:21 AM

Meilleures pratiques pour le déploiement de projets Web avec Tomcat et solutions aux problèmes courants Introduction : Tomcat, en tant que serveur d'applications Java léger, a été largement utilisé dans le développement d'applications Web. Cet article présentera les meilleures pratiques et les méthodes courantes de résolution de problèmes pour le déploiement de projets Web Tomcat, et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et appliquer. 1. Planification de la structure des répertoires du projet Avant de déployer un projet Web, nous devons planifier la structure des répertoires du projet. D'une manière générale, nous pouvons l'organiser de la manière suivante

See all articles