Comprendre les Images Docker

L'Équipe Alphorm
L'Équipe Alphorm Ajouter un commentaire 17e lecture en min

Après l’étude des réseaux Docker, découvrez tout ce que vous devez savoir sur les images Docker, des concepts fondamentaux à leur création et gestion. Apprenez comment les images Docker facilitent le déploiement d’applications et optimisent la portabilité.

Qu'est-ce qu'une image Docker ?

Les images Docker sont bien plus que de simples paquets logiciels. Imaginez-les comme des boîtes magiques qui renferment tout ce dont une application a besoin pour fonctionner, du code source aux dépendances, le tout encapsulé dans un ensemble léger et autonome. Ces images servent de fondation à la technologie de conteneurisation, permettant aux développeurs de créer des environnements d’exécution cohérents, indépendamment des variations du système hôte et donc elles offrent une solution élégante aux défis de la gestion des dépendances logicielles et de la portabilité des applications.

Une représentation visuelle de ce qu'est une image Docker

Maintenant que vous avez un aperçu enivrant de ce qu’est une image Docker et de sa capacité à encapsuler la magie de vos applications, laissez-nous vous guider à travers une question qui intrigue souvent les novices : « Quelle est la différence entre un conteneur et une image ? »et Comprenez comment une image devient un conteneur actif, prêt à exécuter vos applications avec une agilité impressionnante.

Quelle est la différence entre un conteneur et une image ?

Dans notre exploration de l’univers Docker, il est essentiel de comprendre cette distinction fondamentale.Une image est un package qui contient tout ce dont une application a besoin pour fonctionner, tandis qu’un conteneur est une instance en cours d’exécution de cette image, offrant une isolation et une portabilité.

Pour donner un exemple concret, supposons que vous ayez une application web basée sur Node.js. Vous créerez une image Docker en spécifiant toutes les dépendances nécessaires dans un Dockerfile. Cette image contient tout ce dont votre application a besoin pour s’exécuter, y compris Node.js, les modules npm, etc.

Ensuite, vous pouvez exécuter cette image sur différentes machines en tant que conteneur. Chaque conteneur a son propre espace de travail isolé, mais tous partagent la même image de base. Cela garantit la cohérence et la portabilité de votre application, car elle fonctionnera de la même manière indépendamment de l’environnement sous-jacent.

 

Une image Docker se transforme en conteneur actif

Nous avons compris le pouvoir de ces images et conteneurs , mais comprendre leur origine est tout aussi important pour maîtriser pleinement l’art du déploiement.

D'où proviennent les images Docker ?

Comme nous l’avons vu précédemment, les images Docker sont les éléments fondamentaux de l’écosystème Docker. Elles sont le point de départ de votre voyage vers des applications déployables. Par la suite, nous nous attarderons sur deux méthodes essentielles :

Obtenir des Images Docker depuis un Référentiel

le processus d’obtention d’images Docker depuis un référentiel, une étape cruciale dans le déploiement et la gestion d’applications conteneurisées. Les référentiels Docker, tels que Docker Hub, abritent un éventail d’images prêtes à l’emploi, couvrant tout, des serveurs web aux bases de données.

Docker ne se limite pas seulement à Docker Hub. Nous pouvons tirer profit des référentiels d’autres fournisseurs cloud tels qu’AWS et Azure.

Référentiel Docker contenant plusieurs images prêtes à l'emploi

Pour cela retenez la commande magique docker pull, votre passeport vers une panoplie de solutions. Par exemple, pour obtenir une image Ubuntu, il vous suffit de saisir docker pull ubuntu et voilà, vous avez maintenant entre vos mains l’image docker Ubuntu, prête à transformer votre environnement

Attention: Il faut faire attention entre les images officielles et celles créées par d’autres personnes.

  • L’image officielle : porte généralement le nom de l’image officielle sans préfixe.(comme Ubuntu )
  • L’image créée par d’autres personnes : le nom de la personne ou entreprise / le nom de l’image (comme alphorm/ubuntu ).

