Temps de lecture estimé : 3 minutes
La plupart des Dockerfiles démarrent à partir d’une image parent. Si vous devez contrôler complètement le contenu de votre image, vous devrez peut-être créer une image de base à la place.Voici la différence :
-
Une image parent est l’image sur laquelle votre image est basée. Elle fait référence au contenu de la directive
FROM
dans leDockerfile. Chaque déclaration ultérieure dans le Dockerfile modifie cette parentimage. La plupart des Dockerfiles démarrent à partir d’une image parente, plutôt que d’une image de base.Toutefois, les termes sont parfois utilisés de manière interchangeable. -
Une image de base a
FROM scratch
dans son Dockerfile.
Ce sujet vous montre plusieurs façons de créer une image de base. Le processus spécifique dépendra fortement de la distribution Linux que vous souhaitez empaqueter. Nous avons quelquesexemples ci-dessous, et vous êtes encouragé à soumettre des demandes de pull pour contribuer à de nouvellesones.
Créer une image complète à l’aide de tar
En général, commencez par une machine en fonctionnement qui exécute la distribution que vous souhaitez empaqueter comme image parentale, bien que cela ne soit pas nécessaire pour certains outils commeDebootstrap de Debian, que vous pouvez également utiliser pour construire des images Ubuntu.
Il peut être aussi simple que ceci de créer une image parente Ubuntu :
$ sudo debootstrap xenial xenial > /dev/null$ sudo tar -C xenial -c . | docker import - xeniala29c15f1bf7a$ docker run xenial cat /etc/lsb-releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=16.04DISTRIB_CODENAME=xenialDISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
Il y a plus de scripts d’exemple pour créer des images parentes dans le dépôt DockerGitHub.
Créer une image parentale simple en utilisant scratch
Vous pouvez utiliser l’image minimale réservée de Docker, scratch
, comme point de départ pour construire des conteneurs. L’utilisation de l’ scratch
« image » signale au processus de constructionque vous voulez que la commande suivante dans la Dockerfile
soit la première couche de système de fichiers de votre image.
Bien que scratch
apparaisse dans le dépôt de Docker sur le hub, vous ne pouvez pas le tirer,l’exécuter ou marquer toute image avec le nom scratch
. En revanche, vous pouvez y faire référence dans votre Dockerfile
. Par exemple, pour créer un conteneur minimal en utilisantscratch
:
FROM scratchADD hello /CMD
En supposant que vous avez construit l’exemple d’exécutable « hello » en suivant les instructions à l’adressehttps://github.com/docker-library/hello-world/,et que vous l’avez compilé avec le drapeau -static
, vous pouvez construire cette image Docker en utilisant cette docker build
commande :
docker build --tag hello .
N’oubliez pas le caractère .
à la fin, qui définit le contexte de construction sur le répertoirecurrent.
Note : Comme Docker Desktop pour Mac et Docker Desktop pour Windows utilisent une VM Linux,vous avez besoin d’un binaire Linux, plutôt qu’un binaire Mac ou Windows.Vous pouvez utiliser un conteneur Docker pour le construire :
$ docker run --rm -it -v $PWD:/build ubuntu:16.04container# apt-get update && apt-get install build-essentialcontainer# cd /buildcontainer# gcc -o hello -static -nostartfiles hello.c
Pour exécuter votre nouvelle image, utilisez la commande docker run
:
docker run --rm hello
Cet exemple crée l’image hello-world utilisée dans les tutoriels.Si vous voulez le tester, vous pouvez cloner le repo de l’image.
Plus de ressources
Il existe de nombreuses ressources disponibles pour vous aider à écrire votre Dockerfile
.