Construire votre image Rust
Prérequis
- Vous avez installé la dernière version de Docker Desktop.
- Vous disposez d'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
Ce guide vous accompagne dans la construction de votre première image Rust. Une image comprend tout le nécessaire pour exécuter une application - le code ou le binaire, l'environnement d'exécution, les dépendances et tout autre objet du système de fichiers requis.
Obtenir l'application d'exemple
Clonez l'application d'exemple à utiliser avec ce guide. Ouvrez un terminal, changez de répertoire pour un répertoire dans lequel vous souhaitez travailler, et exécutez la commande suivante pour cloner le dépôt :
$ git clone https://github.com/docker/docker-rust-hello && cd docker-rust-hello
Créer un Dockerfile pour Rust
Maintenant que vous avez une application, vous pouvez utiliser docker init
pour créer un
Dockerfile pour celle-ci. À l'intérieur du répertoire docker-rust-hello
, exécutez la commande docker init
. docker init
fournit une configuration par défaut, mais vous devrez
répondre à quelques questions sur votre application. Référez-vous à l'exemple suivant
pour répondre aux invites de docker init
et utilisez les mêmes réponses pour
vos invites.
$ docker init
Bienvenue dans la CLI Docker Init !
Cet utilitaire vous guidera dans la création des fichiers suivants avec des valeurs par défaut pertinentes pour votre projet :
- .dockerignore
- Dockerfile
- compose.yaml
- README.Docker.md
Commençons !
? Quelle plateforme d'application votre projet utilise-t-il ? Rust
? Quelle version de Rust voulez-vous utiliser ? 1.70.0
? Sur quel port votre serveur écoute-t-il ? 8000
Vous devriez maintenant avoir les nouveaux fichiers suivants dans votre répertoire docker-rust-hello
:
- Dockerfile
- .dockerignore
- compose.yaml
- README.Docker.md
Pour construire une image, seul le Dockerfile est nécessaire. Ouvrez le Dockerfile dans votre IDE ou éditeur de texte préféré et voyez ce qu'il contient. Pour en savoir plus sur les Dockerfiles, consultez la référence Dockerfile.
Fichier .dockerignore
Lorsque vous exécutez docker init
, il crée également un fichier
.dockerignore
. Utilisez le fichier .dockerignore
pour spécifier les motifs et les chemins que vous ne souhaitez pas copier dans l'image afin de la garder aussi petite que possible. Ouvrez le fichier .dockerignore
dans votre IDE ou éditeur de texte préféré et voyez ce qu'il contient déjà.
Construire une image
Maintenant que vous avez créé le Dockerfile, vous pouvez construire l'image. Pour ce faire, utilisez
la commande docker build
. La commande docker build
construit des images Docker à partir d'un
Dockerfile et d'un contexte. Le contexte d'une construction est l'ensemble des fichiers situés dans
le CHEMIN ou l'URL spécifié. Le processus de construction de Docker peut accéder à n'importe lequel des fichiers
situés dans ce contexte.
La commande de construction prend éventuellement un drapeau --tag
. Le tag définit le nom de l'image
et un tag optionnel au format nom:tag
. Si vous ne passez pas de tag,
Docker utilise "latest" comme tag par défaut.
Construisez l'image Docker.
$ docker build --tag docker-rust-image .
Vous devriez voir une sortie comme celle-ci.
[+] Building 62.6s (14/14) FINISHED
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 2.70kB 0.0s
=> resolve image config for docker.io/docker/dockerfile:1 2.3s
=> CACHED docker-image://docker.io/docker/dockerfile:1@sha256:39b85bbfa7536a5feceb7372a0817649ecb2724562a38360f4d6a7782a409b14 0.0s
=> [internal] load metadata for docker.io/library/debian:bullseye-slim 1.9s
=> [internal] load metadata for docker.io/library/rust:1.70.0-slim-bullseye 1.7s
=> [build 1/3] FROM docker.io/library/rust:1.70.0-slim-bullseye@sha256:585eeddab1ec712dade54381e115f676bba239b1c79198832ddda397c1f 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 35.29kB 0.0s
=> [final 1/3] FROM docker.io/library/debian:bullseye-slim@sha256:7606bef5684b393434f06a50a3d1a09808fee5a0240d37da5d181b1b121e7637 0.0s
=> CACHED [build 2/3] WORKDIR /app 0.0s
=> [build 3/3] RUN --mount=type=bind,source=src,target=src --mount=type=bind,source=Cargo.toml,target=Cargo.toml --mount= 57.7s
=> CACHED [final 2/3] RUN adduser --disabled-password --gecos "" --home "/nonexistent" --shell "/sbin/nologin" 0.0s
=> CACHED [final 3/3] COPY --from=build /bin/server /bin/ 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:f1aa4a9f58d2ecf73b0c2b7f28a6646d9849b32c3921e42adc3ab75e12a3de14 0.0s
=> => naming to docker.io/library/docker-rust-image
Voir les images locales
Pour voir une liste des images que vous avez sur votre machine locale, vous avez deux options. L'une consiste à utiliser la CLI Docker et l'autre à utiliser Docker Desktop. Comme vous travaillez déjà dans le terminal, jetez un œil à la liste des images à l'aide de la CLI.
Pour lister les images, exécutez la commande docker images
.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-rust-image latest 8cae92a8fbd6 3 minutes ago 123MB
Vous devriez voir au moins une image listée, y compris l'image que vous venez de construire docker-rust-image:latest
.
Étiqueter les images
Comme mentionné précédemment, un nom d'image est composé de composants de nom séparés par des barres obliques. Les composants de nom peuvent contenir des lettres minuscules, des chiffres et des séparateurs. Un séparateur peut inclure un point, un ou deux traits de soulignement, ou un ou plusieurs tirets. Un composant de nom ne peut pas commencer ou se terminer par un séparateur.
Une image est composée d'un manifeste et d'une liste de couches. Ne vous inquiétez pas trop des manifestes et des couches à ce stade, si ce n'est qu'un "tag" pointe vers une combinaison de ces artefacts. Vous pouvez avoir plusieurs tags pour une image. Créez un deuxième tag pour l'image que vous avez construite et jetez un œil à ses couches.
Pour créer un nouveau tag pour l'image que vous avez construite, exécutez la commande suivante.
$ docker tag docker-rust-image:latest docker-rust-image:v1.0.0
La commande docker tag
crée un nouveau tag pour une image. Elle ne crée pas une nouvelle image. Le tag pointe vers la même image et n'est qu'une autre façon de référencer l'image.
Maintenant, exécutez la commande docker images
pour voir une liste des images locales.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-rust-image latest 8cae92a8fbd6 4 minutes ago 123MB
docker-rust-image v1.0.0 8cae92a8fbd6 4 minutes ago 123MB
rust latest be5d294735c6 4 minutes ago 113MB
Vous pouvez voir que deux images commencent par docker-rust-image
. Vous savez que c'est la même image car si vous regardez la colonne IMAGE ID
, vous pouvez voir que les valeurs sont les mêmes pour les deux images.
Supprimez le tag que vous venez de créer. Pour ce faire, utilisez la commande rmi
. La commande rmi
signifie remove image.
$ docker rmi docker-rust-image:v1.0.0
Untagged: docker-rust-image:v1.0.0
Notez que la réponse de Docker vous indique que Docker n'a pas supprimé l'image, mais l'a seulement "détaguée". Vous pouvez le vérifier en exécutant la commande docker images
.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-rust-image latest 8cae92a8fbd6 6 minutes ago 123MB
rust latest be5d294735c6 6 minutes ago 113MB
Docker a supprimé l'image étiquetée avec :v1.0.0
, mais le tag docker-rust-image:latest
est disponible sur votre machine.
Résumé
Cette section vous a montré comment utiliser docker init
pour créer un Dockerfile et un fichier .dockerignore pour une application Rust. Elle vous a ensuite montré comment construire une image. Et enfin, elle vous a montré comment étiqueter une image et lister toutes les images.
Informations connexes :
Prochaines étapes
Dans la section suivante, apprenez à exécuter votre image en tant que conteneur.