Maison > développement back-end > Golang > Comment déployer des applications Go avec Docker

Comment déployer des applications Go avec Docker

Linda Hamilton
Libérer: 2024-11-04 10:19:30
original
622 Les gens l'ont consulté

Docker est une plate-forme de conteneurisation qui simplifie le packaging, la distribution et le déploiement des applications. Vous pouvez exploiter les avantages de Go et Docker pour améliorer l’efficacité, la portabilité et la sécurité de vos applications.

Ce didacticiel vise à vous apprendre comment créer et déployer vos applications Go avec Docker. Vous apprendrez en créant une API RESTful avec les packages Gorilla Mux et GORM que vous conteneuriserez et déploierez.

Étape 1 : Configuration de votre environnement de développement

Vous devez avoir Go et Docker installés sur votre ordinateur pour créer et conteneuriser vos applications Go avec Docker.

Assurez-vous que Go et Docker sont installés sur votre système. Vous pouvez télécharger Go depuis le site Web officiel de téléchargement Go et Docker depuis Docker Hub. Visitez la page Web si ce n’est pas le cas et suivez les instructions d’installation correspondant à votre système d’exploitation spécifique.

Cet article explique comment déployer des applications Go avec Docker et vous en apprend davantage sur l'installation et la configuration de Docker et d'une base de données Postgres, y compris la conteneurisation de vos applications Go.

Après l'installation, configurez votre environnement de développement Go en définissant les variables d'environnement et les chemins selon vos besoins. Assurez-vous que vous disposez d’un espace de travail Go fonctionnel avec la structure de répertoires requise.

De plus, vous pouvez vous familiariser avec l'interface de ligne de commande (CLI) de Docker et les concepts de base de Docker.

Créez un nouveau répertoire pour ce projet et exécutez la commande go mod init pour initialiser le répertoire en tant que projet Go.

go mod init
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

Après avoir initialisé le projet Go, exécutez cette commande pour ajouter les packages GORM et Gorilla Mux en tant que dépendances à votre projet.

go get github.com/gorilla/mux

go get gorm.io/gorm
go get gorm.io/driver/postgres
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

Vous utiliserez le package Gorilla Mux pour le routage. Le package GORM fournit une interface vous permettant d'utiliser les types Go pour les opérations de base de données SQL avec le package de pilotes que vous avez installé (dans ce cas, Postgres).

Étape 2 : Création de l'application Go

Dans ce didacticiel, vous utiliserez un style d'architecture en couches Go populaire et utiliserez des interfaces pour interagir avec les différents composants de notre application.

Voici la structure des répertoires de l'application.

go mod init
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
  1. Dockerfile : Le Dockerfile est le fichier de configuration permettant de créer l'image Docker. Vous écrirez le contenu de ce fichier en fonction de l'API.
  2. cmd : Le répertoire cmd contient généralement le point d'entrée de votre application. Le sous-répertoire du serveur suggère que le serveur API est le composant principal de votre projet. Le fichier main.go dans cmd/server contient le point d'entrée de l'application.
  3. interne : Le répertoire interne permet d'organiser les packages internes de votre application. Les packages internes ne doivent pas être exportés, ce qui en fait un excellent endroit pour masquer les détails d’implémentation.
    • http : ce sous-répertoire contiendra le code lié à HTTP, y compris les gestionnaires de routes et éventuellement un middleware pour votre API.
      • handlers.go : vous inclurez vos gestionnaires de requêtes HTTP dans ce fichier.
      • users.go : vous spécifierez ici les gestionnaires HTTP liés à la gestion des utilisateurs.
    • models : ce répertoire contiendra le code et les modèles de données liés à la base de données.
    • database.go : Ce fichier contiendra le code d'initialisation et de connexion à la base de données.
    • migrations.go : ce fichier gère les migrations de schéma de base de données, garantissant que votre schéma de base de données correspond aux exigences de votre application.
    • users.go : ce fichier contiendra des modèles de données ou des définitions de structure liées aux utilisateurs interagissant avec la base de données.
    • users : ce répertoire contiendra une logique spécifique à l'utilisateur.
      • user.go : ce fichier comprend des fonctions et des structures liées à la gestion des utilisateurs qui interagissent avec l'implémentation de la base de données. L'implémentation HTTP interagit avec les fonctions ici.

