Dans la première et la deuxième partie, nous avons couvert les principes fondamentaux de l'exécution d'un conteneur en préparant notre système de gestion des conteneurs Docker et ce que signifie exactement l'utilisation d'un conteneur Docker par rapport à d'autres technologies de virtualisation d'un point de vue technique. Ensuite, dans la troisième partie, nous nous sommes penchés sur les images Docker, avons appris les bases et créé notre premier conteneur Bloc-notes en utilisant WordPress ou DokuWiki.
Dans cette quatrième partie, nous allons voir comment les images docker sont construites et nous allons créer notre propre image personnalisée prête à être téléchargée et partagée avec nos amis, collègues et communautés.
Pour ce tutoriel, nous utiliserons l'image Whale Docker. La baleine est la mascotte officielle de Docker et l'image du docker Whale ressemble au programme cowsay qui génère des images ASCII d'une vache dans le terminal avec un message. Il peut également générer des images à partir d'images préfabriquées d'autres animaux, comme Tux le pingouin, la mascotte de Linux.
Introduction aux fichiers Docker
Dans la partie précédente, nous nous sommes présentés au Docker Hub et avons appris qu'il s'agit d'une ressource centralisée basée sur le cloud pour la découverte d'images de conteneurs, la création d'images et la distribution de ces images. Nous avons également appris qu'une image docker est une image multicouche au-dessus d'une image de base. Cela dit, l'utilisation d'une image de base élimine les tracas de créer à partir de zéro un système d'exploitation adapté à l'image docker et nous donne la possibilité de personnaliser les couches supérieures où résidera notre logiciel.
Pour créer une image personnalisée à l'aide d'une image de base, nous devons fournir au moteur Docker des instructions sur la façon d'installer et de configurer les packages et les fichiers, ainsi que certains paramètres qui vont avec. Ces instructions sont écrites dans un fichier texte appelé « dockerfile ». Les Dockerfiles sont comme des recettes que vous remettez à un chef et il vous prépare un bon repas. Ces fichiers docker sont écrits à l'aide d'un ensemble simple et descriptif d'étapes appelées "instructions". Chaque instruction crée un nouveau calque dans notre image. Les instructions incluent des actions telles que l'exécution d'une commande, l'ajout d'un fichier ou d'un répertoire, le processus à exécuter lors du lancement d'un conteneur à partir de l'image, etc. Ce processus est similaire à la définition d'une série de commandes dans un script shell. Une fois que vous demandez la construction d'une image, le Docker lit le fichier docker, exécute les instructions et renvoie une image finale.
Construire une image Docker
Il existe deux façons de créer votre image Docker personnalisée. Vous pouvez soit le créer sur votre ordinateur, soit utiliser le Docker Hub dont nous avons parlé précédemment. Dans cette partie, nous allons apprendre à construire notre image Docker localement puis à la publier sur le Docker Hub Registry.
Construire localement à l'aide d'un Dockerfile
Nous allons créer une image Docker personnalisée en utilisant l'image "Whale say", qui est une petite image Docker (basée sur une image Ubuntu) qui, lorsque vous l'exécutez, indique quelque chose que vous avez programmé pour vous répondre.
Tout d'abord, lancez un terminal et créez un nouveau dossier en tapant :
mkdir mywhale
Ce répertoire sert de "contexte" pour votre construction. Le contexte signifie simplement qu'il contient toutes les choses dont vous avez besoin pour construire avec succès votre image.
Entrez dans votre nouveau dossier avec :
cd mywhale
et créez un Dockerfile dans le dossier en tapant :
touch Dockerfile
Vous devriez maintenant voir le Dockerfile vide que nous avons créé si vous donnez la commande 'll' :
ll
$ ll
total 8.0K
-rw-rw-r-- 1 user user 0 23:26 Dockerfile
Ouvrez-le avec votre éditeur de texte préféré et ajoutez :
FROM docker/whalesay:latest
Cette première ligne d'instructions, avec le mot-clé FROM, indique à Docker sur quelle image votre image est basée. Vous basez votre nouveau travail sur l'image de baleine existante.
La prochaine instruction que nous ajouterons donnera la capacité à notre baleine de dire une fortune. Pour accomplir cette tâche, nous utiliserons le package fortune qui est disponible dans les référentiels Ubuntu (rappelez-vous que l'image baleine est basée sur une image Ubuntu). Le programme Fortunes a une commande qui imprime des dictons sages que notre baleine doit dire.
Donc, la première étape consiste à l'installer. Pour ce faire, nous ajoutons l'instruction d'installation habituelle d'apt :
RUN apt -y update && apt -y install fortunes
Une fois que l'image a le logiciel dont elle a besoin, vous demandez au logiciel de s'exécuter lorsque l'image est chargée. Pour ce faire, nous ajoutons l'instruction suivante :
CMD /usr/games/fortune -a | cowsay
La ligne ci-dessus indique au programme Fortune d'envoyer une citation choisie au hasard au programme Cowsay
Et nous avons terminé ! Maintenant, enregistrez le fichier et quittez.
Vous pouvez vérifier ce que vous avez fait en exécutant "cat Dockerfile" afin que votre Dockerfile ressemble à ceci :
cat Dockerfile
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
Maintenant que tout semble bon (espérons-le), il est temps de construire notre image Docker (n'oubliez pas le point . à la fin de la commande) :
docker build -t my-docker-whale .
La commande ci-dessus prend le Dockerfile dans le dossier actuel et crée une image appelée "my-docker-whale" sur votre machine locale.
Vous pouvez vérifier que votre image Docker est bien stockée sur votre ordinateur avec :
docker images
Ensuite, vous pouvez exécuter votre image Docker en tapant ce qui suit :
docker run my-docker-whale
Une fois qu'il s'exécute, vous obtiendrez quelque chose comme l'image suivante
Publier votre image Docker personnalisée sur Docker Hub
Votre prochaine option consiste à publier l'image Docker créée sur le référentiel Docker Hub. Pour ce faire, vous devrez créer un compte sur la page Web d'inscription Docker Hub où vous fournirez un nom, un mot de passe et une adresse e-mail pour votre compte. Je dois également souligner que le service Docker Hub est gratuit pour les images Docker publiques. Une fois que vous avez créé votre compte, vous pouvez pousser l'image que vous avez précédemment créée, pour la rendre disponible pour que d'autres puissent l'utiliser.
Pour cela, vous aurez besoin de l'ID et du TAG de votre image "my-docker-whale".
Exécutez à nouveau la commande "docker images" et notez l'ID et le TAG de votre image Docker, par exemple. a69f3f5e1a31.
Maintenant, avec la commande suivante, nous allons préparer notre image Docker pour son voyage vers le monde extérieur (la partie accountname de la commande est votre nom de compte sur la page de profil Docker Hube) :
docker tag a69f3f5e1a31 accountname/my-docker-whale:latest
Exécutez la commande "docker images" et vérifiez votre image nouvellement taguée.
Ensuite, utilisez la commande "docker login" pour vous connecter au Docker Hub à partir de la ligne de commande.
Le format de la commande de connexion est :
docker login --username=yourhubusername [email protected]
Lorsque vous y êtes invité, entrez votre mot de passe et appuyez sur Entrée.
Vous pouvez maintenant transférer votre image vers le référentiel nouvellement créé :
docker push accountname/my-docker-whale
La commande ci-dessus peut prendre un certain temps en fonction de la bande passante de téléchargement de votre connexion, car elle télécharge quelque chose comme 180ΜΒ de données (dans notre exemple). Une fois terminé, vous pouvez accéder à votre profil sur Docker Hub et consulter votre nouvelle image.
Téléchargement de votre image personnalisée
Si vous souhaitez extraire votre image de votre référentiel Docker Hub, vous devrez d'abord supprimer l'image d'origine de votre machine locale, car Docker refuserait de l'extraire du hub car les images locales et distantes sont identiques.
Comme vous vous en souvenez de la partie précédente, pour supprimer une image docker, vous devez exécuter la commande "docker rmi". Vous pouvez utiliser un ID ou le nom pour supprimer une image :
docker rmi -f a69f3f5e1a31
Maintenant que l'image est supprimée, vous pouvez extraire et charger l'image depuis votre référentiel à l'aide de la commande "docker run" en incluant votre nom de compte depuis Docker Hub.
docker run accountname/my-docker-whale
Étant donné que nous avons précédemment supprimé l'image et qu'elle n'était plus disponible sur notre système local, Docker la téléchargera et la stockera à l'emplacement désigné.
Résumé
Dans cette partie, nous avons appris à créer un fichier Docker, à écrire quelques instructions de base, ainsi que la construction et l'image en l'utilisant comme recette. Nous avons également couvert les bases de la transmission de notre nouvelle image personnalisée au registre Docker Hub et de son extraction sur notre machine locale. Dans la prochaine partie de cette série de tutoriels Docker, je montrerai comment nous pouvons automatiser la procédure de création d'image afin que nous puissions créer instantanément des images personnalisées chaque fois que nous en avons besoin ! Restez à l'écoute.