Images de base
Tous les Dockerfiles partent d'une image de base.
Une base est l'image que votre image étend.
Elle fait référence au contenu de l'instruction FROM
dans le Dockerfile.
FROM debian
Dans la plupart des cas, vous n'avez pas besoin de créer votre propre image de base. Docker Hub contient une vaste bibliothèque d'images Docker qui conviennent pour une utilisation comme image de base dans votre build. Les Images Officielles Docker ont une documentation claire, promeuvent les meilleures pratiques et sont régulièrement mises à jour. Il existe également des images Docker Verified Publisher , créées par des partenaires éditeurs de confiance, vérifiées par Docker.
Créer une image de base
Si vous avez besoin de contrôler complètement le contenu de votre image, vous pouvez créer
votre propre image de base à partir d'une distribution Linux de votre choix, ou utiliser la
base spéciale FROM scratch
:
FROM scratch
L'image scratch
est généralement utilisée pour créer des images minimales ne contenant que
ce dont une application a besoin. Voir Créer une image de base minimale en utilisant scratch.
Pour créer une image de base de distribution, vous pouvez utiliser un système de fichiers racine, empaqueté en tant que
fichier tar
, et l'importer dans Docker avec docker import
. Le processus de
création de votre propre image de base dépend de la distribution Linux que vous souhaitez
empaqueter. Voir Créer une image complète en utilisant tar.
Créer une image de base minimale en utilisant scratch
L'image minimale réservée scratch
sert de point de départ pour
la construction de conteneurs. L'utilisation de l'image scratch
signale au processus de build
que vous souhaitez que la prochaine commande dans le Dockerfile
soit la première couche du système de fichiers
dans votre image.
Bien que scratch
apparaisse dans le référentiel de Docker sur Docker Hub,
vous ne pouvez pas le tirer, l'exécuter ou marquer une image avec le nom scratch
.
Au lieu de cela, vous pouvez y faire référence dans votre Dockerfile
.
Par exemple, pour créer un conteneur minimal en utilisant scratch
:
# syntax=docker/dockerfile:1
FROM scratch
ADD hello /
CMD ["/hello"]
En supposant qu'un binaire exécutable nommé hello
existe à la racine du
contexte de build.
Vous pouvez construire cette image Docker en utilisant la commande docker build
suivante :
$ docker build --tag hello .
Pour exécuter votre nouvelle image, utilisez la commande docker run
:
$ docker run --rm hello
Cette image d'exemple ne peut être exécutée avec succès que si le binaire hello
n'a pas de dépendances d'exécution. Les programmes informatiques ont tendance à dépendre de
certains autres programmes ou ressources pour exister dans l'environnement d'exécution. Par
exemple :
- Runtimes de langage de programmation
- Bibliothèques C liées dynamiquement
- Certificats CA
Lors de la construction d'une image de base, ou de toute image, c'est un aspect important à
considérer. Et c'est pourquoi la création d'une image de base en utilisant FROM scratch
peut être
difficile, pour tout ce qui n'est pas de petits programmes simples. D'un autre côté,
il est également important de n'inclure que les éléments dont vous avez besoin dans votre image, pour
réduire la taille de l'image et la surface d'attaque.
Créer une image complète en utilisant tar
En général, commencez avec une machine en état de marche qui exécute la distribution que vous souhaitez empaqueter en tant qu'image de base, bien que cela ne soit pas requis pour certains outils comme Debootstrap de Debian, que vous pouvez également utiliser pour construire des images Ubuntu.
Par exemple, pour créer une image de base Ubuntu :
$ sudo debootstrap noble noble > /dev/null
$ sudo tar -C noble -c . | docker import - noble
sha256:81ec9a55a92a5618161f68ae691d092bf14d700129093158297b3d01593f4ee3
$ docker run noble cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.2 LTS"
Il y a plus d'exemples de scripts pour créer des images de base dans le dépôt GitHub de Moby.
Plus de ressources
Pour plus d'informations sur la construction d'images et l'écriture de Dockerfiles, voir :