Cette structure de projet apparaît bien organisée, séparant clairement les préoccupations entre les différentes composantes. Cette organisation facilite la maintenance et la mise à l'échelle de votre API Go à mesure qu'elle se développe.

Ce n'est pas un standard Go. Cependant, de nombreux développeurs Go et projets open source utilisent cette structure pour vos applications.

Étape 2a : Rédaction de l'implémentation de la base de données

Vous configurerez la fonctionnalité de base de données pour votre application. Vous devrez définir les modèles à l'aide de structures, vous connecter à la base de données et mettre en place des migrations pour vos opérations d'insertion sur votre base de données.

Voici la liste des importations dont vous aurez besoin pour la mise en œuvre de la base de données.

go get github.com/gorilla/mux

go get gorm.io/gorm
go get gorm.io/driver/postgres
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

La première tâche consiste à définir une structure qui correspond au schéma de votre base de données pour votre application. GORM fournit des balises pour spécifier des options et des contraintes supplémentaires sur les champs.

.
├── Dockerfile
├── cmd
│   └── server
│       └── main.go
└── internal
    ├── http
    │   ├── handlers.go
    │   └── users.go
    ├── models
    │   ├── database.go
    │   ├── migrations.go
    │   └── users.go
    └── users
        └── user.go

6 directories, 11 files
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

La structure User représente le modèle permettant de travailler avec les données utilisateur dans une base de données.

Dans votre fichier database.go, déclarez une structure pour encapsuler l'instance de connexion à la base de données. Vous utiliserez la structure pour vous connecter à votre base de données à partir d’autres parties du package d’implémentation de base de données.

go mod init
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

Ensuite, créez une fonction de connexion à la base de données qui connecte l'implémentation de la base de données au programme de base de données à la base de données :

go get github.com/gorilla/mux

go get gorm.io/gorm
go get gorm.io/driver/postgres
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

La fonction NewDatabase crée une nouvelle instance de base de données et établit une connexion à la base de données. Il renvoie un pointeur vers l'instance de base de données et une erreur, le cas échéant, se produit pendant le processus.

Après une connexion réussie à la base de données, vous pouvez configurer la fonctionnalité de migration pour l'implémentation de votre base de données avec la fonction suivante :

.
├── Dockerfile
├── cmd
│   └── server
│       └── main.go
└── internal
    ├── http
    │   ├── handlers.go
    │   └── users.go
    ├── models
    │   ├── database.go
    │   ├── migrations.go
    │   └── users.go
    └── users
        └── user.go

6 directories, 11 files
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

La fonction MgrateDB configure des migrations automatiques pour la structure User avec la fonction AutoMigrate du client de base de données et renvoie une erreur si elle est rencontrée au cours du processus.

Étape 2b : Définition des fonctions pour la mise en œuvre de la base de données

Dans le fichier users.go où vous avez défini la structure de votre schéma de base de données, vous pouvez procéder à la définition des fonctions pour l'implémentation de la base de données.

Voici les fonctions CreateUser, GetUserByID, UpdateUser et DeleteUser responsables des opérations CRUD sur la base de données.

package models

import (
    // imports from the user implementation
    "BetterApp/internal/users"

    "context"
    "gorm.io/gorm"
    "fmt"
    "gorm.io/driver/postgres"
    "gorm.io/gorm/schema"
    "os"
)
Copier après la connexion
Copier après la connexion
Copier après la connexion

Votre implémentation utilisateur appellera ces fonctions pour accéder à la fonctionnalité de la base de données.

Étape 2c : Rédaction de l'implémentation utilisateur

Votre implémentation utilisateur joue un rôle important dans le relais des données de la base de données vers l'implémentation HTTP.

Vous définirez une structure qui correspond à la structure dans l'implémentation de la base de données et ajouterez des balises JSON aux champs pour utilisation ; Ensuite, vous définirez des fonctions qui appellent les fonctions de base de données avec les données de l'implémentation HTTP.

