Conteneuriser une application Golang
La conteneurisation vous aide à regrouper l'application et ses dépendances dans un seul paquet appelé conteneur. Ce paquet peut s'exécuter sur n'importe quelle plateforme sans se soucier de l'environnement. Dans cette section, vous apprendrez à conteneuriser une application Golang à l'aide de Docker.
Pour conteneuriser une application Golang, vous devez d'abord créer un Dockerfile. Le Dockerfile contient des instructions pour construire et exécuter l'application dans un conteneur. De plus, lors de la création d'un Dockerfile, vous pouvez suivre différents ensembles de bonnes pratiques pour optimiser la taille de l'image et la rendre plus sécurisée.
Création d'un Dockerfile
Créez un nouveau fichier nommé Dockerfile
à la racine de votre application Golang. Le Dockerfile contient des instructions pour construire et exécuter l'application dans un conteneur.
Voici un Dockerfile pour une application Golang. Vous trouverez également ce fichier dans le répertoire go-prometheus-monitoring
.
# Utiliser l'image officielle Golang comme base
FROM golang:1.24-alpine AS builder
# Définir les variables d'environnement
ENV CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# Définir le répertoire de travail à l'intérieur du conteneur
WORKDIR /build
# Copier les fichiers go.mod et go.sum pour l'installation des dépendances
COPY go.mod go.sum ./
# Télécharger les dépendances
RUN go mod download
# Copier l'ensemble du code source de l'application
COPY . .
# Construire le binaire Go
RUN go build -o /app .
# Étape finale légère
FROM alpine:3.21 AS final
# Copier le binaire compilé de l'étape de construction
COPY --from=builder /app /bin/app
# Exposer le port de l'application
EXPOSE 8000
# Exécuter l'application
CMD ["bin/app"]
Comprendre le Dockerfile
Le Dockerfile se compose de deux étapes :
-
Étape de construction: Cette étape utilise l'image officielle Golang comme base et définit les variables d'environnement nécessaires. Elle définit également le répertoire de travail à l'intérieur du conteneur, copie les fichiers
go.mod
etgo.sum
pour l'installation des dépendances, télécharge les dépendances, copie l'ensemble du code source de l'application et construit le binaire Go.Vous utilisez l'image
golang:1.24-alpine
comme image de base pour l'étape de construction. La variable d'environnementCGO_ENABLED=0
désactive CGO, ce qui est utile pour construire des binaires statiques. Vous définissez également les variables d'environnementGOOS
etGOARCH
surlinux
etamd64
, respectivement, pour construire le binaire pour la plateforme Linux. -
Étape finale: Cette étape utilise l'image officielle Alpine comme base et copie le binaire compilé de l'étape de construction. Elle expose également le port de l'application et exécute l'application.
Vous utilisez l'image
alpine:3.21
comme image de base pour l'étape finale. Vous copiez le binaire compilé de l'étape de construction vers l'image finale. Vous exposez le port de l'application à l'aide de l'instructionEXPOSE
et exécutez l'application à l'aide de l'instructionCMD
.Outre la construction en plusieurs étapes, le Dockerfile suit également les bonnes pratiques telles que l'utilisation des images officielles, la définition du répertoire de travail et la copie uniquement des fichiers nécessaires dans l'image finale. Vous pouvez optimiser davantage le Dockerfile en suivant d'autres bonnes pratiques.
Construire l'image Docker et exécuter l'application
Une fois que vous avez le Dockerfile, vous pouvez construire l'image Docker et exécuter l'application dans un conteneur.
Pour construire l'image Docker, exécutez la commande suivante dans le terminal :
$ docker build -t go-api:latest .
Après avoir construit l'image, vous pouvez exécuter l'application dans un conteneur à l'aide de la commande suivante :
$ docker run -p 8000:8000 go-api:latest
L'application commencera à s'exécuter à l'intérieur du conteneur, et vous pourrez y accéder à l'adresse http://localhost:8000
. Vous pouvez également vérifier les conteneurs en cours d'exécution à l'aide de la commande docker ps
.
$ docker ps
Résumé
Dans cette section, vous avez appris à conteneuriser une application Golang à l'aide d'un Dockerfile. Vous avez créé un Dockerfile en plusieurs étapes pour construire et exécuter l'application dans un conteneur. Vous avez également découvert les bonnes pratiques pour optimiser la taille de l'image Docker et la rendre plus sécurisée.
Informations connexes :
Prochaines étapes
Dans la section suivante, vous apprendrez à utiliser Docker Compose pour connecter et exécuter plusieurs services ensemble afin de surveiller une application Golang avec Prometheus et Grafana.