En plus des référentiels en ligne mentionnés précédemment, la possibilité de configurer votre propre référentiel local est également disponible et là Docker a développé le Docker Trusted Registry (DTR) dans ce contexte. Il s’agit d’une solution sur site spécialement conçue pour assurer la mise à disposition d’un référentiel interne au sein de votre infrastructure informatique privée.

Créer une image via la commande commit

Notre exploration des sources d’images Docker nous a plongés dans l’univers riche des référentiels, mais notre voyage ne s’arrête pas là. En effet, il est temps de découvrir comment vous pouvez devenir le créateur de ces conteneurs virtuels. C’est là que le chapitre « Créer de Nouvelles Images Docker » prend tout son sens.

Imaginez-vous en train de travailler sur un conteneur en cours d’exécution et vous voulez apporter des modifications à celui-ci. Pas seulement cela, vous voulez capturer instantanément ces changements dans une nouvelle image Docker. Et c’est là que la commande docker commit entre en jeu.

Dans cette section, nous explorerons cette approche rapide et pratique qui vous permet de figer l’instant créatif, de transformer une idée spontanée en une image fonctionnelle.

Tout d’abord, commençons par démarrer un nouveau conteneur interactif nommé « alphorml » :

Exécution de la commande docker run dans un terminal

Donc si vous tapez la commande ip a, ça ne va pas fonctionner.

Utilisation de la commande ip a dans un conteneur Docker

Attendez, attendez ! Notre conteneur a ses limites.

Certaines commandes pourraient ne pas fonctionner, car l’image de base d’Ubuntu inclut uniquement les éléments essentiels, tels que ‘apt update‘. Ainsi, si vous tapez cette commande, cela fonctionnera.

Exécution de la commande apt update dans un conteneur Docker

Pour cela, nous devons installer les paquets nécessaires pour notre cas. Prenons donc la création du service NTP comme exemple.


Nous installons également nano et ifconfig pour nous aider à bien exécuter les commandes précédentes:

Commande pour installer des outils dans un conteneur Docker

Maintenant, si nous exécutons la commande ‘ifconfig‘, cela fonctionnera.

Utilisation de la commande ifconfig dans un conteneur Docker

Référence: Vous pouvez utiliser ce site pour vous aidez à installer le service NTP. https://www.tecmint.com/install-ntp-server-and-client-on-ubuntu

Et n’oubliez pas que certaines commandes peuvent ne pas fonctionner si la bibliothèque nécessaire n’est pas présente dans l’image. Vous devrez l’installer avec la commande ‘apt install‘, et Bien sûr, il peut y avoir des bugs à résoudre mais vous avez la capacité de les résoudre.

Félicitations à tous ! En suivant attentivement les instructions ci-dessus et sur la référence, nous avons réussi à installer le service NTP sur notre conteneur.

 

Exécution de la commande systemctl status ntp dans un conteneur Docker

Maintenant, concluons cette étape avec la commande ‘exit’ pour sortir du conteneur :

Utilisation de la commande exit pour quitter un conteneur Docker

Ensuite, utilisons docker diff nom_id_conteneur pour observer les transformations apportées à l’image de base :

Exécution de la commande docker diff pour voir les modifications dans un conteneur

La sortie montre ce qui a été ajouté (‘A’), modifié (‘C’), ou supprimé (‘D’).

Enfin, avec un brin d’excitation, créons maintenant l’image à partir du conteneur que nous avons métamorphosé selon nos critères :

				
					 docker commit alphorm al/alphorm-as:1.0
				
			
Exécution de la commande docker commit pour créer une nouvelle image Docker

al/alphorm-as :1.0 : C’est la notation du nom et de la version de l’image résultante. Dans cet exemple, l’image est nommée « alphorm-as » et taguée avec la version « 1.0 ». Cela pourrait être utilisé pour organiser et suivre différentes versions de l’image.

Si nous exécutons maintenant la commande ‘docker image’, nous devrions la trouver.

Exécution de la commande docker run pour démarrer un conteneur Docker

Remarque : Dans notre cas, l’image de base doit être Ubuntu, et la taille de l’image de base doit être inférieure à la taille de l’image créée.

Maintenant, si nous testons et lançons le conteneur, les commandes que nous venons d’installer fonctionnent parfaitement :

				
					docker run -ti --name alphorm2 al/alphorm-as:1.0 bash
				
			
