Construire une image avec contrôle du cache et gestion des secrets
Dans cette étape, vous apprendrez à contrôler le cache de construction Docker et à gérer les secrets pendant le processus de build en utilisant le type de montage secret
de BuildKit. Le cache de build peut accélérer considérablement les constructions, mais il est parfois nécessaire de le désactiver. La gestion sécurisée des secrets est cruciale pour éviter d'intégrer des informations sensibles dans les couches de votre image.
Commencez par vous assurer que vous êtes dans le répertoire ~/project
:
cd ~/project
Modifions le Dockerfile
pour inclure une étape dont nous pourrions vouloir contrôler la mise en cache et démontrer la gestion des secrets. Nous ajouterons une étape simple de création de fichier et une étape hypothétique utilisant un secret.
Ouvrez le Dockerfile
pour le modifier:
nano Dockerfile
Modifiez le contenu pour inclure une commande RUN
qui crée un fichier avec un horodatage et un espace réservé pour l'utilisation d'un secret:
FROM ubuntu:latest
ARG MESSAGE="Hello, Docker!"
RUN apt-get update && apt-get install -y cowsay
LABEL maintainer="Your Name <[email protected]>"
RUN echo "Build time: $(date)" > /app/build_info.txt
## Ceci est un espace réservé pour une commande utilisant un secret
## RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret > /app/secret_info.txt
CMD ["cowsay", "$MESSAGE"]
Nous avons ajouté RUN echo "Build time: $(date)" > /app/build_info.txt
. Cette commande crée un fichier /app/build_info.txt
contenant l'horodatage de la construction de cette couche. Par défaut, Docker met en cache les couches. Si vous construisez l'image plusieurs fois sans modifier les instructions avant cette commande RUN
, cette couche pourrait être servie depuis le cache et l'horodatage ne sera pas mis à jour.
Enregistrez le Dockerfile
modifié en appuyant sur Ctrl + X
, puis Y
, et Entrée
.
Maintenant, construisons l'image avec un nouveau tag, my-cached-image
.
docker build -t my-cached-image .
Observez la sortie. Si vous avez construit l'image récemment, vous pourriez voir ---> Using cache
pour certaines étapes.
Pour démontrer le contrôle du cache, reconstruisons l'image, mais cette fois en désactivant le cache pour l'ensemble de la construction avec le flag --no-cache
.
docker build --no-cache -t my-no-cache-image .
Vous verrez que Docker reconstruit chaque couche, même si les instructions n'ont pas changé. Ceci est utile lorsque vous voulez vous assurer que toutes les dépendances sont récupérées à nouveau ou lorsqu'une construction précédente a échoué d'une manière qui a corrompu le cache.
Abordons maintenant la gestion des secrets. La ligne commentée ## RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret > /app/secret_info.txt
montre comment utiliser un secret avec BuildKit. Pour utiliser cette fonctionnalité, vous devez activer BuildKit (souvent activé par défaut dans les versions récentes de Docker) et fournir le secret pendant la construction avec le flag --secret
.
Par exemple, si vous aviez un fichier mysecret.txt
contenant votre secret, vous construiriez comme ceci (cette commande ne fonctionnera pas telle quelle car nous n'avons pas de fichier mysecret.txt
et la ligne est commentée, mais elle montre la syntaxe):
## docker build --secret id=mysecret,src=mysecret.txt -t my-secret-image .
L'instruction RUN --mount=type=secret,id=mysecret
rend le contenu du secret disponible à /run/secrets/mysecret
uniquement pendant l'étape de construction. Le secret n'est pas inclus dans les couches finales de l'image. C'est la méthode sécurisée pour gérer des informations sensibles comme des clés API ou des mots de passe pendant les constructions.
Comme nous n'avons pas de fichier secret et que la ligne est commentée, nous n'exécuterons pas la commande de construction liée aux secrets. Cependant, comprendre les concepts de --no-cache
et du type de montage secret
est important pour contrôler vos constructions et gérer les données sensibles.