{"id":43169,"date":"2025-11-20T19:46:38","date_gmt":"2025-11-20T19:46:38","guid":{"rendered":"\/fr\/tutoriels\/?p=43169"},"modified":"2026-03-26T15:39:57","modified_gmt":"2026-03-26T15:39:57","slug":"tutoriel-docker","status":"publish","type":"post","link":"\/fr\/tutoriels\/tutoriel-docker","title":{"rendered":"Tutoriel Docker : guide complet pour l&rsquo;ex\u00e9cution de conteneurs"},"content":{"rendered":"<p>Docker est une plateforme ouverte con&ccedil;ue pour simplifier le processus de d&eacute;veloppement, de livraison et d&rsquo;ex&eacute;cution d&rsquo;applications. Elle rationalise la livraison de logiciels gr&acirc;ce &agrave; la<strong> conteneurisation<\/strong>, une technologie qui regroupe votre application et ses d&eacute;pendances dans des unit&eacute;s isol&eacute;es et ex&eacute;cutables appel&eacute;es <strong>conteneurs<\/strong>. Cela garantit que votre logiciel fonctionne de mani&egrave;re coh&eacute;rente, quel que soit l&rsquo;environnement.<\/p><p>Docker repose essentiellement sur plusieurs concepts cl&eacute;s : <strong><strong>Docker Engine<\/strong><\/strong>, <strong>Docker Hub<\/strong>, <strong>les images<\/strong>, <strong>les conteneurs<\/strong>, <strong>les Dockerfiles <\/strong>et <strong>Docker Compose<\/strong>. La compr&eacute;hension de tous ces composants vous permet de cr&eacute;er, de d&eacute;ployer et de g&eacute;rer des applications conteneuris&eacute;es.<\/p><p>Vous pouvez utiliser et interagir avec Docker &agrave; l&rsquo;aide de commandes, mais cette plateforme propose &eacute;galement une version de bureau avec une interface graphique. Leur processus de configuration est diff&eacute;rent : vous pouvez configurer la version de bureau comme une application <strong>.dmg <\/strong>ou <strong>.exe <\/strong>classique, tandis que l&rsquo;interface CLI n&eacute;cessite une installation via un gestionnaire de paquets tel que <strong>APT <\/strong>ou <strong>Homebrew<\/strong>.<\/p><p>Lorsque vous utilisez l&rsquo;&eacute;cosyst&egrave;me Docker, diverses erreurs peuvent se produire &agrave; n&rsquo;importe quel niveau, que ce soit sur l&rsquo;image, le fichier Dockerfile ou le conteneur lui-m&ecirc;me. Comme ces probl&egrave;mes peuvent entra&icirc;ner un dysfonctionnement de l&rsquo;ensemble du syst&egrave;me de conteneurisation, il est essentiel d&rsquo;en savoir plus sur les probl&egrave;mes courants, leurs causes et les solutions. Nous approfondirons ces questions apr&egrave;s avoir explor&eacute; les concepts essentiels de Docker.<\/p><h2 class=\"wp-block-heading\" id=\"h-qu-est-ce-que-la-conteneurisation\"><strong>Qu&rsquo;est-ce que la conteneurisation ?<\/strong><\/h2><p>La conteneurisation est une virtualisation au niveau du syst&egrave;me d&rsquo;exploitation qui regroupe des applications logicielles afin qu&rsquo;elles s&rsquo;ex&eacute;cutent dans des espaces utilisateur isol&eacute;s appel&eacute;s conteneurs.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69eb9e1731ba8\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"572\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-visualization-of-how-container-works-compared-to-a-virtual-machine-1024x572-1.png\/public\" alt=\"Une visualisation du fonctionnement des conteneurs par rapport aux machines virtuelles traditionnelles\" class=\"wp-image-43211\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-visualization-of-how-container-works-compared-to-a-virtual-machine-1024x572-1.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-visualization-of-how-container-works-compared-to-a-virtual-machine-1024x572-1.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-visualization-of-how-container-works-compared-to-a-virtual-machine-1024x572-1.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-visualization-of-how-container-works-compared-to-a-virtual-machine-1024x572-1.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Un conteneur regroupe une application avec tous ses composants n&eacute;cessaires (code, biblioth&egrave;ques syst&egrave;me, d&eacute;pendances et fichiers de configuration) afin de cr&eacute;er un environnement isol&eacute;.<\/p><p>Contrairement aux machines virtuelles (VM), les conteneurs sont l&eacute;gers car ils mutualisent le noyau du syst&egrave;me d&rsquo;exploitation commun du syst&egrave;me h&ocirc;te. Cette ind&eacute;pendance vis-&agrave;-vis de l&rsquo;infrastructure sous-jacente permet aux applications de s&rsquo;ex&eacute;cuter de mani&egrave;re coh&eacute;rente dans diff&eacute;rents environnements.<\/p><p>Les avantages de la conteneurisation sont les suivants :<\/p><ul class=\"wp-block-list\">\n<li><strong>Portabilit&eacute;<\/strong>. Les conteneurs s&rsquo;ex&eacute;cutent de mani&egrave;re coh&eacute;rente dans n&rsquo;importe quel environnement, qu&rsquo;il s&rsquo;agisse d&rsquo;une machine locale ou d&rsquo;un serveur distant de fournisseurs tels que Hostinger. Cela &eacute;limine le probl&egrave;me courant des applications qui rencontrent des probl&egrave;mes de compatibilit&eacute; lorsqu&rsquo;elles subissent un transfert vers diff&eacute;rents syst&egrave;mes lors du d&eacute;ploiement ou de la collaboration.<\/li>\n\n\n\n<li><strong>Efficacit&eacute;<\/strong>. Alors que les VM n&eacute;cessitent un syst&egrave;me d&rsquo;exploitation invit&eacute; complet et un hyperviseur, ce n&rsquo;est pas le cas des conteneurs. Cette capacit&eacute; en fait une forme de virtualisation plus l&eacute;g&egrave;re et plus efficace.<\/li>\n\n\n\n<li><strong>Isolement<\/strong>. Chaque conteneur ex&eacute;cute des processus isol&eacute;s, avec son propre logiciel, sa propre configuration, sa propre pile r&eacute;seau et ses propres variables d&rsquo;environnement. Cela renforce la s&eacute;curit&eacute; et &eacute;vite les conflits entre les applications.<\/li>\n<\/ul><h3 class=\"wp-block-heading\" id=\"h-pourquoi-utiliser-docker\"><strong>Pourquoi utiliser Docker ?<\/strong><\/h3><p>Vous devriez utiliser <a href=\"https:\/\/www.hostinger.com\/fr\/tutoriels\/docker-c-est-quoi\"><strong>Docker<\/strong><\/a> car il offre un moyen fiable, efficace et standardis&eacute; de cr&eacute;er, mutualiser et ex&eacute;cuter des applications. Il r&eacute;sout plusieurs probl&egrave;mes concrets li&eacute;s au d&eacute;veloppement et au d&eacute;ploiement de logiciels :<\/p><ul class=\"wp-block-list\">\n<li><strong>Le probl&egrave;me &laquo; mais &ccedil;a marche sur <\/strong><strong><em>ma <\/em><\/strong><strong>machine &raquo;. <\/strong>Docker garantit qu&rsquo;une application s&rsquo;ex&eacute;cute exactement de la m&ecirc;me mani&egrave;re pour chaque d&eacute;veloppeur et &agrave; chaque &eacute;tape de la production, &eacute;liminant ainsi les bogues li&eacute;s &agrave; l&rsquo;environnement.<\/li>\n\n\n\n<li><strong>D&eacute;veloppement et d&eacute;ploiement rapides<\/strong>. Il simplifie le processus de cr&eacute;ation d&rsquo;un environnement reproductible. Les d&eacute;veloppeurs peuvent int&eacute;grer des fonctionnalit&eacute;s telles que des cartes ou des passerelles de paiement sans avoir &agrave; les cr&eacute;er &agrave; partir de z&eacute;ro, ce qui permet de gagner du temps.<\/li>\n\n\n\n<li><strong>&Eacute;volutivit&eacute; et portabilit&eacute;<\/strong>. &Agrave; l&rsquo;aide d&rsquo;outils tels que Docker Compose, vous pouvez d&eacute;finir une pile d&rsquo;applications multi-conteneurs complexe dans un seul fichier et la partager facilement, ce qui garantit la coh&eacute;rence entre les &eacute;quipes et permet de faire &eacute;voluer les services selon les besoins.<\/li>\n\n\n\n<li><strong>Efficacit&eacute; des ressources<\/strong>. Les conteneurs &eacute;tant l&eacute;gers et utilisant un noyau mutualis&eacute; du syst&egrave;me d&rsquo;exploitation h&ocirc;te, ils n&eacute;cessitent moins de ressources que les machines virtuelles traditionnelles.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-quels-sont-les-concepts-fondamentaux-de-docker\"><strong>Quels sont les concepts fondamentaux de Docker ?<\/strong><\/h2><p>Docker organise le concept de conteneurisation en un ensemble de composants fondamentaux interd&eacute;pendants. Ces &eacute;l&eacute;ments fonctionnent ensemble comme une plateforme permettant de g&eacute;rer l&rsquo;ensemble du cycle de vie d&rsquo;une application conteneuris&eacute;e, depuis la cr&eacute;ation du plan initial jusqu&rsquo;&agrave; l&rsquo;ex&eacute;cution de l&rsquo;application multiservice finale.<\/p><h3 class=\"wp-block-heading\" id=\"h-docker-engine\"><strong><strong>Docker Engine<\/strong><\/strong><\/h3><p>Docker Engine est la technologie open source fondamentale pour cr&eacute;er et conteneuriser vos applications. Il utilise une architecture client-serveur pour g&eacute;rer tous les objets Docker, tels que les images, les conteneurs et les r&eacute;seaux.<\/p><p>Les trois principales composantes du moteur Docker sont les suivantes :<\/p><ol class=\"wp-block-list\">\n<li><strong>Le serveur<\/strong>. Un processus d&eacute;mon &agrave; ex&eacute;cution longue (dockerd) qui g&egrave;re toutes les t&acirc;ches importantes, telles que la cr&eacute;ation, l&rsquo;ex&eacute;cution et la destruction de conteneurs.<\/li>\n\n\n\n<li><strong>Les API<\/strong>. Interfaces qui permettent aux programmes, y compris Docker CLI, de communiquer avec le d&eacute;mon et de lui donner des instructions.<\/li>\n\n\n\n<li><strong>Le client CLI<\/strong>. L&rsquo;outil en ligne de commande<strong> Docker<\/strong>, qui est le principal moyen pour les utilisateurs d&rsquo;interagir avec la plateforme.<\/li>\n<\/ol><p>Pour mieux comprendre ce concept, imaginez le <strong>moteur Docker <\/strong>comme le chef, la cuisine et le serveur d&rsquo;un restaurant.<\/p><ul class=\"wp-block-list\">\n<li>Le <strong>serveur (dockerd) <\/strong>est le <strong>chef <\/strong>qui pr&eacute;pare les plats, ou ex&eacute;cute le conteneur dans le contexte de Docker.<\/li>\n\n\n\n<li>Les <strong>API <\/strong>sont le <strong>menu et les bons de commande <\/strong>qui indiquent au chef ce qu&rsquo;il doit pr&eacute;parer.<\/li>\n\n\n\n<li>La<strong> CLI Docker <\/strong>est le <strong>serveur <\/strong>qui prend vos commandes sous forme de commandes et transmet ces demandes &agrave; la cuisine.<\/li>\n<\/ul><p>Pour v&eacute;rifier si votre moteur Docker fonctionne et est connect&eacute; au client, il suffit d&rsquo;ex&eacute;cuter une commande pour voir s&rsquo;il r&eacute;pond &agrave; votre demande. Par exemple, ex&eacute;cutez la commande suivante :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker ps<\/pre><p>Cette commande demande au <strong><strong>Docker Daemon<\/strong> <\/strong>de lister tous les<strong> conteneurs actuellement en cours d&rsquo;ex&eacute;cution<\/strong>. Si le moteur Docker fonctionne correctement, il devrait afficher une liste des conteneurs en cours d&rsquo;ex&eacute;cution.<\/p><h3 class=\"wp-block-heading\" id=\"h-docker-hub\"><strong>Docker Hub<\/strong><\/h3><p><strong>Docker Hub <\/strong>est le registre Docker public par d&eacute;faut, un service de stockage et de distribution d&rsquo;images Docker. Il h&eacute;berge des images officielles pour des logiciels populaires tels que <strong>nginx<\/strong>, <strong>node <\/strong>et <strong>python<\/strong>, et permet aux utilisateurs de cr&eacute;er des r&eacute;f&eacute;rentiels priv&eacute;s pour leurs images personnalis&eacute;es.<\/p><p>Lorsque vous cr&eacute;ez un conteneur, vous devez installer divers progiciels &agrave; partir d&rsquo;images. Docker Hub simplifie le processus en vous permettant de t&eacute;l&eacute;charger des images &agrave; partir d&rsquo;un r&eacute;f&eacute;rentiel centralis&eacute;.<\/p><p>Docker Hub utilise des <strong>balises <\/strong>pour &eacute;tiqueter et identifier les images, qui d&eacute;signent une version sp&eacute;cifique du paquet logiciel, telle que <strong><strong>latest<\/strong><\/strong>. Cela permet de maintenir la coh&eacute;rence et la fonctionnalit&eacute; des conteneurs dans diff&eacute;rents environnements.<\/p><p>Consid&eacute;rez Docker Hub comme une <strong>biblioth&egrave;que communautaire de livres de recettes<\/strong>. Il stocke des recettes pr&eacute;-&eacute;crites pour des plats courants que tout le monde peut t&eacute;l&eacute;charger et utiliser pour cr&eacute;er un repas. Vous pouvez &eacute;galement t&eacute;l&eacute;verser vos propres recettes pour les partager ou les conserver comme sauvegardes priv&eacute;es.<\/p><p>Vous pouvez interagir avec Docker Hub &agrave; l&rsquo;aide de la commande Docker. Par exemple, utilisez la commande suivante pour t&eacute;l&eacute;charger une image &agrave; partir du registre :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker pull &lt;name&gt;:&lt;tag&gt;<\/pre><p>Par exemple, pour t&eacute;l&eacute;charger la derni&egrave;re image officielle d&rsquo;Ubuntu :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker pull ubuntu:latest<\/pre><h3 class=\"wp-block-heading\" id=\"h-images-docker\"><strong>Images Docker<\/strong><\/h3><p>Une image Docker est un template en lecture seule qui contient toutes les instructions et tous les fichiers n&eacute;cessaires &agrave; la cr&eacute;ation d&rsquo;un conteneur Docker. Elle regroupe le code de l&rsquo;application, les fichiers de configuration, les biblioth&egrave;ques syst&egrave;me et les fichiers du syst&egrave;me d&rsquo;exploitation de base.<\/p><p>Les images sont construites &agrave; partir d&rsquo;un fichier Dockerfile, o&ugrave; chaque instruction cr&eacute;e une couche distincte et immuable qui d&eacute;finit ce que l&rsquo;image doit contenir ou faire.<\/p><p>En termes simples, une image est le plan d&rsquo;une machine. Elle contient un ensemble d&rsquo;instructions d&eacute;taillant exactement ce que le produit final doit contenir, mais elle ne peut pas &ecirc;tre modifi&eacute;e une fois cr&eacute;&eacute;e. Lorsque vous suivez le plan, vous cr&eacute;ez un conteneur Docker.<\/p><p>Pour r&eacute;pertorier les images que vous avez t&eacute;l&eacute;charg&eacute;es localement, utilisez :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker images<\/pre><p>Ensuite, la commande suivante cr&eacute;e un conteneur dans votre r&eacute;pertoire actuel &agrave; l&rsquo;aide d&rsquo;une image sp&eacute;cifique. Si l&rsquo;image n&rsquo;est pas d&eacute;j&agrave; t&eacute;l&eacute;charg&eacute;e, Docker la r&eacute;cup&eacute;rera automatiquement depuis le Hub :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker build -t nom-de-votre-image:latest .<\/pre><p>La meilleure pratique lors de l&rsquo;utilisation d&rsquo;images consiste &agrave; utiliser une <a href=\"https:\/\/docs.docker.com\/build\/building\/base-images\/\" target=\"_blank\" rel=\"noopener\"><strong>image de base<\/strong><\/a> minimale afin de r&eacute;duire la taille et de minimiser la surface d&rsquo;attaque potentielle g&eacute;n&eacute;ralement introduite par des paquets ou des composants inutiles.<\/p><h3 class=\"wp-block-heading\" id=\"h-conteneurs-docker\"><strong>Conteneurs Docker<\/strong><\/h3><p>Un conteneur est une instance ex&eacute;cutable d&rsquo;une image. Il s&rsquo;agit d&rsquo;un espace isol&eacute; dans lequel votre application s&rsquo;ex&eacute;cute, avec sa configuration, ses d&eacute;pendances et les paquets logiciels requis.<\/p><p>Lorsque vous cr&eacute;ez un conteneur Docker, une couche inscriptible est ajout&eacute;e au-dessus des couches en lecture seule de l&rsquo;image, ce qui vous permet d&rsquo;apporter des modifications aux fichiers dans son syst&egrave;me de fichiers local.<\/p><p>Les conteneurs sont con&ccedil;us pour &ecirc;tre &eacute;ph&eacute;m&egrave;res ou sans &eacute;tat, ce qui signifie qu&rsquo;ils peuvent &ecirc;tre arr&ecirc;t&eacute;s, d&eacute;truits, reconstruits et remplac&eacute;s avec une configuration minimale. Un conteneur individuel est g&eacute;r&eacute; avec l&rsquo;interface CLI Docker, tandis que plusieurs conteneurs sont administr&eacute;s &agrave; l&rsquo;aide de <strong>Docker Compose <\/strong>ou d&rsquo;un outil d&rsquo;orchestration tel que Kubernetes.<\/p><p>En utilisant la m&ecirc;me analogie, un conteneur est l&rsquo;appareil ou la machine r&eacute;elle en cours d&rsquo;ex&eacute;cution, construite &agrave; partir du plan ou de l&rsquo;image. Lorsque vous cr&eacute;ez un conteneur Docker, vous assemblez et d&eacute;marrez cette machine pour ex&eacute;cuter les processus d&eacute;finis dans l&rsquo;image.<\/p><p><a href=\"https:\/\/www.hostinger.com\/fr\/tutoriels\/comment-creer-un-conteneur-docker\" data-type=\"link\" data-id=\"https:\/\/www.hostinger.com\/fr\/tutoriels\/comment-creer-un-conteneur-docker\">Pour cr&eacute;er un conteneur Docker<\/a> et y ex&eacute;cuter une commande, il suffit d&rsquo;utiliser la commande run :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -it ubuntu \/bin\/bash<\/pre><p>Cette commande ex&eacute;cute l&rsquo;image <strong>Ubuntu<\/strong>, d&eacute;marre un conteneur interactif et ex&eacute;cute le shell<strong> \/bin\/bash<\/strong>.<\/p><h3 class=\"wp-block-heading\" id=\"h-dockerfiles\"><strong>Dockerfiles<\/strong><\/h3><p>Un <strong>Dockerfile <\/strong>est un fichier texte brut qui contient une s&eacute;quence d&rsquo;instructions &eacute;tape par &eacute;tape pour cr&eacute;er une image Docker. Il d&eacute;finit tout, du syst&egrave;me d&rsquo;exploitation de base aux variables d&rsquo;environnement et au code de l&rsquo;application.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69eb9e173329c\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"445\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-flow-of-building-a-container-from-a-dockerfile-2-1024x445-1.png\/public\" alt=\"Un flux illustrant le processus de cr&eacute;ation d'un conteneur Docker &agrave; partir d'un fichier Dockerfile.\" class=\"wp-image-43212\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-flow-of-building-a-container-from-a-dockerfile-2-1024x445-1.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-flow-of-building-a-container-from-a-dockerfile-2-1024x445-1.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-flow-of-building-a-container-from-a-dockerfile-2-1024x445-1.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2025\/11\/a-flow-of-building-a-container-from-a-dockerfile-2-1024x445-1.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Agrandir\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Voici quelques-unes des instructions cl&eacute;s les plus courantes dans un Dockerfile et leur objectif :<\/p><ul class=\"wp-block-list\">\n<li><strong>FROM. <\/strong>Sp&eacute;cifie l&rsquo;image de base pour une nouvelle &eacute;tape de construction.<\/li>\n\n\n\n<li><strong>RUN. <\/strong>Ex&eacute;cute des commandes pendant le processus de cr&eacute;ation de l&rsquo;image.<\/li>\n\n\n\n<li><strong>COPY ou ADD. <\/strong>Copie les fichiers du contexte de construction dans l&rsquo;image.<\/li>\n\n\n\n<li><strong>CMD ou ENTRYPOINT. <\/strong>D&eacute;finit la commande qui s&rsquo;ex&eacute;cute au d&eacute;marrage du conteneur.<\/li>\n\n\n\n<li><strong>ENV. <\/strong>D&eacute;finit les variables d&rsquo;environnement qui seront disponibles pendant la construction et lors de l&rsquo;ex&eacute;cution.<\/li>\n\n\n\n<li><strong>WORKDIR. <\/strong>D&eacute;finit le r&eacute;pertoire de travail pour les instructions RUN, CMD, ENTRYPOINT, COPY et ADD suivantes.<\/li>\n<\/ul><p>Certaines instructions Dockerfile cr&eacute;ent une <strong>couche<\/strong>, une &eacute;tape dans le processus de cr&eacute;ation de l&rsquo;image. Cependant, les instructions qui d&eacute;finissent la configuration ou les m&eacute;tadonn&eacute;es, comme <strong>WORKDIR<\/strong>, ne le font pas.<\/p><p>Voici un exemple de ce &agrave; quoi ressemble un fichier Dockerfile :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">FROM python:3.9-slim\nWORKDIR \/app\nCOPY requirements.txt .\nRUN pip install -r requirements.txt\nCOPY . .\nCMD [\"python\", \"app.py\"]<\/pre><h3 class=\"wp-block-heading\" id=\"h-docker-compose\"><strong>Docker Compose<\/strong><\/h3><p><strong>Docker Compose <\/strong>est un outil qui simplifie la d&eacute;finition et la gestion d&rsquo;<strong>applications multi-conteneurs <\/strong>&agrave; l&rsquo;aide d&rsquo;un seul fichier de configuration, g&eacute;n&eacute;ralement nomm&eacute; <strong>docker-compose.yml<\/strong>.<\/p><p>Dans ce fichier de configuration<strong>, <\/strong>les d&eacute;veloppeurs peuvent d&eacute;finir tous les conteneurs, r&eacute;seaux et volumes n&eacute;cessaires &agrave; la cr&eacute;ation d&rsquo;une pile d&rsquo;applications complexe. Ils peuvent ensuite d&eacute;marrer et g&eacute;rer tous les conteneurs, &eacute;galement appel&eacute;s services dans le contexte de <a href=\"https:\/\/www.hostinger.com\/fr\/tutoriels\/docker-compose-cest-quoi\"><strong>Docker Compose<\/strong><\/a>, &agrave; l&rsquo;aide d&rsquo;une seule commande.<\/p><p>Sans Docker Compose, vous devrez configurer manuellement chaque conteneur dans votre image et les g&eacute;rer individuellement &agrave; l&rsquo;aide de l&rsquo;interface CLI Docker. Si votre application comprend plusieurs services interconnect&eacute;s, ce processus est fastidieux et prend beaucoup de temps.<\/p><p>Si un conteneur est un appareil unique, Docker Compose est le sch&eacute;ma de c&acirc;blage d&rsquo;une cuisine enti&egrave;re. Il d&eacute;finit comment le four, le r&eacute;frig&eacute;rateur et le grille-pain sont tous connect&eacute;s et mis sous tension ensemble &agrave; l&rsquo;aide d&rsquo;un seul interrupteur pour remplir leur fonction dans la cuisine.<\/p><p>Voici un exemple de fichier Docker Compose :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">services:\n  web:\n    build: .\/web  # Construire l'image &agrave; partir de Dockerfile dans le r&eacute;pertoire .\/web\n    ports:\n      - \"8000:8000\"  # Mapper le port h&ocirc;te 8000 au port conteneur 8000\n    depends_on:\n      - db     # Attendre que le service db soit d&eacute;marr&eacute;\n      - redis  # Attendre que le service redis soit d&eacute;marr&eacute;\n\n  db:\n    image: postgres:15  # Utiliser l'image officielle PostgreSQL 15\n    environment:\n      POSTGRES_USER: myuser       # D&eacute;finir le nom d'utilisateur de la base de donn&eacute;es\n      POSTGRES_PASSWORD: mypassword  # D&eacute;finir le mot de passe de la base de donn&eacute;es\n      POSTGRES_DB: mydb           # D&eacute;finir le nom initial de la base de donn&eacute;es\n    volumes:\n      - db-data:\/var\/lib\/postgresql\/data  # Conserver les donn&eacute;es de la base de donn&eacute;es &agrave; l'aide d'un volume nomm&eacute;\n\n  redis:\n    image: redis:alpine  # Utiliser une image Redis l&eacute;g&egrave;re pour la mise en cache \n\nvolumes:\n  db-data:  # D&eacute;finir un volume nomm&eacute; pour stocker les donn&eacute;es de la base de donn&eacute;es<\/pre><p>Pour cr&eacute;er et d&eacute;marrer tous les services d&eacute;finis dans votre fichier <strong>docker-compose.yml <\/strong>en arri&egrave;re-plan, ex&eacute;cutez la commande avec le drapeau <strong>-d <\/strong>ou detached :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose up -d<\/pre><p>Il existe d&rsquo;autres commandes <strong><strong>docker compose<\/strong> <\/strong>qui vous permettent de g&eacute;rer tous les conteneurs simultan&eacute;ment tout au long du cycle de vie de l&rsquo;application. Pour en savoir plus &agrave; leur sujet, consultez notre tutoriel Qu&rsquo;est-ce que Docker Compose.<\/p><h2 class=\"wp-block-heading\" id=\"h-comment-installer-docker\"><strong>Comment installer Docker<\/strong><\/h2><p>Le processus d&rsquo;installation de Docker diff&egrave;re selon son type. Si vous utilisez Docker Desktop, vous pouvez simplement t&eacute;l&eacute;charger le package d&rsquo;installation depuis la page officielle et le d&eacute;compresser comme vous le feriez avec d&rsquo;autres applications.<\/p><p>Par ailleurs, vous pouvez <a href=\"https:\/\/www.hostinger.com\/fr\/tutoriels\/installer-docker-sur-ubuntu\"><strong>installer Docker CLI<\/strong><\/a> &agrave; l&rsquo;aide de commandes via le gestionnaire de paquets de votre syst&egrave;me, comme APT pour Ubuntu ou Homebrew pour macOS. Consultez la documentation officielle pour en savoir plus sur les commandes permettant de <a href=\"https:\/\/docs.docker.com\/engine\/install\/\" target=\"_blank\" rel=\"noopener\"><strong>configurer Docker<\/strong><\/a> sur votre syst&egrave;me d&rsquo;exploitation.<\/p><p>Notez que Docker CLI ne comprend pas certaines fonctionnalit&eacute;s, telles que Docker Compose, ce qui signifie que vous devez l&rsquo;installer s&eacute;par&eacute;ment. Si vous utilisez la solution d&rsquo;<a href=\"https:\/\/www.hostinger.com\/fr\/docker-hosting\"><strong>h&eacute;bergement Docker<\/strong><\/a> de Hostinger, vous n&rsquo;avez pas besoin de le configurer s&eacute;par&eacute;ment, car notre fonctionnalit&eacute; Docker Manager int&eacute;gr&eacute;e dispose d&rsquo;une fonctionnalit&eacute; Compose.<\/p><figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.hostinger.com\/fr\/vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/public\" alt=\"\" class=\"wp-image-41471\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><h3 class=\"wp-block-heading\" id=\"h-comprendre-les-commandes-docker-de-base\"><strong>Comprendre les commandes Docker de base<\/strong><\/h3><p>Utilisez l&rsquo;interface CLI Docker pour interagir avec Docker Engine et g&eacute;rer vos conteneurs. Voici quelques-unes des <strong>commandes Docker<\/strong> les plus essentielles pour diff&eacute;rentes t&acirc;ches :<\/p><ul class=\"wp-block-list\">\n<li><strong>docker ps -a. <\/strong>R&eacute;pertorie <strong>tous <\/strong>les conteneurs, y compris ceux qui sont arr&ecirc;t&eacute;s.<\/li>\n\n\n\n<li><strong>docker pull &lt;nom&gt;:&lt;balise&gt;. <\/strong>T&eacute;l&eacute;charge une image depuis le registre vers votre machine locale.<\/li>\n\n\n\n<li><strong>docker rmi &lt;image&gt;. <\/strong>Supprime une image locale.<\/li>\n\n\n\n<li><strong>docker stop &lt;conteneur&gt;. <\/strong>Arr&ecirc;te en douceur un conteneur en cours d&rsquo;ex&eacute;cution.<\/li>\n\n\n\n<li><strong>docker rm &lt;conteneur&gt;. <\/strong>Supprime un conteneur.<\/li>\n<\/ul><p>Pour une r&eacute;f&eacute;rence compl&egrave;te des commandes les plus utilis&eacute;es pour les images, les conteneurs, les volumes et plus encore, consultez notre <a href=\"https:\/\/www.hostinger.com\/fr\/tutoriels\/cheat-sheet-docker\">cheat sheet Docker<\/a> complet.<\/p><h2 class=\"wp-block-heading\" id=\"h-comment-gerer-les-volumes-docker\"><strong>Comment g&eacute;rer les volumes Docker<\/strong><\/h2><p>Les <strong>volumes <\/strong>sont le m&eacute;canisme privil&eacute;gi&eacute; et principal pour maintenir la persistance des donn&eacute;es dans Docker, garantissant que les donn&eacute;es restent accessibles m&ecirc;me apr&egrave;s la suppression d&rsquo;un conteneur.<\/p><p>Ceci est important car, tout au long du cycle de vie du conteneur, vous pouvez &ecirc;tre amen&eacute; &agrave; le supprimer pour effectuer des mises &agrave; jour ou des op&eacute;rations de maintenance. Si ce conteneur ex&eacute;cute des applications telles qu&rsquo;une base de donn&eacute;es o&ugrave; l&rsquo;int&eacute;grit&eacute; des donn&eacute;es est essentielle, il est indispensable de configurer des volumes appropri&eacute;s.<\/p><p>Docker propose trois types principaux de stockage :<\/p><ul class=\"wp-block-list\">\n<li><strong>Volumes. <\/strong>Donn&eacute;es persistantes de vos conteneurs dans la zone de stockage Docker, qui est g&eacute;n&eacute;ralement <strong>\/var\/lib\/docker\/volumes\/ <\/strong>sur le syst&egrave;me h&ocirc;te.<\/li>\n\n\n\n<li><strong>Bind mounts. <\/strong>Mappez un fichier ou un r&eacute;pertoire de la machine h&ocirc;te directement dans le conteneur.<\/li>\n\n\n\n<li><strong><strong>tmpfs mounts<\/strong>. <\/strong>Stockez les donn&eacute;es dans la m&eacute;moire de l&rsquo;h&ocirc;te, qui sont perdues lorsque le conteneur s&rsquo;arr&ecirc;te.<\/li>\n<\/ul><p>Voici les &eacute;tapes &agrave; suivre pour cr&eacute;er et g&eacute;rer un volume pour les donn&eacute;es persistantes :<\/p><ol class=\"wp-block-list\">\n<li>Cr&eacute;ez un volume nomm&eacute; &agrave; l&rsquo;aide de la commande suivante. Par exemple, cela permettra de configurer un volume appel&eacute; <strong>my-database-data :<\/strong><\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker volume create my-database-data<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>D&eacute;marrez votre conteneur de base de donn&eacute;es en utilisant l&rsquo;option<strong> -v <\/strong>pour mapper le volume nomm&eacute; au r&eacute;pertoire de donn&eacute;es interne du conteneur. La commande ressemble &agrave; ceci :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d \\\n  --name my-database \\\n  -e MYSQL_ROOT_PASSWORD=securepassword \\\n  -v my-database-data:\/var\/lib\/mysql \\\n  mysql:latest<\/pre><ol start=\"3\" class=\"wp-block-list\">\n<li>Inspectez les d&eacute;tails et l&rsquo;emplacement du volume sur l&rsquo;h&ocirc;te en ex&eacute;cutant :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker volume inspect my-database-data<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li>Pour supprimer les volumes inutilis&eacute;s qui ne sont attach&eacute;s &agrave; aucun conteneur et lib&eacute;rer de l&rsquo;espace disque, utilisez :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker volume prune -a<\/pre><p>Au lieu d&rsquo;utiliser des commandes, vous pouvez d&eacute;clarer et monter un volume en &eacute;crivant la configuration dans le fichier YAML de Docker Compose. Cela vous aide &agrave; suivre plus facilement les volumes utilis&eacute;s par chaque conteneur, ce qui est utile lorsque vous avez plusieurs services.<\/p><p>Par exemple, la configuration YAML suivante couvre les &eacute;tapes de cr&eacute;ation d&rsquo;un volume et de montage d&rsquo;un conteneur ci-dessus :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">services:\n\n  my-database:\n\n    image: mysql:latest\n\n    container_name: my-database\n\n    environment:\n      MYSQL_ROOT_PASSWORD: securepassword\n\n    volumes:\n      - my-database-data:\/var\/lib\/mysql\n\nvolumes:\n  my-database-data:<\/pre><h2 class=\"wp-block-heading\" id=\"h-comment-creer-un-reseau-docker\"><strong>Comment cr&eacute;er un r&eacute;seau Docker<\/strong><\/h2><p>Les r&eacute;seaux Docker maintiennent l&rsquo;isolation et permettent la communication entre les conteneurs et les syst&egrave;mes externes. Par d&eacute;faut, les conteneurs sont connect&eacute;s &agrave; un <strong>r&eacute;seau pont. <\/strong>Pour configurer la communication pour une application multiservice, vous devez cr&eacute;er un r&eacute;seau pont d&eacute;fini par l&rsquo;utilisateur.<\/p><p>Les r&eacute;seaux Docker permettent aux conteneurs de communiquer entre eux et avec des syst&egrave;mes externes.<\/p><p>Par d&eacute;faut, Docker connecte un conteneur &agrave; un r&eacute;seau sp&eacute;cial appel&eacute; <strong>r&eacute;seau pont par d&eacute;faut<\/strong>, qui lui permet de communiquer avec l&rsquo;h&ocirc;te. Cependant, ce r&eacute;seau pont par d&eacute;faut n&rsquo;est pas adapt&eacute; aux configurations multi-conteneurs, car il offre des fonctionnalit&eacute;s limit&eacute;es pour permettre aux services de se connecter les uns aux autres.<\/p><p>Pour les applications multiservices, la meilleure pratique consiste &agrave; cr&eacute;er un r&eacute;seau pont d&eacute;fini par l&rsquo;utilisateur qui permet aux conteneurs de communiquer entre eux &agrave; l&rsquo;aide de leurs noms de service. Cela simplifie la d&eacute;couverte des services, am&eacute;liore le contr&ocirc;le de l&rsquo;interaction entre les conteneurs et minimise les interf&eacute;rences entre les services.<\/p><p>Vous pouvez connecter un conteneur &agrave; un r&eacute;seau pont d&eacute;fini par l&rsquo;utilisateur en ajoutant la directive <strong>networks <\/strong>&agrave; la configuration du service dans le fichier YAML de Docker Compose. Voici un exemple :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">services:\n\n  my-database:\n\n    image: mysql:latest\n\n    container_name: my-database\n\n    environment:\n      MYSQL_ROOT_PASSWORD: securepassword\n\n    volumes:\n      - my-database-data:\/var\/lib\/mysql\n\n    networks:\n      - my-app-network #cr&eacute;er un r&eacute;seau<\/pre><p>Vous pouvez &eacute;galement cr&eacute;er un r&eacute;seau pont d&eacute;fini par l&rsquo;utilisateur &agrave; l&rsquo;aide de la commande suivante, en lui donnant le nom <strong>my-app-network <\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker network create my-app-network<\/pre><p>Vous pouvez ensuite d&eacute;marrer votre conteneur &agrave; l&rsquo;aide de l&rsquo;interface CLI Docker avec l&rsquo;option<strong> &ndash;name <\/strong>pour d&eacute;finir le nom du service et <strong>&ndash;network <\/strong>pour sp&eacute;cifier le r&eacute;seau auquel il se connecte. Voici un exemple :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d \\\n  --name my-database \\\n  --network my-app-network \\\n  -e MYSQL_ROOT_PASSWORD=securepassword \\\n  -v my-database-data:\/var\/lib\/mysql \\\n  mysql:latest<\/pre><p>Si vous souhaitez ex&eacute;cuter et vous connecter &agrave; un autre conteneur, r&eacute;p&eacute;tez simplement la commande en mettant &agrave; jour les informations relatives au service. Dans l&rsquo;exemple suivant, nous ajoutons un indicateur <strong>-p <\/strong>suppl&eacute;mentaire pour publier le <strong>port <\/strong>interne<strong> 80 <\/strong>du conteneur sur le <strong>port 8080 <\/strong>de la machine h&ocirc;te afin de permettre un acc&egrave;s externe :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d \\\n  --name my-webapp \\\n  --network my-app-network \\\n  -p 8080:80 \\\n  my-web-app-image:latest<\/pre><h2 class=\"wp-block-heading\" id=\"h-depannage-des-problemes-courants-lies-a-docker\"><strong>D&eacute;pannage des probl&egrave;mes courants li&eacute;s &agrave; Docker<\/strong><\/h2><p>Lorsque vous travaillez avec Docker, les points de d&eacute;faillance courants concernent g&eacute;n&eacute;ralement le syst&egrave;me en couches, notamment les images, les conteneurs, les volumes et les r&eacute;seaux. Ci-dessous, nous allons d&eacute;tailler les probl&egrave;mes r&eacute;currents et leurs solutions.<\/p><h3 class=\"wp-block-heading\" id=\"h-le-conteneur-se-ferme-immediatement\"><strong>Le conteneur se ferme imm&eacute;diatement<\/strong><\/h3><p>Les conteneurs peuvent s&rsquo;arr&ecirc;ter imm&eacute;diatement apr&egrave;s leur d&eacute;marrage parce que leur processus principal, d&eacute;fini par <strong>CMD <\/strong>ou <strong>ENTRYPOINT <\/strong>dans le fichier Dockerfile, termine son ex&eacute;cution ou plante. Une cause courante est que Docker Engine tente d&rsquo;ex&eacute;cuter un service en arri&egrave;re-plan sans utiliser le mode d&eacute;tach&eacute;.<\/p><p>Voici quelques solutions &agrave; cette erreur :<\/p><ul class=\"wp-block-list\">\n<li><strong>V&eacute;rifiez les journaux. <\/strong>Utilisez <strong>docker logs &lt;container_name&gt; <\/strong>pour afficher les sorties <strong>stdout <\/strong>et <strong>stderr <\/strong>de l&rsquo;application et identifier la raison du plantage.<\/li>\n\n\n\n<li><strong>Inspectez les directives du fichier Dockerfile. <\/strong>Assurez-vous que le conteneur ex&eacute;cute un processus de longue dur&eacute;e en v&eacute;rifiant si le fichier Dockerfile contient <strong>CMD <\/strong>ou <strong>ENTRYPOINT<\/strong>. Par exemple, un serveur web doit rester en fonctionnement pour r&eacute;pondre aux requ&ecirc;tes.<\/li>\n\n\n\n<li><strong>Ex&eacute;cutez en mode d&eacute;tach&eacute;. <\/strong>Si l&rsquo;application est un service &agrave; ex&eacute;cution longue et que vous souhaitez qu&rsquo;elle s&rsquo;ex&eacute;cute en arri&egrave;re-plan, veillez &agrave; utiliser le drapeau <strong>-d <\/strong>ou <strong>&ndash;detach <\/strong>lorsque vous ex&eacute;cutez <strong>docker run <\/strong>ou <strong>docker compose run<\/strong>.<\/li>\n<\/ul><h3 class=\"wp-block-heading\" id=\"h-problemes-de-mise-en-cache-des-couches-d-image\"><strong>Probl&egrave;mes de mise en cache des couches d&rsquo;image<\/strong><\/h3><p>Si les modifications apport&eacute;es &agrave; votre fichier Dockerfile (telles que la mise &agrave; jour d&rsquo;une version de package) ne semblent pas prendre effet, vous rencontrez peut-&ecirc;tre un probl&egrave;me avec la mise en cache des couches de Docker. Ce m&eacute;canisme r&eacute;utilise les couches pr&eacute;c&eacute;demment cr&eacute;&eacute;es pour acc&eacute;l&eacute;rer le processus de cr&eacute;ation d&rsquo;images, plut&ocirc;t que de les recr&eacute;er &agrave; partir de z&eacute;ro.<\/p><p>Bien que cela am&eacute;liore l&rsquo;efficacit&eacute;, cela peut poser des probl&egrave;mes lorsque des modifications sont apport&eacute;es aux premi&egrave;res couches du fichier Dockerfile, car les instructions suivantes deviennent alors invalides.<\/p><p>La solution la plus simple &agrave; ce probl&egrave;me consiste &agrave; forcer une reconstruction compl&egrave;te et &agrave; ignorer le cache de couches. Pour ce faire, ajoutez l&rsquo;option<strong> &ndash;no-cache <\/strong>lors du lancement du processus de construction, comme dans la commande suivante :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker build --no-cache -t my-app:latest .<\/pre><p>Lorsque vous installez des paquets &agrave; l&rsquo;aide d&rsquo;un fichier Dockerfile, incluez &eacute;galement explicitement une commande qui emp&ecirc;che le gestionnaire de paquets de r&eacute;utiliser d&rsquo;anciennes couches contenant des listes de paquets obsol&egrave;tes. Dans les distributions bas&eacute;es sur Debian, vous pouvez y parvenir en combinant <strong>apt-get update <\/strong>et <strong>apt-get install -y &ndash;no-install-recommend <\/strong>dans la m&ecirc;me instruction<strong> RUN<\/strong>, comme suit :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">RUN apt-get update &amp;&amp; apt-get install -y --no-install-recommends<\/pre><h3 class=\"wp-block-heading\" id=\"h-echec-de-l-authentification-du-registre\"><strong>&Eacute;chec de l&rsquo;authentification du registre<\/strong><\/h3><p>Si vous recevez une erreur du type <strong>&laquo; denied: requested access to the resource is denied &raquo; (refus&eacute; : l&rsquo;acc&egrave;s &agrave; la ressource demand&eacute; est refus&eacute;) <\/strong>lorsque vous poussez une image vers un registre, tel que Docker Hub, cela signifie que le client <strong>CLI Docker <\/strong>n&rsquo;a pas &eacute;t&eacute; authentifi&eacute; aupr&egrave;s du serveur de registre.<\/p><p>La solution consiste &agrave; vous connecter et &agrave; authentifier votre compte aupr&egrave;s du registre. Voici les &eacute;tapes &agrave; suivre :<\/p><ol class=\"wp-block-list\">\n<li>Connectez-vous au registre &agrave; l&rsquo;aide de la commande suivante, o&ugrave; <strong>my-registry-example.com <\/strong>correspond &agrave; l&rsquo;adresse r&eacute;elle du registre. Si vous souhaitez transf&eacute;rer des images vers Docker Hub, vous pouvez omettre l&rsquo;adresse :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker login my-registry.example.com<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Entrez votre nom d&rsquo;utilisateur et votre mot de passe lorsque vous y &ecirc;tes invit&eacute;.<\/li>\n\n\n\n<li>Marquez correctement l&rsquo;image avec l&rsquo;h&ocirc;te du registre, le r&eacute;f&eacute;rentiel et la balise avant de la pousser &agrave; l&rsquo;aide de cette commande :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker tag my-local-image:latest my-registry.example.com\/my-repo\/my-local-image:latest<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li>Transf&eacute;rez l&rsquo;image vers le registre en ex&eacute;cutant cette commande :<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker push my-registry.example.com\/my-repo\/my-local-image:latest<\/pre><h2 class=\"wp-block-heading\" id=\"h-quelles-sont-les-prochaines-etapes-pour-maitriser-docker\"><strong>Quelles sont les prochaines &eacute;tapes pour ma&icirc;triser Docker ?<\/strong><\/h2><p>Pour ma&icirc;triser Docker et l&rsquo;utiliser dans des cas d&rsquo;utilisation r&eacute;els en production, vous devrez aller au-del&agrave; des bases de l&rsquo;utilisation d&rsquo;un seul conteneur et de commandes simples. Les &eacute;tapes suivantes consistent &agrave; comprendre les techniques avanc&eacute;es de d&eacute;ploiement et de gestion d&rsquo;applications complexes &agrave; haute disponibilit&eacute;.<\/p><p>Outre Docker Compose, il est essentiel d&rsquo;apprendre &agrave; utiliser des outils d&rsquo;orchestration avanc&eacute;s tels que <strong>Docker Swarm<\/strong> ou <strong>Kubernetes <\/strong>pour g&eacute;rer et faire &eacute;voluer plusieurs conteneurs sur un cluster de machines.<\/p><p>Approfondissez &eacute;galement vos connaissances sur les pilotes r&eacute;seau, tels que le <strong>pilote r&eacute;seau Overlay <\/strong>utilis&eacute; en mode Docker Swarm pour connecter des h&ocirc;tes &agrave; travers un cluster. La connexion de plusieurs machines &agrave; l&rsquo;aide du r&eacute;seau par d&eacute;faut de Docker est un processus complexe et manuel, tandis que les r&eacute;seaux Overlay simplifient et automatisent la communication entre h&ocirc;tes de mani&egrave;re &eacute;volutive et fiable.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker est une plateforme ouverte con&ccedil;ue pour simplifier le processus de d&eacute;veloppement, de livraison et d&rsquo;ex&eacute;cution d&rsquo;applications. Elle rationalise la livraison de logiciels gr&acirc;ce &agrave; la conteneurisation, une technologie qui regroupe votre application et ses d&eacute;pendances dans des unit&eacute;s isol&eacute;es et ex&eacute;cutables appel&eacute;es conteneurs. Cela garantit que votre logiciel fonctionne de mani&egrave;re coh&eacute;rente, quel que [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/fr\/tutoriels\/tutoriel-docker\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":355,"featured_media":43197,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Tutoriel Docker : guide complet pour l'ex\u00e9cution de conteneurs","rank_math_description":"Docker permet de d\u00e9velopper, livrer et ex\u00e9cuter des applications facilement avec des conteneurs. D\u00e9couvrez-le dans ce tutoriel Docker.","rank_math_focus_keyword":"tuto docker","footnotes":""},"categories":[4760],"tags":[],"class_list":["post-43169","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps"],"hreflangs":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts\/43169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/users\/355"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/comments?post=43169"}],"version-history":[{"count":6,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts\/43169\/revisions"}],"predecessor-version":[{"id":47502,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts\/43169\/revisions\/47502"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/media\/43197"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/media?parent=43169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/categories?post=43169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/tags?post=43169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}