Visualisation d'un fichier Dockerfile

Félicitations, vous avez réussi à capturer les changements apportés à votre conteneur et à les transformer en une image Docker fonctionnelle. Vous avez maintenant la possibilité de partager votre image avec d’autres, de la versionner et de l’intégrer dans vos workflows de développement. Si vous avez suivi ces étapes avec attention, vous avez maîtrisé la commande docker commit pour créer des images personnalisées.

🚀 Transformez votre expertise en développement avec notre formation vidéo sur les conteneurs Docker !  pour commencer et révolutionner vos compétences dès maintenant : Formation Docker !

Créer une image via un fichier Dockerfile

Dans cette section, nous allons explorer les éléments clés d’un Dockerfile et les meilleures pratiques pour la création d’images Docker.

Le fichier Dockerfile est un artefact essentiel qui décrit les étapes nécessaires pour installer les dépendances, copier les fichiers, configurer l’environnement et définir la commande d’exécution de l’image.

Structure typique d'un fichier Dockerfile
  • Structure d’un Dockerfile : Un Dockerfile est un fichier texte qui contient une série d’instructions utilisées par Docker pour construire une image. Voici un exemple de structure de base d’un Dockerfile :
Utilisation de la commande cat pour afficher le contenu d'un fichier dans un conteneur

Parmi les principales instructions utilisées dans un Dockerfile :

  • FROM: Définit l’image de base qui sera utilisée par les instructions suivantes.
  • LABEL: Ajoute des métadonnées à l’image avec un système de clés-valeurs, permet par exemple d’indiquer à l’utilisateur l’auteur du Dockerfile.
  • ARG: Variables temporaires qu’on peut utiliser dans un Dockerfile.
  • ENV: Variables d’environnements utilisables dans votre Dockerfile et conteneur.
  • RUN: Exécute des commandes Linux ou Windows lors de la création de l’image. Chaque instruction RUN va créer une couche en cache qui sera réutilisée dans le cas de modification ultérieure du Dockerfile.
  • COPY: Permet de copier des fichiers depuis notre machine locale vers le conteneur Docker.
  • ADD: Même chose que COPY mais prend en charge des liens ou des archives (si le format est reconnu, alors il sera décompressé à la volée).
  • ENTRYPOINT: comme son nom l’indique, c’est le point d’entrée de votre conteneur, en d’autres termes, c’est la commande qui sera toujours exécutée au démarrage du conteneur. Il prend la forme de tableau JSON (ex: CMD [« cmd1″, »cmd1 »]) ou de texte.
  • CMD: Spécifie les arguments qui seront envoyés au ENTRYPOINT, (on peut aussi l’utiliser pour lancer des commandes par défaut lors du démarrage d’un conteneur). Si il est utilisé pour fournir des arguments par défaut pour l’instruction ENTRYPOINT, alors les instructions CMD et ENTRYPOINT doivent être spécifiées au format de tableau JSON.
  • WORKDIR: Définit le répertoire de travail qui sera utilisé pour le lancement des commandes CMD et/ou ENTRYPOINT et ça sera aussi le dossier courant lors du démarrage du conteneur.
  • EXPOSE: Expose un port.
  • VOLUMES : Crée un point de montage qui permettra de persister les données.
  • USER: Désigne quel est l’utilisateur qui lancera les prochaines instructions RUN, CMD ou ENTRYPOINT (par défaut c’est l’utilisateur root).
  • Construire l’image Docker : Avant de commencer à créer le Dockerfile, nous disposons déjà de notre code HTML dans le fichier file.html.
Utilisation de la commande touch pour créer un nouveau fichier dans un conteneur

Ensuite, nous commençons à suivre les étapes suivantes.

  • Étape 1 : Créez un fichier nommé « Dockerfile » dans votre répertoire de travail.

 

Utilisation de la commande touch pour créer un nouveau fichier dans un conteneur
  • Étape 2: Définissez l’image de base à partir de laquelle votre image sera construite, puis ajoutez les instructions que vous souhaitez dans votre fichier Dockerfile.

Pour notre exemple, nous avons défini des instructions de base simplement à titre d’exemple.

 