Voici les importations dont vous aurez besoin pour l'implémentation de votre utilisateur :

// internal/models/users.go

type User struct {
    gorm.Model
    Username string `gorm:"unique;not null"`
    Email    string `gorm:"unique;not null"`
    IsActive bool   `gorm:"not null"`
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

Voici la structure avec les balises JSON. Le json:"-" dans le champ gorm.Model précise que vous souhaitez exclure le champ des opérations JSON.

// internal/models/database.go

type Database struct {
    Client *gorm.DB
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, vous déclarerez une interface avec des méthodes pour les fonctions d'implémentation utilisateur, une structure de service pour l'implémentation utilisateur et une fonction qui initialise l'implémentation du service.

// internal/models/database.go

func NewDatabase() (*Database, error) {

    // Construct a connection string using environment variables for database configuration.
    configurations := fmt.Sprintf("host=%v port=%v user=%v password=%v dbname=%v sslmode=%v",
        os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_USERNAME"),
        os.Getenv("DB_PASSWORD"), os.Getenv("DB_NAME"), os.Getenv("SSL_MODE"))

    // Open a connection to the database using GORM and PostgreSQL driver.
    db, err := gorm.Open(postgres.New(postgres.Config{
        DSN:                  configurations,
        PreferSimpleProtocol: true,
    }), &gorm.Config{NamingStrategy: schema.NamingStrategy{
        SingularTable: true,
    }})
    if err != nil {
        return nil, err
    }

    // Enable connection pooling by configuring maximum idle and open connections.
    sqlDB, err := db.DB()
    if err != nil {
        return nil, err
    }
    sqlDB.SetMaxIdleConns(10)
    sqlDB.SetMaxOpenConns(100)

    // Return the Database instance with the established database connection.
    return &Database{
        Client: db,
    }, nil
}
Copier après la connexion
Copier après la connexion

L'interface et le service aideront à gérer les opérations liées aux utilisateurs en dehors de la mise en œuvre de l'utilisateur.

Ensuite, vous pouvez définir les méthodes de l'implémentation de la structure UserService qui appellent l'implémentation de la base de données.

// internal/models/migrations.go

func (d *Database) MigrateDB() error {
    log.Println("Database Migration in Process...")

    // Use GORM AutoMigrate to migrate all the database schemas.
    err := d.Client.AutoMigrate(&User{})
    if err != nil {
        return err
    }

    log.Println("Database Migration Complete!")
    return nil
}
Copier après la connexion
Copier après la connexion

Les fonctions CreateUser, GetUserByID, UpdateUser et DeleteUser sont chargées d'appeler les opérations CRUD sur l'implémentation de la base de données. L'implémentation HTTP appellera ces fonctions pour accéder à la base de données.

Étape 2c : écriture de l'implémentation HTTP

L'implémentation HTTP fait partie de votre application qui reçoit et interagit avec les requêtes entrantes.

Voici la liste des importations dont vous aurez besoin pour votre implémentation HTTP :

go mod init
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

Tout d'abord, déclarez une structure et incluez une instance de routeur, une instance HTTP et une instance du service utilisateur.

go get github.com/gorilla/mux

go get gorm.io/gorm
go get gorm.io/driver/postgres
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

Créez ensuite une fonction qui renvoie un pointeur vers la structure Handler, où vous pouvez configurer le serveur et les gestionnaires.

.
├── Dockerfile
├── cmd
│   └── server
│       └── main.go
└── internal
    ├── http
    │   ├── handlers.go
    │   └── users.go
    ├── models
    │   ├── database.go
    │   ├── migrations.go
    │   └── users.go
    └── users
        └── user.go

6 directories, 11 files
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

La fonction NewHandler installe et configure un gestionnaire de requêtes HTTP, le rendant prêt à gérer les requêtes HTTP entrantes pour un service spécifique tout en définissant également les paramètres et les itinéraires du serveur.

La fonction mapRoutes que vous avez appelée dans la fonction NewHandler configure les itinéraires en les mappant à leurs fonctions de gestionnaire respectives.

package models

import (
    // imports from the user implementation
    "BetterApp/internal/users"

    "context"
    "gorm.io/gorm"
    "fmt"
    "gorm.io/driver/postgres"
    "gorm.io/gorm/schema"
    "os"
)
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, définissez les fonctions du gestionnaire et leurs fonctionnalités. Voici les fonctions CreateUser, GetUserByID, UpdateUser et DeleteUser qui sont chargées d'intercepter les requêtes HTTP et de répondre en fonction de l'opération.

// internal/models/users.go

type User struct {
    gorm.Model
    Username string `gorm:"unique;not null"`
    Email    string `gorm:"unique;not null"`
    IsActive bool   `gorm:"not null"`
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

Maintenant, vous pouvez écrire la fonctionnalité de démarrage du serveur.

// internal/models/database.go

type Database struct {
    Client *gorm.DB
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

La fonction Serve démarre le serveur sur le port spécifié et renvoie une erreur s'il y en a pendant le processus.

Étape 2d : couplage des implémentations et exécution de l'application

Importez les implémentations dans votre fichier main.go pour coupler les implémentations et exécuter votre application.

// internal/models/database.go

func NewDatabase() (*Database, error) {

    // Construct a connection string using environment variables for database configuration.
    configurations := fmt.Sprintf("host=%v port=%v user=%v password=%v dbname=%v sslmode=%v",
        os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_USERNAME"),
        os.Getenv("DB_PASSWORD"), os.Getenv("DB_NAME"), os.Getenv("SSL_MODE"))

    // Open a connection to the database using GORM and PostgreSQL driver.
    db, err := gorm.Open(postgres.New(postgres.Config{
        DSN:                  configurations,
        PreferSimpleProtocol: true,
    }), &gorm.Config{NamingStrategy: schema.NamingStrategy{
        SingularTable: true,
    }})
    if err != nil {
        return nil, err
    }

    // Enable connection pooling by configuring maximum idle and open connections.
    sqlDB, err := db.DB()
    if err != nil {
        return nil, err
    }
    sqlDB.SetMaxIdleConns(10)
    sqlDB.SetMaxOpenConns(100)

    // Return the Database instance with the established database connection.
    return &Database{
        Client: db,
    }, nil
}
Copier après la connexion
Copier après la connexion

Vous pouvez déclarer une fonction Run qui instancie le démarrage de votre application dans le fichier main.go puis appeler la fonction dans la fonction principale.

// internal/models/migrations.go

func (d *Database) MigrateDB() error {
    log.Println("Database Migration in Process...")

    // Use GORM AutoMigrate to migrate all the database schemas.
    err := d.Client.AutoMigrate(&User{})
    if err != nil {
        return err
    }

    log.Println("Database Migration Complete!")
    return nil
}
Copier après la connexion
Copier après la connexion

La fonction Run crée une instance de base de données, initialise la fonctionnalité de migration, initialise les implémentations HTTP et utilisateur et démarre le serveur.

Vous pouvez appeler la fonction Run dans la fonction principale pour lancer votre application.

// internal/models/users.go

func (d *Database) CreateUser(ctx context.Context, user *users.User) error {
    newUser := &User{
        Username: user.Username,
        Email:    user.Email,
        IsActive: false,
    }

    if err := d.Client.WithContext(ctx).Create(newUser).Error; err != nil {
        return err
    }

    return nil
}

// GetUserByID returns the user with a specified id
func (d *Database) GetUserByID(ctx context.Context, id int64) (users.User, error) {
    user := users.User{}
    if err := d.Client.WithContext(ctx).Where("id = ?", id).First(&user).Error; err != nil {
        return users.User(User{}), err
    }
    return users.User(User{
        Username: user.Username,
        Email:    user.Email,
        IsActive: user.IsActive,
    }), nil
}

// UpdateUser updates an existing user in the database
func (d *Database) UpdateUser(ctx context.Context, updatedUser users.User, id uint) error {
    // Check if the user with the specified ID exists
    var existingUser User
    if err := d.Client.WithContext(ctx).Where("id = ?", id).First(&existingUser).Error; err != nil {
        return err
    }

    // Update the fields of the existing user with the new values
    existingUser.Username = updatedUser.Username
    existingUser.Email = updatedUser.Email
    existingUser.IsActive = updatedUser.IsActive

    // Save the updated user back to the database
    if err := d.Client.WithContext(ctx).Save(&existingUser).Error; err != nil {
        return err
    }

    return nil
}

// DeleteUser deletes a user from the database by their ID

func (d *Database) DeleteUser(ctx context.Context, id uint) error {
    // Check if the user with the specified ID exists
    var existingUser User
    if err := d.Client.WithContext(ctx).Where("id = ?", id).First(&existingUser).Error; err != nil {
        return err
    }

    // Delete the user from the database
    if err := d.Client.WithContext(ctx).Delete(&existingUser).Error; err != nil {
        return err
    }

    return nil
}
Copier après la connexion

L'application devrait fonctionner correctement avant d'envisager de la conteneuriser avec Docker.

Étape 3 : Écrire le fichier Docker

Maintenant que vous avez créé et exécuté le programme avec succès, vous pouvez procéder à sa conteneurisation avec Docker.

Votre Dockerfile comportera deux étapes, la construction et l'étape finale. Cette approche réduit la taille de l'image, minimise les risques de sécurité en réduisant la surface d'attaque, garantit des performances d'exécution efficaces et facilite la reproductibilité entre les différentes étapes de développement et de déploiement.

Vous utiliserez également Alpine Linux comme image de base de vos images Docker, car elles sont plus efficaces et sécurisées avec une conception minimaliste qui se traduit par des tailles d'image plus petites, des constructions plus rapides et des surfaces d'attaque réduites.

Étape 3a : l'étape de construction

L'utilisation des étapes de construction et finales dans un Dockerfile permet la création efficace d'images Docker. La phase de construction commence par une image de base contenant les outils de construction et les dépendances, compile les artefacts d'application et génère une image intermédiaire potentiellement volumineuse.

Voici le contenu du Dockerfile pour la phase de construction :

go mod init
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
  1. FROM golang:1.20-alpine AS build : Cette ligne spécifie l'image de base pour l'étape de construction. Il commence par l'image officielle Golang Docker étiquetée avec la version 1.20 et est basée sur Alpine Linux. La partie AS build donne à cette étape un nom, "build" que vous pourrez référencer plus tard.
  2. WORKDIR /app : Cette ligne définit le répertoire de travail à l'intérieur du conteneur sur /app. Docker exécutera les commandes suivantes dans ce répertoire.
  3. COPIER . . : Cette commande copie le contenu du répertoire actuel (vraisemblablement le code source de votre application Go et d'autres fichiers nécessaires) dans le répertoire /app à l'intérieur du conteneur.
  4. RUN go build -o server ./cmd/server : Il s'agit de la commande qui construit l'application Go. Il utilise la commande go build pour compiler le code Go dans le répertoire courant et afficher le binaire en tant que serveur. L'argument ./cmd/server est l'emplacement du code de l'application par rapport au répertoire /app.

Étape 3b : l'étape finale

L'étape finale utilise une image de base plus petite, copie uniquement les composants d'exécution nécessaires et aboutit à une image compacte optimisée pour la production.

Voici le contenu de votre Dockerfile pour l'étape finale :

go mod init
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
  1. FROM alpine:latest : Dans la dernière étape, vous pouvez commencer avec une image de base Alpine Linux, la balise latest spécifie la dernière version disponible d'Alpine Linux.
  2. WORKDIR /app : Cette ligne définit le répertoire de travail à l'intérieur du conteneur sur /app. Docker exécutera les commandes suivantes dans ce répertoire.
  3. COPY --from=build /app/server . : Cette commande copie le fichier binaire nommé server de "l'étape de construction" précédente dans le répertoire /app à l'intérieur du conteneur final. Ce binaire est l'application Go compilée que vous avez créée lors de la phase de construction.
  4. EXPOSE 8080 : Ici, vous spécifiez que votre application écoutera sur le port 8080. Il s'agit d'une déclaration et n'ouvre pas réellement le port ; c'est un moyen de documenter le port que votre application compte utiliser.
  5. CMD ["./server"] : Cette commande sera exécutée lorsque vous exécuterez un conteneur basé sur l'image. Il spécifie l'exécution du binaire server, qui est votre application Go. Cette commande démarre votre application à l'intérieur du conteneur.

Étape 4 : Création et exécution de l'image Docker

Après avoir écrit le Dockerfile, vous pouvez procéder à la création et à l'exécution du fichier.
Exécutez cette commande pour créer l'image Docker à partir du fichier avec la commande build.

go get github.com/gorilla/mux

go get gorm.io/gorm
go get gorm.io/driver/postgres
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

L'indicateur -t spécifie la balise de l'image Docker comme betterapp et le point suivant (.) spécifie que vous souhaitez créer le fichier Docker dans le répertoire actuel.

Vous pouvez exécuter l'image avec la commande run et spécifier un mappage de port du conteneur vers votre machine hôte avec l'indicateur -p.

.
├── Dockerfile
├── cmd
│   └── server
│       └── main.go
└── internal
    ├── http
    │   ├── handlers.go
    │   └── users.go
    ├── models
    │   ├── database.go
    │   ├── migrations.go
    │   └── users.go
    └── users
        └── user.go

6 directories, 11 files
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Les indicateurs -e suivants servent à spécifier les variables d'environnement pour votre application.

Étape 5 : Déployer des applications Go avec Docker

Docker Compose est un outil d'orchestration de conteneurs qui simplifie le travail avec plusieurs conteneurs Docker. Vous pouvez utiliser Docker Compose pour orchestrer vos applications Go et leurs composants.

Vous utiliserez un fichier YAML pour spécifier l'instruction et Docker compose configurera vos applications pour vous faire gagner du temps et de la complexité.

Tout d'abord, créez un fichier Docker Compose YAML avec la commande ci-dessous et ouvrez le fichier dans votre éditeur :

package models

import (
    // imports from the user implementation
    "BetterApp/internal/users"

    "context"
    "gorm.io/gorm"
    "fmt"
    "gorm.io/driver/postgres"
    "gorm.io/gorm/schema"
    "os"
)
Copier après la connexion
Copier après la connexion
Copier après la connexion

Après avoir créé le Dockerfile, vous pouvez commencer à écrire les commandes et directives pour déployer votre application :

// internal/models/users.go

type User struct {
    gorm.Model
    Username string `gorm:"unique;not null"`
    Email    string `gorm:"unique;not null"`
    IsActive bool   `gorm:"not null"`
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

Le fichier YAML définit deux services : my-postgres qui est l'instance du conteneur de base de données et le service Web, qui est votre application Go avant de configurer leurs variables d'environnement, leurs ports et leurs dépendances.

Maintenant, vous pouvez procéder à la création des images avec la commande docker-compose build.

// internal/models/database.go

type Database struct {
    Client *gorm.DB
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

Votre résultat devrait être similaire à ceci :

How to Deploy Go Applications With Docker

Enfin, vous pouvez exécuter vos conteneurs avec la commande docker-compose up.

go mod init
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

L'indicateur -d exécute les conteneurs en mode détaché, ce qui le rend indépendant de la session du terminal.

Voici le résultat de l’exécution de la commande :

How to Deploy Go Applications With Docker

Vous pouvez fermer votre terminal et le conteneur devrait continuer à fonctionner.

Vous pouvez exécuter les requêtes CURL pour tester votre API une fois les conteneurs opérationnels :

go get github.com/gorilla/mux

go get gorm.io/gorm
go get gorm.io/driver/postgres
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

Félicitations, vous avez déployé et exécuté avec succès une application Go fonctionnelle avec Docker et Docker Compose.

Conclusion

Vous avez appris à créer et simplifier le déploiement de votre application Go avec Docker et Docker Compose. Au fur et à mesure que vous poursuivez votre parcours de développement, les compétences et la compréhension que vous avez acquises ici se révéleront des atouts essentiels pour garantir des déploiements fluides et l'excellence opérationnelle.

Envisagez d'explorer les fonctionnalités avancées de Docker, telles que l'optimisation des builds Dockerfile ou la mise en œuvre de Docker Swarm pour des applications plus volumineuses.

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!

source:dev.to
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal