Créer une construction multi-étapes pour votre application C++
Prérequis
- Vous avez un client Git. Les exemples de cette section utilisent un client Git en ligne de commande, mais vous pouvez utiliser n'importe quel client.
Aperçu
Cette section vous guide dans la création d'une construction Docker multi-étapes pour une application C++. Une construction multi-étapes est une fonctionnalité de Docker qui vous permet d'utiliser différentes images de base pour différentes étapes du processus de construction, afin que vous puissiez optimiser la taille de votre image finale et séparer les dépendances de construction des dépendances d'exécution.
La pratique standard pour les langages compilés comme C++ est d'avoir une étape de construction qui compile le code et une étape d'exécution qui exécute le binaire compilé, car les dépendances de construction ne sont pas nécessaires à l'exécution.
Obtenir l'application exemple
Utilisons une simple application C++ qui affiche Hello, World!
dans le terminal. Pour ce faire, clonez le dépôt d'exemple à utiliser avec ce guide :
$ git clone https://github.com/dockersamples/c-plus-plus-docker.git
L'exemple pour cette section se trouve dans le répertoire hello
du dépôt. Entrez-y et jetez un œil aux fichiers :
$ cd c-plus-plus-docker/hello
$ ls
Vous devriez voir les fichiers suivants :
Dockerfile hello.cpp
Vérifier le Dockerfile
Ouvrez le Dockerfile
dans un IDE ou un éditeur de texte. Le Dockerfile
contient les instructions pour construire l'image Docker.
# Étape 1 : Étape de construction
FROM ubuntu:latest AS build
# Installer build-essential pour compiler le code C++
RUN apt-get update && apt-get install -y build-essential
# Définir le répertoire de travail
WORKDIR /app
# Copier le code source dans le conteneur
COPY hello.cpp .
# Compiler le code C++ de manière statique pour s'assurer qu'il ne dépend pas des bibliothèques d'exécution
RUN g++ -o hello hello.cpp -static
# Étape 2 : Étape d'exécution
FROM scratch
# Copier le binaire statique de l'étape de construction
COPY --from=build /app/hello /hello
# Commande pour exécuter le binaire
CMD ["/hello"]
Le Dockerfile
a deux étapes :
- Étape de construction : Cette étape utilise l'image
ubuntu:latest
pour compiler le code C++ et créer un binaire statique. - Étape d'exécution : Cette étape utilise l'image
scratch
, qui est une image vide, pour copier le binaire statique de l'étape de construction et l'exécuter.
Construire l'image Docker
Pour construire l'image Docker, exécutez la commande suivante dans le répertoire hello
:
$ docker build -t hello .
L'option -t
étiquette l'image avec le nom hello
.
Lancer le conteneur Docker
Pour lancer le conteneur Docker, utilisez la commande suivante :
$ docker run hello
Vous devriez voir la sortie Hello, World!
dans le terminal.
Résumé
Dans cette section, vous avez appris à créer une construction multi-étapes pour une application C++. Les constructions multi-étapes vous aident à optimiser la taille de votre image finale et à séparer les dépendances de construction des dépendances d'exécution. Dans cet exemple, l'image finale ne contient que le binaire statique et n'inclut aucune dépendance de construction.
Comme l'image a une base vide, les outils habituels du système d'exploitation sont également absents. Ainsi, par exemple, vous ne pouvez pas exécuter une simple commande ls
dans le conteneur :
$ docker run hello ls
Cela rend l'image très légère et sécurisée.