Instructions d'un Dockerfile

 

  • Étape 3: Puis Exécuter la commande `docker build -t site_alphorm . ` dans le répertoire contenant le Dockerfile
Utilisation de la commande docker build pour créer une image Docker

Et voilà, nous parvenons à construire une image Docker nomée dans notre cas ‘site_alphorm’ à partir d’un fichier Dockerfile situé dans le répertoire courant (indiqué par le point « . »).

Affichage de la liste des images Docker dans le terminal

Puis nous allons passer à l’étape du test de l’image en démarrant un conteneur à partir de l’image créée par cette commande 

				
					docker run --name my-nginx -p 80:80 site_alphorm
				
			
Exécution de la commande docker run pour démarrer un conteneur Docker

Une fois le conteneur démarré, nous pouvons accéder à l’interface web Nginx via http://localhost:80 pour visualiser le site.

  • Meilleures pratiques pour écrire un Dockerfile : Ces pratiques vous aideront à rationaliser le processus de déploiement avec Docker et à vous assurer que toute maintenance future soit aussi simple que possible.
  1. Utilisez des images de base officielles
  2. Minimisez la taille de l’image en n’installant que les logiciels et dépendances essentiels
  3. Utilisez des constructions à étapes multiples pour réduire la taille de l’image finale
  4. Supprimez tous les fichiers ou artefacts inutiles après l’installation (vous pouvez utiliser le fichier .dockerignore)
  5. Utilisez le drapeau –no-cache-dir pour empêcher pip de mettre en cache les paquets téléchargés
  6. Créez des arguments sur plusieurs lignes de manière structurée en regroupant toutes les commandes RUN en une seule commande
  7. Exécutez le conteneur en tant qu’utilisateur non root par défaut.
  8. Gardez votre Dockerfile concentré sur la définition de l’image, pas comme un script de construction.

Ces meilleures pratiques vous aideront à écrire un Dockerfile qui soit efficace, sécurisé et facile à maintenir.

  • Comparaison entre la création d’images Docker avec Dockerfile et la commande 
Fonctionnalité
Dockerfile
commit
Reproductibilité
Facile – Dockerfile définit les étapes de construction de l’image.
Difficile – La commande commit ne capture pas les étapes de construction.
Flexibilité
Bonne – Permet de créer des images couche par couche et de personnaliser les configurations.
Meilleure pour les modifications ponctuelles – Permet d’ajouter des fichiers et de modifier l’environnement du conteneur.
Partage et collaboration
Facile – Dockerfile est un fichier texte simple et partageable.
Difficile – Nécessite de partager l’image et l’environnement du conteneur.
Gestion des versions
Facile – Dockerfile permet de créer et de suivre différentes versions de l’image.
Difficile – Le suivi des versions est manuel et peu précis.
Taille de l’image
Plus légère – Les images construites avec un Dockerfile ne contiennent que les éléments nécessaires
Plus lourde – Les images créées avec commit peuvent inclure des éléments non nécessaires.

Félicitations ! Vous avez franchi une étape encore vers la maîtrise de Docker. Ce chapitre vous a permis de découvrir les secrets de la création d’images Docker à partir d’un Dockerfile ou de la commande commit.

Vous pouvez désormais créer vos propres images pour vos applications et les déployer sur des serveurs de production.

Conclusion

En maîtrisant les images Docker, vous pouvez créer des environnements d’exécution cohérents et déployer vos applications avec facilité. Explorez les différentes méthodes de création pour maximiser l’efficacité et la flexibilité de vos projets. par la suite se plonger vers un autre volet qui parle des registres Docker

 

 
 
ÉTIQUETÉ : Docker
Partager cet article
Par L'Équipe Alphorm Démocratiser la Connaissance Informatique pour Tous !
Suivre :
L'Équipe Alphorm, c'est la démocratisation de la connaissance informatique. Passionnés et dévoués, nous sommes là pour vous guider vers le succès en rendant la technologie accessible à tous. Rejoignez notre aventure d'apprentissage et de partage. Avec nous, le savoir IT devient une ressource inspirante et ouverte à tous dans un monde numérique en constante évolution.
Laisser un commentaire