‫Nous allons plonger dans le Dockerfile, qui est en fait une recette pour créer votre image.
‫Jusqu'à présent, toutes les images Docker que nous utilisions ont été créées à partir de Dockerfiles. Vous pouvez les consulter
‫sur Docker Hub.
‫Si vous avez cloné mon référentiel à partir des ressources répertoriées dans la première section, vous devriez voir un exemple de fichier
‫de docker, répertoire 1, et ne contenir qu'un seul fichier. Un fichier Docker.
‫Nous allons aller ligne par ligne et parler de ces différentes strophes. Un fichier Docker semble ressembler à un script shell, mais
‫ce n’est pas le cas.
‫Ce n'est pas un fichier de commandes, ce n'est pas un script shell. C'est une langue de fichier totalement différente
‫propre à Docker et le nom par défaut est Dockerfile avec un D majuscule.
‫Toutefois, à partir de la ligne de commande, chaque fois que vous devez traiter un fichier Docker à l'aide
‫de la commande docker, vous pouvez réellement utiliser le tiret f. Ce qui est en fait courant parmi de nombreux outils avec
‫Docker, vous pouvez utiliser dash f pour spécifier un fichier différent de celui par défaut.
‫Donc, la première place est la commande from. La commande from est dans chaque fichier Dockerfile. Il faut être là.
‫C'est normalement une distribution minimale.
‫Dans ce cas, c'est Debian.
‫Mais souvent, ce sera alpin.
‫Et vraiment, la raison pour laquelle vous les utiliseriez est pour vous épargner du temps et de la douleur. Parce que ces distributions minimales sont en réalité beaucoup
‫plus petites que les CD que vous utiliseriez pour installer une machine virtuelle à partir de celles-ci.
‫Par exemple, Ubuntu ne contient même pas de cURL, alors que de toute évidence, si vous installez une
‫installation complète d’Ubuntu sur une machine virtuelle, cURL et de nombreuses autres commandes sont déjà installées.
‫Étant donné que toutes ces distributions sont des images officielles, cela signifie qu'elles seront toujours à jour avec
‫les derniers correctifs de sécurité et que vous pourrez compter sur elles et faire confiance.
‫Et l'un des principaux avantages de leur utilisation dans des conteneurs est d'utiliser leurs systèmes de distribution de paquets pour installer
‫le logiciel dont vous avez besoin dans votre paquet.
‫Dans ce cas, nous utilisons en fait la version de Jessie, qui correspond à ce qui suit le côlon.
‫Et, comme vous vous en souvenez de notre conversation Docker Hub, vous pouvez spécifier ici de nombreuses options
‫différentes pour le référentiel Debian.
‫Ensuite, nous avons la strophe ENV, et ENV est pour les variables d'environnement.
‫C'est un moyen de définir des variables d'environnement, qui sont en réalité très importantes dans
‫les conteneurs, car elles constituent le moyen principal de définir les clés et les valeurs pour la construction de conteneurs et leur exécution.
‫Dans ce cas, il s’agit de définir la version de Nginx qu’il souhaiterait installer et cette variable d’environnement
‫sera définie de manière à ce que les lignes suivantes puissent l’utiliser.
‫Maintenant, rappelons-nous des conférences précédentes, chacune de ces strophes est une couche réelle de notre image
‫Docker.
‫Leur ordre d’ordre est donc important, car il fonctionne de haut en bas.
‫Comme vous le verrez par cette commande relativement longue ici pour la suivante. Vous verrez que cela ressemble à une
‫longue commande.
‫En réalité, il ne fait qu'exécuter des commandes shell à l'intérieur de ce conteneur au fur et à mesure de sa
‫construction.
‫Les commandes d’exécution apparaissent généralement lorsque vous devez installer un logiciel avec un référentiel de paquetages ou
‫effectuer une décompression ou une modification de fichier à l’intérieur du conteneur lui-même.
‫Les commandes d'exécution peuvent également exécuter des scripts de shell que vous avez déjà copiés dans le fichier ou
‫des commandes auxquelles vous pouvez
‫accéder depuis le conteneur à ce moment-là.
‫Depuis que nous venons de Debian, cette commande d’exécution a accès à toutes les commandes et fichiers binaires qui
‫auraient été installés avec cette version.
‫Et dans celui-ci pour Nginx, cette liste de commandes ajoute plus ou moins une clé au référentiel où vous pouvez
‫obtenir que le paquet installe la dernière version de Nginx à partir du référentiel officiel Nginx.
‫Quelques éléments sont vraiment essentiels pour créer de bons fichiers Dockerfiles et nous en parlerons davantage
‫dans une section ultérieure, dans laquelle nous parlerons des meilleures pratiques.
‫Mais deux choses à noter.
‫La raison pour laquelle nous ajoutons toutes ces commandes avec la double perluète ici, de sorte qu'elles soient chaînées les
‫unes après les autres, est parce que, si vous vous en souvenez, chaque strophe est son propre calque.
‫Cela garantit que toutes ces commandes sont insérées dans une seule couche.
‫Cela nous fait gagner un peu de temps.
‫Cela nous fait gagner de la place. Et il est si courant que vous le verrez probablement dans tous les fichiers Docker du Docker Hub.
‫D'accord, à la ligne 27, nous avons une autre commande d'exécution.
‫Celui-ci consiste à faire pointer nos fichiers journaux vers la sortie standard et vers
‫la sortie standard.
‫Nous verrons plus tard que la bonne façon de consigner à l'intérieur d'un conteneur est de ne pas se connecter à un fichier journal. Et il n'y a pas de syslogd
‫ou de tout autre service syslog
‫dans un conteneur. Docker gère en réalité toute notre journalisation pour nous. Tout ce que nous avons à faire
‫à l'intérieur du conteneur est de nous assurer que tout ce que nous voulons être capturé dans les journaux est envoyé à
‫stdout et que stderr et docker se chargeront du reste.
‫Il existe en fait des pilotes de journalisation que nous pouvons utiliser dans Docker Engine lui-même pour contrôler tous les journaux
‫de tous les conteneurs de notre hôte.
‫Et c'est vraiment ce que vous voulez faire avec eux.
‫Cela ajoute davantage de complexité à votre application si celle-ci effectue elle-même la journalisation.
‫Et puis, si vous devez gérer des fichiers dans chaque conteneur, vous avez maintenant un
‫problème: comment extraire ces fichiers, les rechercher et les rendre accessibles. Ici, nous prenons les journaux par défaut de Nginx et nous les
‫lions en fait à la sortie standard.
‫Pour que Docker puisse les capturer.
‫Nous avons également une commande expose.
‫Par défaut, aucun port TCP ou UDP n'est
‫ouvert dans un conteneur. Il n'expose rien du conteneur à un réseau virtuel sauf si nous
‫le listons ici.
‫Et, bien sûr, comme il s’agit d’un serveur Web et d’un serveur proxy, il va exposer les valeurs 80 et 443.
‫Maintenant, cette commande expose ne signifie pas que ces ports vont s'ouvrir automatiquement sur notre hôte.
‫C'est ce que la commande Dash P est à chaque fois que nous utilisons docker run.
‫Enfin, nous avons le CMD ici. Le CMD est un paramètre obligatoire qui constitue la dernière
‫commande à exécuter chaque fois que vous lancez un nouveau conteneur à partir de l'image ou à chaque fois que vous redémarrez un conteneur arrêté.
‫Il existe une documentation vraiment excellente sur toutes ces strophes, et bien d’autres, que nous verrons plus loin, sur le site Web de documentation
‫de Docker à l'adresse docs. docker. com, que
‫vous pouvez trouver dans les ressources de cette conférence.
‫Ok, alors ce sont les bases, non? Ces cinq strophes différentes sont assez normales dans chaque fichier Dockerfile.
‫Certains d'entre eux sont nécessaires.
‫Certains d'entre eux, comme la course, et ENV, et l'exposant, sont facultatifs, mais ils sont assez typiques de la plupart des conteneurs
‫pour lesquels vous allez créer des images.