‫Cette conférence sera consacrée à l'ajout de construction d'image dans vos fichiers Compose, de sorte qu'il
‫garantisse automatiquement la disponibilité d'une image lorsque
‫vous exécutez des commandes de composition. Comme les autres intervenants de cette section,
‫vous devez avoir une bonne idée de la fonctionnalité de ligne de commande du conteneur Docker et de l'image Docker.
‫Compose peut également vous aider à créer vos images au moment de l'exécution. En fait, il recherchera des images dans le
‫cache et, s'il contient des options de construction, il construira cette image lorsque vous utiliserez la commande up.
‫Cela ne construira pas l'image à chaque fois.
‫Il ne le construira que s'il ne le trouve pas.
‫Vous devrez soit utiliser le docker composition build pour reconstruire vos images
‫si vous les modifiez, soit utiliser docker composer --build.
‫Nous verrons cela dans une minute.
‫C'est vraiment bien lorsque vous utilisez Compose localement et que vous souhaitez créer des images. Peut-être que vous ne voulez pas utiliser
‫le montage en volume. Vous voulez réellement copier des fichiers, ou quelque chose du genre, dans l'image.
‫Votre commande de construction peut être assez complexe. Il peut avoir des variables d’environnement personnalisées ou des
‫arguments de construction.
‫À propos, construisons des arguments, nous n'en avons pas parlé. Il s’agit en réalité de variables d’environnement uniquement
‫disponibles lors de la génération. Vous pouvez regarder la documentation. docker. la documentation com sur Dockerfiles
‫et il va parler de construire des arguments en profondeur.
‫Ici, nous allons examiner un exemple de la façon dont vous pourriez utiliser cela localement.
‫Je suis dans le répertoire compose échantillon 3. Vous pouvez voir ici que j'ai un fichier Docker Compose
‫pré-construit ici.
‫J'ai en fait un Dockerfile appelé nginx. Dockerfile. Ensuite, une configuration nginx similaire à
‫celle que nous avions précédemment, où nous utilisons actuellement Nginx comme proxy inverse pour notre site Web.
‫Si nous allons dans Docker Compose, vous pouvez voir comment j'ai architecté cette solution.
‫J'ai en fait deux services.
‫Le premier est le proxy Nginx comme avant et l’autre le serveur Web Apache comme avant.
‫Mais quelques choses sont différentes.
‫Au lieu que je spécifie l'image par défaut pour Nginx, je suis en train de créer une image personnalisée.
‫Vous pouvez voir ici que je lui ai en fait expliqué que le fichier Dockerfile
‫qu’il doit utiliser est un fichier Dockerfile spécialement nommé.
‫Je veux qu'il construise ce Dockerfile dans ce répertoire courant dans lequel il se trouve. Je veux qu'il nomme cette image
‫quand il la construit,
‫nginx -custom. Il va stocker cela dans mon cache local. Ensuite, en bas, nous avons un
‫serveur Web exécutant Apache.
‫Ce que j’ai fait ici c’est que j’ai monté certains fichiers sources HTML sur le serveur Apache.
‫Le scénario est donc peut-être que je suis un développeur
‫Web et que j'ai ici un site Web
‫statique, sous ce répertoire HTML, sur lequel je n'ai pas vraiment besoin de m'inquiéter.
‫C'est juste en utilisant un petit modèle bootstrap.
‫Je vais éditer ça localement, dans mon éditeur ici, mais je sais que quand je vais en production avec
‫ça, ça va être assis derrière un proxy Nginx.
‫Donc, je veux imiter cet environnement de production autant que possible, localement, juste pour m'assurer que j'ai éliminé
‫tous les bugs ou problèmes. Dans ce cas, je veux
‫ce Nginx, et je sais que cette configuration Nginx est celle qu’ils vont utiliser sur le
‫serveur de production, de sorte que je vais simplement l’utiliser ici.
‫C’est en fait la même configuration que Nginx.
‫Lorsque j'exécute la commande de composition du menu fixe, elle vérifie d'abord le nom
‫de cette image dans mon cache. S'il ne le trouve pas, il utilisera ces commandes de construction ici pour
‫rechercher le fichier Docker, puis pour construire mon image. Vous pouvez voir à partir de ce Dockerfile, c'est assez simple en fait.
‫Il utilisera simplement une version spécifique de Nginx, puis copiera un fichier.
‫Il obtiendra le reste de ses informations de la configuration Nginx de Docker Hub, puis il
‫les copiera dans ma configuration Nginx.
‫Si vous vous en souvenez dans un exemple précédent, nous avons en fait effectué un montage de liaison pour obtenir cette configuration Nginx
‫via notre fichier de composition.
‫Dans ce cas, nous voulons simplement qu'il construise toute l'image.
‫Nous n'avons pas vraiment besoin de changer cette configuration proxy, donc je n'ai pas vraiment besoin de la monter pour pouvoir
‫la changer tout le temps.
‫Je veux juste que ça fonctionne. Droite? Donc, je vais le construire. Laissez-le reposer dans le cache d'image. Une fois construit pour
‫la première fois, il ne sera plus nécessaire de le reconstruire très souvent.
‫Donc, je vais partir d'ici.
‫Ensuite, lorsque j'éditerai et développerai sur mon site Web, j'aurai cette configuration
‫pour pouvoir éditer en direct. Si nous revenons ici et que je docker un docker, passons
‫en revue ce qui s'est passé.
‫Il a d'abord créé le réseau.
‫C'est une chose normale. Il fait que.
‫Ensuite, on constate que le service proxy n'a pas l'image recherchée. Donc, ça va construire
‫ça.
‫Il s’agit donc d’extraire le fichier Docker et de le construire exactement comme il le ferait avec une commande de génération normale du menu fixe.
‫Ensuite, il me donne cette astuce utile pour me faire savoir que cette image a été construite cette fois car elle ne
‫l’a pas trouvée.
‫Mais à l'avenir, si j'ai besoin de changer cette image, je devrai utiliser les commandes docker
‫compose build ou docker compose up --build. Maintenant qu'il a l'image,
‫il peut créer les conteneurs. Ensuite, mon serveur Web et mon serveur proxy démarrent.
‫Si tout fonctionnait correctement, je devrais pouvoir obtenir un hôte local. Il a extrait mon modèle par défaut ici, qui est
‫en fait un modèle de bootstrap.
‫On dirait que tout fonctionne.
‫En fait, je vais ici et je peux voir tous mes journaux en train de monter et, évidemment, il y a beaucoup d'actifs. Il y a une entrée de journal
‫pour chacun et cela va passer par le proxy et par le serveur web.
‫Parce que j'ai lié ce répertoire monté pour édition, je peux en fait revenir dans mon éditeur. En tant que développeur Web, je pourrais y aller et peut-être,
‫vous savez, modifier quelque chose sur le site Web. Peut-être que je vais entrer
‫dans le titre de départ bootstrap, qui devrait être ce petit titre en haut ici.
‫Je vais juste sauvegarder ce fichier. Ensuite, si j'actualise, mon site Web est mis à jour à cause de ce montage lié à nouveau.
‫Ceci est un excellent exemple de configuration de développeur très courante dans laquelle vous devez créer des
‫images personnalisées localement.
‫Vous devez également monter certains fichiers dans votre application pour pouvoir les modifier au moment de l'exécution.
‫Et, bien sûr, s'il devait s'agir d'une application reposant sur une base de données, je voudrais simplement ajouter un troisième
‫service pour le serveur de base de données. Ensuite, je vais revenir et faire mon nettoyage.
‫Vous remarquerez que, par défaut, cette image ne sera pas supprimée.
‫Vous remarquerez au sommet ici, nous avons la coutume nginx qu'il a construite. Mais il y a une commande de composition descendante
‫de docker.
‫Si vous regardez l'aide, vous voyez qu'il existe une option rmi qui supprime réellement les images qu'elle a
‫peut-être créées ou qu'elle utilise.
‫Il y a cette option réelle ici, 'supprime uniquement les images qui n'ont pas de balise personnalisée définie par le champ
‫d'image. «Une chose
‫que je pourrais faire ici si je voulais que cela soit un peu plus automatisé, c'est que je pouvais simplement supprimer cette
‫commande d'image tout de suite. Supprimons simplement cela. Ensuite, je veux nettoyer très vite. Je
‫vais juste enlever mon image. docker image rm personnalisé. Comme vous pouvez le voir, il est parti là-bas.
‫D'accord. Je veux refaire le docker.
‫Et cette fois, nous ferons un -d.
‫Vous remarquerez tout au long de ces exemples de composition que ce dernier nomme en fait des conteneurs, des volumes et
‫des réseaux avec le nom du répertoire comme nom de projet.
‫C'est en fait quelque chose dans Compose où, pour éviter les conflits de
‫noms, le nom du répertoire sera toujours ajouté au début de tous les actifs afin qu'ils ne soient pas en
‫conflit avec d'autres.
‫Vous pouvez réellement changer ce nom de proxy via la ligne de commande.
‫Si vous allez consulter la documentation Compose.
‫Mais ce que je voulais dire ici, c’est que si je fais une image de docker ici, vous verrez qu’elle a effectivement nommé mon
‫image pour moi.
‫Donc, techniquement, je n'ai pas à utiliser cette option d'image.
‫Mais si je voulais un nom spécifique pour pouvoir l'identifier plus tard, je le pourrais.
‫La raison pour laquelle j’en ai parlé est que c’est en fait un peu plus propre parce que ce que
‫je peux faire alors, c’est docker down, et rappelez-vous que dans l’aide, il était dit que je pouvais utiliser un type rmi. Ainsi, lorsque je le nettoie et que je tiens
‫à garder mon environnement Docker propre, je peux le faire en local.
‫Ce que cela va réellement faire, c'est aussi effacer ces images.
‫Vous verrez ici en bas que l'image a été supprimée.
‫Ce n'est pas quelque chose que je fais tout le temps, mais peut-être que si j'ai un gros projet avec beaucoup d'images
‫personnalisées et que je ne veux pas qu'il fasse exploser mon système quand je ne développe pas ce projet,
‫j'utiliserai le rmi local , et il gardera toujours une trace des images personnalisées qu’il devait créer.
‫Bien sûr, ici si j’utilise le tout, toutes les images utilisées dans ce projet seront supprimées, ce que vous ne
‫voudrez peut-être pas faire car, dans ce cas, le serveur Web Apache httpd pourrait être supprimé et vous voudrez peut-être que cette
‫image disparaisse. rester autour pendant un moment. D'ACCORD.
‫Vous avez beaucoup appris sur Compose dans cette section.
‫Nous allons utiliser Compose dans le reste de ce cours.
‫Nous continuerons à développer ces compétences au fur et à mesure.