<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Belkacem EL KHRISSI, auteur/autrice sur Pandawan</title>
	<atom:link href="https://www.pandawan.fr/author/admin1938/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.pandawan.fr/author/admin1938/</link>
	<description>La connaissance prends de la valeur quand on la partage</description>
	<lastBuildDate>Sat, 18 Jan 2025 04:27:04 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>

<image>
	<url>https://www.pandawan.fr/wp-content/uploads/2024/02/cropped-cropped-DALL·E-2024-02-08-04.31.51-Un-logo-creatif-pour-Pandawan-representant-un-panda-stylise-et-sympathique-en-train-de-faire-de-linformatique.-Le-panda-est-assis-devant-un-ordina-1-32x32.webp</url>
	<title>Belkacem EL KHRISSI, auteur/autrice sur Pandawan</title>
	<link>https://www.pandawan.fr/author/admin1938/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>03 Héberger des sites internet avec Apache</title>
		<link>https://www.pandawan.fr/heberger-site-internet/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Fri, 17 Jan 2025 05:11:12 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Serveur Web]]></category>
		<category><![CDATA[Apache]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1330</guid>

					<description><![CDATA[<p>Pour héberger un site Web avec Apache, il faudra, dans un premier , comprendre sa structuration dans un serveur WEB. Un site internet utilise des répertoires et des fichiers accessibles [...]</p>
<p>L’article <a href="https://www.pandawan.fr/heberger-site-internet/">03 Héberger des sites internet avec Apache</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Pour héberger un site Web avec Apache, il faudra, dans un premier , comprendre sa structuration dans un serveur WEB. Un site internet utilise des répertoires et des fichiers accessibles par un navigateur web. Par défaut, comme notifier dans <a href="https://doc.ubuntu-fr.org/apache2">la documentation de Ubuntu,</a> ces éléments se trouvent dans le répertoire /var/www/html. Le fichier de configuration /etc/apache2/sites-available/000-default.conf contient cette information.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo nano /etc/apache2/sites-available/000-default.conf</code></pre>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="945" height="351" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-15.png" alt="Directive VirtualHost  pour l'hébergement de site web" class="wp-image-1331" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-15.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-15-300x111.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-15-768x285.png 768w" sizes="(max-width: 945px) 100vw, 945px" /></figure>



<p>Lorsqu&rsquo;une requête arrive sur le port 80, elle est traitée dans le répertoire par défaut « /var/www/html ». En parallèle, les erreurs sont consignées dans le fichier « /var/log/apache2/error.log », tandis que les informations relatives aux accès sont enregistrées dans « /var/log/apache2/access.log ». Ainsi, l&rsquo;hébergement d&rsquo;un site internet repose sur une organisation logique illustrée par ces répertoires..</p>



<p>Dans le répertoire /var/www/html/, se trouve une page HTML nommée « index.html ». Pour personnaliser cette page, nous éditons ce fichier et modifions son titre. Plus précisément, à la ligne 208, nous remplaçons le texte « Apache2 Default Page » par un titre de notre choix, reflétant ainsi le contenu ou l&rsquo;objectif du site. Une fois les modifications effectuées, nous enregistrons le fichier pour appliquer ces changements.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="945" height="158" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-16.png" alt="Fichier HTML default serveur Web Apache" class="wp-image-1332" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-16.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-16-300x50.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-16-768x128.png 768w" sizes="(max-width: 945px) 100vw, 945px" /></figure>



<p>En accédant à notre serveur web à l’aide d’un navigateur, nous constatons que le titre a bien été modifié. Cela confirme que nos modifications ont été prises en compte. Ainsi, héberger un site internet repose sur quelques étapes simples : configurer le serveur, organiser les fichiers dans le répertoire adéquat, et personnaliser les pages selon les besoins du site. Avec ces bases, il devient facile de gérer un hébergement web fonctionnel et adapté.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="945" height="527" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-17.png" alt="page Web index.html après modification" class="wp-image-1333" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-17.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-17-300x167.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-17-768x428.png 768w" sizes="(max-width: 945px) 100vw, 945px" /></figure>



<h2 class="wp-block-heading" id="h-hebergement-plusieurs-sites-web-avec-apache-en-utilisant-les-ports">Hebergement plusieurs sites Web avec Apache en utilisant les ports</h2>



<p>Par défaut, comme nous l&rsquo;avons mentionné dans l&rsquo;article précédent, Apache écoute sur le port 80. Cependant, vous pouvez configurer Apache pour écouter sur un autre port en créant un second « VirtualHost » dédié. Par exemple, nous allons configurer Apache pour écouter sur le port 81 et associer ce port au répertoire /var/www/html/port81/. Pour cela, nous basons notre travail sur le fichier de configuration par défaut, que nous adaptons pour répondre aux besoins spécifiques de l&rsquo;hébergement multi-site.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/port81.conf
belkacem@apache:~$ sudo vim /etc/apache2/sites-available/port81.conf</code></pre>



<p>Nous configurons Apache pour écouter sur le port 81 en modifiant le contenu du fichier de configuration. Nous gérons ensuite les requêtes adressées à ce port à l’aide des fichiers situés dans le répertoire /var/www/html/port81. De plus, nous mettons en place des journaux spécifiques pour ces requêtes, ce qui nous permet d’assurer un suivi clair et détaillé de l’activité liée à ce port.</p>



<pre class="wp-block-code"><code>Listen 81
&lt;VirtualHost *:81&gt;
        DocumentRoot /var/www/html/port81/
        ErrorLog ${APACHE_LOG_DIR}/error_port81.log
        CustomLog ${APACHE_LOG_DIR}/access_port81.log combined
&lt;/VirtualHost&gt;</code></pre>



<h3 class="wp-block-heading" id="h-creation-du-repertoire-pour-l-hebergement-du-site-web">Création du répertoire pour l&rsquo;hébergement du site web</h3>



<p>Nous créons le répertoire requis, puis nous simplifions le processus en copiant et collant le fichier index.html dans le répertoire /var/www/html/port81/ que nous avons créé. Avec cette configuration, nous atteignons notre objectif d’héberger un site internet supplémentaire.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo mkdir /var/www/html/port81/
belkacem@apache:~$ sudo cp /var/www/html/index.html /var/www/html/port81/</code></pre>



<p>Nous modifierons le titre du fichier «&nbsp;index.html&nbsp;» contenu dans le répertoire /var/www/html/port81/</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="202" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-18.png" alt="" class="wp-image-1334" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-18.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-18-300x64.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-18-768x164.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>Actuellement, notre site est dans le répertoire /etc/apache2/sites-available/, ce qui le rend disponible mais pas encore activé. Pour l&rsquo;activer, nous copions sa configuration dans le répertoire /etc/apache2/sites-enabled/. Ensuite, nous créons un lien symbolique pointant vers le fichier de configuration. Ainsi, nous configurons Apache pour activer ce site et le rendre prêt à l&rsquo;utilisation. Grâce à cette méthode, nous simplifions la gestion des sites hébergés.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo ln -s /etc/apache2/sites-available/port81.conf /etc/apache2/sites-enabled/port81.conf</code></pre>



<h3 class="wp-block-heading" id="h-recharger-la-nouvelle-configuration">Recharger la nouvelle configuration</h3>



<p>Nous appliquons la nouvelle configuration d&rsquo;Apache en rechargeant ses fichiers. Pour cela, nous rechargeons le service Apache. Cette action garantit que le serveur prend en compte les modifications et fonctionne correctement avec les nouveaux paramètres.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo systemctl reload apache2</code></pre>



<p>Pour accéder à ce nouveau site internet, nous précisons le port 81 dans l’URL. Nous entrons donc <code>http://&lt;adresse_ip>:81</code> dans la barre d’adresse du navigateur. Vérifions le résultat. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="398" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-19.png" alt="" class="wp-image-1335" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-19.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-19-300x126.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-19-768x323.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<h2 class="wp-block-heading" id="h-hebergement-plusieurs-site-web-en-utilisant-les-noms-de-domaine">Hébergement plusieurs site Web en utilisant les noms de domaine</h2>



<p>Dans le chapitre précédent, nous avons appris à créer plusieurs sites internet sur un même serveur. Cependant, bien que cette méthode soit adéquate pour un usage privé, elle ne convient pas à un usage public, comme celui d’un site vitrine. En effet, il est important de noter qu’un utilisateur lambda ne prendra pas le temps de saisir un numéro de port ou une adresse IP pour accéder à un site.</p>



<h3 class="wp-block-heading" id="h-simuler-un-nom-de-domaine-dans-une-environnement-de-test">Simuler un nom de domaine dans une environnement de test</h3>



<p>Ainsi, dans un environnement de production, nous procédons différemment. Nous achetons un nom de domaine auprès d’un registraire (ou registrar en anglais). Ce dernier est une entreprise accréditée par l’<a href="https://www.icann.org/fr">ICANN </a>(Internet Corporation for Assigned Names and Numbers) pour fournir des noms de domaine publics. Par conséquent, cette démarche garantit une expérience utilisateur plus professionnelle et accessible.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="98" height="159" src="https://www.pandawan.fr/wp-content/uploads/2025/01/une-image-contenant-texte-graphiques-vectoriels-13.png" alt="Une image contenant texte, graphiques vectoriels Description générée automatiquement" class="wp-image-1305" style="width:105px;height:auto"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong><em>Bon à savoir :</em></strong> <br><br>L&rsquo;ICANN est une organisation à but non lucratif en charge de la gestion des noms de domaine et des adresses IP sur Internet.</td></tr></tbody></table></figure>
</blockquote>
</div>
</div>



<p>Dans notre contexte, nous travaillons en mode « lab » dans un environnement privé. Par conséquent, nous simulons le rôle du registar. Pour cela, nous utilisons une machine Windows Client afin d’interroger notre serveur web.</p>



<p>Ensuite, nous modifions le fichier hosts, situé dans le dossier c:\windows\system32\drivers\etc\. Pour éditer ce fichier, nous ouvrons un éditeur de texte tel que « Notepad ». Nous veillons à exécuter cet éditeur en tant qu’administrateur avant d’ouvrir le fichier. De plus, nous sélectionnons l’option « Tous les fichiers » dans la liste déroulante « Type de fichier » pour afficher le fichier dans le champ « Nom de fichier ». Ainsi, nous pouvons apporter les modifications nécessaires de manière efficace.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="405" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-21-1024x405.png" alt="" class="wp-image-1339" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-21-1024x405.png 1024w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-21-300x119.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-21-768x304.png 768w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-21.png 1228w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Dans ce fichier, nous associons deux noms de domaine à l’adresse IP de notre serveur web. Ensuite, nous enregistrons les modifications pour que la configuration soit prise en compte. Ainsi, nous établissons le lien nécessaire entre les noms de domaine et le serveur.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="449" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-22-1024x449.png" alt="" class="wp-image-1340" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-22-1024x449.png 1024w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-22-300x132.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-22-768x337.png 768w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-22.png 1220w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Ensuite, nous vérifions la configuration en envoyant un ping sur les deux noms de domaine ajoutés dans le fichier hosts.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="195" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-23.png" alt="" class="wp-image-1341" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-23.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-23-300x62.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-23-768x158.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="195" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-24.png" alt="" class="wp-image-1342" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-24.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-24-300x62.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-24-768x158.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>Dans les captures d’écran ci-dessus, nous voyons que les noms de domaine sont liés à l’adresse IP 10.0.0.3. Cela signifie que deux noms de domaine différents pointent vers la même adresse IP. Dans cet exemple, nous configurons les deux sites pour qu’ils utilisent le port 80. Ensuite, nous créons deux VirtualHost, chacun configuré pour écouter sur ce port. Pour mieux organiser les réglages, nous utilisons un fichier de configuration séparé pour chaque VirtualHost.</p>



<h3 class="wp-block-heading" id="h-configuration-des-virtualhost">Configuration des VirtualHost</h3>



<p>D’abord, nous créons un fichier de configuration dans le répertoire /etc/apache2/conf-available/. Pour rendre cela clair, nous nommons chaque fichier en utilisant le nom de domaine. Nous nous assurons aussi que le fichier a l’extension « .conf », car Apache en a besoin pour reconnaître la configuration. Cette approche simple nous aide à structurer nos fichiers de façon pratique et efficace.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo vim /etc/apache2/conf-available/licorne.fr.conf</code></pre>



<p>Dans ce fichier, nous écrivons seulement les informations nécessaires. Nous précisons d’abord le dossier où les fichiers traiteront les requêtes HTTP. Ensuite, nous ajoutons le nom de domaine qui recevra ces requêtes. Enfin, nous créons un alias pour le nom de domaine. Avec cette configuration de base, les requêtes HTTP fonctionneront correctement.</p>



<pre class="wp-block-code"><code>&lt;VirtualHost *:80>
        DocumentRoot /var/www/html/licorne
        ServerName   www.licorne.fr
        ServerAlias  licorne.fr
&lt;/VirtualHost></code></pre>



<p>Dans cette configuration, nous stockons les fichiers et dossiers liés au domaine www.licorne.fr dans /var/www/html/licorne. Ce dossier n’existe pas encore, donc nous devons le créer. Cette étape permet d’organiser les fichiers du domaine de manière claire et efficace.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo mkdir /var/www/html/licorne/</code></pre>



<p>Nous y copions le fichier « index.html » présent dans /var/www/html/.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo cp /var/www/html/index.html /var/www/html/licorne/</code></pre>



<p>Nous créerons ensuite notre lien symbolique du fichier de configuration dans le répertoire /etc/apache2/sites-enabled/.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo ln -s /etc/apache2/sites-available/ licorne.fr.conf /etc/apache2/sites-enabled/licorne.fr.conf</code></pre>



<p>Pour qu’Apache prenne en compte les modifications, nous rechargeons la configuration.</p>



<p> Ensuite, en répétant les mêmes étapes pour le second site, nous hébergeons deux sites sur la même adresse IP. Cette méthode permet de gérer facilement plusieurs sites sur un seul serveur.</p>



<pre class="wp-block-code"><code>&lt;VirtualHost *:80>
        DocumentRoot /var/www/html/panda
        ServerName   www.panda.fr
        ServerAlias  panda.fr
&lt;/VirtualHost></code></pre>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo mkdir /var/www/html/panda/
belkacem@apache:~$ sudo cp /var/www/html/port81/index.html /var/www/html/panda/
belkacem@apache:~$ sudo ln -s /etc/apache2/sites-available/ panda.fr.conf /etc/apache2/sites-enabled/panda.fr.conf</code></pre>
<p>L’article <a href="https://www.pandawan.fr/heberger-site-internet/">03 Héberger des sites internet avec Apache</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>02 Installation d&#8217;un serveur web Apache</title>
		<link>https://www.pandawan.fr/02-installation-dun-serveur-web-apache/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Fri, 17 Jan 2025 05:11:12 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Serveur Web]]></category>
		<category><![CDATA[Apache]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1316</guid>

					<description><![CDATA[<p>Dans cette article, l&#8217;installation d&#8217;un serveur Web Apache se fera sous Ubuntu 22.04 LTS (Long Time Support) disponible à cette adresse https://ubuntu.com/download/server. Nous ne détaillerons pas l&#8217;installation de Ubuntu. Il [...]</p>
<p>L’article <a href="https://www.pandawan.fr/02-installation-dun-serveur-web-apache/">02 Installation d&rsquo;un serveur web Apache</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Dans cette article, l&rsquo;installation d&rsquo;un serveur Web Apache se fera sous Ubuntu 22.04 LTS (Long Time Support) disponible à cette adresse <a href="https://ubuntu.com/download/server">https://ubuntu.com/download/server</a>. Nous ne détaillerons pas l&rsquo;installation de Ubuntu.</p>



<p>Il existe deux principales méthodes pour installer le serveur web Apache sur Ubuntu :</p>



<ol class="wp-block-list">
<li><strong>Installation via les paquets officiels de la distribution</strong> : Cette méthode est la plus simple et la plus couramment utilisée. Elle permet d&rsquo;installer Apache en utilisant le gestionnaire de paquets APT, garantissant ainsi une installation rapide et une intégration aisée avec le système. Cependant, elle peut limiter l&rsquo;utilisateur à la version d&rsquo;Apache disponible dans les dépôts officiels d&rsquo;Ubuntu.</li>



<li><strong>Compilation à partir des sources</strong> : Cette approche offre une flexibilité accrue, permettant d&rsquo;installer la version la plus récente d&rsquo;Apache ou de personnaliser les options de compilation selon des besoins spécifiques. Néanmoins, elle est plus complexe et nécessite une gestion manuelle des dépendances et des mises à jour.</li>
</ol>



<h2 class="wp-block-heading" id="h-i-nstallation-d-apache-via-apt"><strong>I</strong>nstallation d&rsquo;Apache via APT</h2>



<p>Pour découvrir et installer Apache en utilisant le gestionnaire de paquets APT sur Ubuntu, Nous suivrons  les étapes ci-dessous :</p>



<ol class="wp-block-list">
<li><strong>Mise à jour de l&rsquo;index des paquets</strong> : Avant toute installation, il est recommandé de mettre à jour l&rsquo;index local des paquets pour s&rsquo;assurer que le système dispose des dernières informations sur les versions disponibles. Exécutons la commande suivante :</li>
</ol>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo apt update</code></pre>



<p><strong>Installation du paquet Apache</strong> : Après la mise à jour, installons Apache en exécutant :</p>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo apt install apache2 apache2-utils -y</code></pre>



<p>Cette commande télécharge et installe Apache et les utilitaires d&rsquo;Apache ainsi que toutes les dépendances requises.</p>



<p>En listant les processus en cours  sur la machine, nous voyons qu’il est en exécution.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo ps aux | grep apache2</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="959" height="134" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-4.png" alt="processus Apache en cours d'éxecution" class="wp-image-1317" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-4.png 959w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-4-300x42.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-4-768x107.png 768w" sizes="auto, (max-width: 959px) 100vw, 959px" /></figure>



<p>Le serveur Web ecoute sur le port 80 par défaut. Le client enverra une requête depuis un port dynamique, le serveur recevra cette requête sur le port 80, il doit par conséquent écouter ce port pour qu’il puisse y répondre.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="516" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-6-1024x516.png" alt="Fonctionnement port d'une requête http" class="wp-image-1319" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-6-1024x516.png 1024w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-6-300x151.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-6-768x387.png 768w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-6.png 1223w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="h-les-fichiers-de-configuration-d-un-serveur-web-apache">Les fichiers de configuration d&rsquo;un serveur Web Apache</h2>



<p>Lors de l’installation, une liste de répertoire a été créé dans /etc/apache2/. Nous pouvons voir cette liste de répertoires en exécutant la commande suivante : </p>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo ls -l /etc/apache2/ | egrep "^d"</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="228" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-7.png" alt="repertoires d'un serveur Web Apache" class="wp-image-1320" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-7.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-7-300x72.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-7-768x185.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>Ses répertoires contiendront les configurations des futurs site internet.</p>



<ul class="wp-block-list">
<li><strong>sites-available</strong> :  contient les fichiers de configuration des sites disponibles</li>



<li><strong>sites-enabled</strong> : contient des liens symboliques vers les configurations, dans site-available, des sites activés</li>



<li><strong>conf-available</strong> : contient les fichiers de configuration des autres services disponibles</li>



<li><strong>conf-enabled</strong> : contient des liens symboliques vers les configurations, dans conf-available, des autres services activés</li>



<li><strong>mods-available</strong> : contient les fichiers de configuration des modules d&rsquo;Apache disponibles</li>



<li><strong>mods-enabled</strong> : contient des liens symboliques vers les configurations, dans mods-available, des modules activés</li>
</ul>



<p>Tous ces fichiers vont venir alimenter le fichier apache2.conf.</p>



<h3 class="wp-block-heading" id="h-fichier-de-configuration-apache2-conf">Fichier de configuration apache2.conf</h3>



<p>Le fichier de configuration principal d&rsquo;Apache2, nommé « apache2.conf », centralise les paramètres du serveur. En l&rsquo;éditant, nous observons qu&rsquo;il inclut, via des directives « IncludeOptional », les configurations des répertoires précédemment mentionnés, permettant une organisation modulaire et hiérarchisée des réglages.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo cat /etc/apache2/apache2.conf | grep IncludeOptional</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="140" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-8.png" alt="" class="wp-image-1321" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-8.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-8-300x44.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-8-768x114.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>La directive « IncludeOptional » dans la configuration d&rsquo;Apache permet d&rsquo;inclure des fichiers supplémentaires de manière conditionnelle. Contrairement à la directive « Include », qui génère une erreur si le fichier spécifié n&rsquo;existe pas, « IncludeOptional » ignore silencieusement les fichiers manquants. Par exemple, l&rsquo;instruction « IncludeOptional conf-enabled/*.conf » inclura tous les fichiers avec l&rsquo;extension .conf présents dans le répertoire conf-enabled, sans provoquer d&rsquo;erreur si aucun fichier ne correspond au motif.</p>



<h3 class="wp-block-heading" id="h-les-directives">Les directives</h3>



<p>La configuration d&rsquo;Apache repose sur des directives spécifiques qui définissent le comportement du serveur pour différents répertoires et fichiers. Pour configurer le serveur Apache afin qu&rsquo;il applique des directives spécifiques à un répertoire, on utilise la section &lt;Directory>. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="128" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-9.png" alt="Directive /var/www/ dans un serveur WEN Apache" class="wp-image-1322" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-9.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-9-300x41.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-9-768x104.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p><strong>Options Indexes FollowSymLinks :</strong></p>



<ul class="wp-block-list">
<li><strong>Indexes </strong>: Active l&rsquo;affichage de la liste des fichiers si aucun fichier index (comme <strong>index.html</strong>) n&rsquo;est présent dans le répertoire.</li>



<li><strong>FollowSymLinks</strong> : Autorise le serveur à suivre les liens symboliques présents dans le répertoire.</li>
</ul>



<p><strong>AllowOverride None</strong> : Empêche l&rsquo;utilisation de fichiers .htaccess pour surcharger les directives définies dans le fichier de configuration principal pour ce répertoire.</p>



<p><strong>Require all granted</strong> : Accorde l&rsquo;accès à tous les utilisateurs aux fichiers et sous-répertoires du répertoire spécifié.</p>



<h3 class="wp-block-heading" id="h-les-modules">Les modules</h3>



<p>Apache HTTP Server est conçu de manière modulaire pour s&rsquo;adapter à une variété d&rsquo;utilisations. Il intègre des modules statiques, compilés directement dans le noyau du serveur, et des modules dynamiques, chargés au besoin. Pour répertorier tous les modules activés, exécutez la commande suivante :</p>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo apache2ctm -M</code></pre>



<p>Cette commande affiche la liste des modules actuellement chargés par Apache, en précisant pour chacun s&rsquo;il est statique ou dynamique.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="714" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-10.png" alt="Liste module Serveur Web Apache" class="wp-image-1323" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-10.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-10-300x227.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-10-768x580.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>La liste des modules est disponible dans le répertoire «/etc/apache2/mods-available ».</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="115" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-11.png" alt="" class="wp-image-1324" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-11.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-11-300x37.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-11-768x93.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>Pour voir la liste des modules partagés c’est-à-dire marqué par (shared), il faudra lister le contenu du répertoire « /etc/apache2/mods-enabled/ ».</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="109" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-12.png" alt="Liste modules serveur Apache partagés" class="wp-image-1325" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-12.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-12-300x35.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-12-768x89.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>Si nous y regardions de plus près, nous constaterions que le nombre de module partagé et le nombre de fichier portant l’extension load, sera le même.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ echo -e "- nombre de fichier dans mods_enable : $(ls -1 /etc/apache2/mods-enabled/ | grep "load"| wc -l )\n- nombre de module chargé dans Apache : $(apache2ctl -M | grep "shared" | wc -l)"</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="86" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-13.png" alt="lister le nombre de module activé" class="wp-image-1326" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-13.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-13-300x27.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-13-768x70.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<h3 class="wp-block-heading" id="h-installer-un-module">Installer un module</h3>



<p>Nous installons un module dynamique lorsque nous ajoutons un module à Apache. Un module statique, quant à lui, est directement intégré aux binaires d’Apache. Pour installer un module statique, nous devons recompiler Apache. Nous décrivons ici les étapes nécessaires pour ajouter une fonctionnalité qui réduit les risques de déni de service et d&rsquo;attaques par force brute. Le module utilisé pour cet objectif est « mod_evasive ». Nous débutons par l&rsquo;installation de ce module.</p>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo apt install libapache2-mod-evasive -y</code></pre>



<p>Une fois le module installé, il est chargé par défaut. Pour s’en assurer, il nous suffira de lister les modules et de recherche le mot clé « evasive ».</p>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo apache2ctl -M | grep evasive</code></pre>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo apache2ctl -M | grep evasive</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="73" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-14.png" alt="verification mod_evasive Serveur Web Apache" class="wp-image-1327" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-14.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-14-300x23.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-14-768x59.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>Configurons ce module, en créant un fichier portant l’extension « .conf ». Précédemment, nous avons vu que les fichiers de configuration des modules sont é créer dans le répertoire « /etc/apache2/mods-available/ »</p>



<pre class="wp-block-code"><code>belkacem@apache:~$sudo vim /etc/apache2/mods-available/evasive.conf</code></pre>



<pre class="wp-block-code"><code>&lt;IfModule mod_evasive24.c>
   # Configuration globale
   DOSHashTableSize 2048
   DOSPageCount 10
   DOSSiteCount 50
   DOSPageInterval 1
   DOSSiteInterval 1
   DOSBlockingPeriod 10
   # Configuration pour les requêtes HTTP
   DOSSystemCommand "sudo /usr/local/bin/block_ip %s"
   DOSLogDir "/var/log/mod_evasive"
   DOSWhitelist 127.0.0.1
   # Configuration pour les tentatives d'authentification
   DOSEmailNotify admin@domain.tld
   DOSLogOnly On
   DOSWhiteList /etc/apache2/mods-available/mod-evasive/whitelist
&lt;/IfModule></code></pre>



<p>Nous créerons un fichier qui contiendras les adresses IP qui ne sont pas concerné par les restrictions du module « evasive ».</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo mkdir /etc/apache2/mods-available/mod-evasive
belkacem@apache:~$ sudo vim /etc/apache2/mods-available/mod-evasive/whitelist</code></pre>



<pre class="wp-block-code"><code># Liste blanche pour mod_evasive
# Adresses IP à ignorer
127.0.0.1
10.0.0.1
# Noms d'hôte à ignorer
Localhost
client.apache.dev

</code></pre>



<p>Activons maintenant le module</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo a2enmod evasive</code></pre>



<p>Pour que cette configuration soit prise en considération par Apache, nous devons installer recharger le configuration Apache ou redémarrer le service apache2</p>



<pre class="wp-block-code"><code>belkacem@apache:~$ sudo apache2ctl restart</code></pre>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="98" height="159" src="https://www.pandawan.fr/wp-content/uploads/2025/01/une-image-contenant-texte-graphiques-vectoriels-13.png" alt="Une image contenant texte, graphiques vectoriels Description générée automatiquement" class="wp-image-1305" style="width:127px;height:auto"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p>Bon à savoir</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Le module evasive à lui seul, ne peut pas offrir une garantie d’efficacité de 100% contre toutes les attaques par déni de service, il convient de l’adjoindre à d’autres mesure de sécurité (Service de protection anti-DDOS, utilisation d’un équilibreur de charge, limiter la bande passante, surveillances des journaux, etc)</p>
</blockquote>
</div>
</div>



<p></p>
<p>L’article <a href="https://www.pandawan.fr/02-installation-dun-serveur-web-apache/">02 Installation d&rsquo;un serveur web Apache</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>01 Serveur web et ses protocoles</title>
		<link>https://www.pandawan.fr/serveur-web-la-base-du-www/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Fri, 17 Jan 2025 05:11:11 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Serveur Web]]></category>
		<category><![CDATA[Apache]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1233</guid>

					<description><![CDATA[<p>Les serveurs WEB constituent la base du WWW. Le WWW, ou « World Wide Web », est un système de gestion de documents hypertextuels. En effet, il permet aux utilisateurs d’accéder à [...]</p>
<p>L’article <a href="https://www.pandawan.fr/serveur-web-la-base-du-www/">01 Serveur web et ses protocoles</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Les serveurs WEB constituent la base du WWW<strong>.</strong> Le WWW, ou « World Wide Web », est un système de gestion de documents hypertextuels. En effet, il permet aux utilisateurs d’accéder à des documents électroniques liés entre eux par des liens hypertexte. Comme nous l’expliquerons plus tard, un serveur web héberge ces documents  Dans les faits, ces documents, qui sont un ensemble d’informations, peuvent être consultés à distance.</p>



<p><a href="https://fr.wikipedia.org/wiki/Tim_Berners-Lee">Tim Berners-Lee</a>, un scientifique anglais, a créé le World Wide Web dans les années 1990 lorsqu’il travaillait au CERN (Conseil Européen pour la Recherche Nucléaire). Le World Wide Web est né dans le cadre d&rsquo;un projet permettant aux scientifiques de partager leurs travaux. Comme toute communication informatique, l’échange s’appuie sur un modèle standardisé nommé TCP/IP.</p>



<h2 class="wp-block-heading" id="h-le-modele-tcp-ip-la-base-de-la-communication-entre-serveur-web-et-client">Le modèle TCP/IP : La base de la communication entre Serveur Web et client </h2>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="588" height="278" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image.png" alt="Modele TCP/IP" class="wp-image-1308" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image.png 588w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-300x142.png 300w" sizes="auto, (max-width: 588px) 100vw, 588px" /></figure>



<p>L’IETF a défini le modèle TCP/IP dans les documents <a href="https://datatracker.ietf.org/doc/html/rfc791">RFC791</a> et <a href="https://datatracker.ietf.org/doc/html/rfc793">RFC793</a>. Il le décompose en 4 couches. Chacune de ces couches joue un rôle spécifique et s’appuie sur des protocoles pour remplir ses fonctions. Pour illustrer son fonctionnement, imaginez un bâtiment de 4 étages sans ascenseur. Pour se rendre au 4ème étage, il faut d’abord passer par le 1er, puis le 2ème, ensuite le 3ème, et enfin arriver au 4ème<strong>.</strong> On ne peut pas aller du 1er au 3ème sans passer par le 2ème étage. Tim Berners-Lee a créé le protocole HTTP pour être conforme à la logique de ce modèle de communication. Nous le situons dans la couche « Application » du modèle TCP/IP.</p>



<h3 class="wp-block-heading">L&rsquo;acronyme WWW (World Wide Web) et les URL</h3>



<p>Le terme WWW est souvent utilisé dans les adresses URL (Uniform Resource Locator) pour identifier un site web accessible par un lien hypertexte. Pour accéder à ces pages, nous avons besoin d’un navigateur qui transformera notre clic sur un lien hypertexte en requête HTTP. La machine où est installé le navigateur qui nous permet d’envoyer une requête est le client, et la machine qui reçoit et traite la requête est le serveur.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="234" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-1.png" alt="" class="wp-image-1310" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-1.png 945w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-1-300x74.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-1-768x190.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>En effet, cette illustration offre une vision simplifiée de la communication, mais elle met en évidence l’importance du protocole HTTP dans le World Wide Web</p>



<h2 class="wp-block-heading" id="h-le-protocole-tcp-dans-les-serveurs-web">Le protocole TCP dans les serveurs WEB</h2>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="972" height="163" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-2.png" alt="" class="wp-image-1311" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-2.png 972w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-2-300x50.png 300w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-2-768x129.png 768w" sizes="auto, (max-width: 972px) 100vw, 972px" /></figure>



<p>Avant que le client puisse envoyer une requête HTTP, il doit établir une connexion TCP. Cette phase permet au client et au serveur de négocier les paramètres de connexion pour garantir que les données transmises seront correctement reçues et dans l&rsquo;ordre. Le client et le serveur utilisent le processus « Three-way handshake » pour établir la connexion.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="723" height="191" src="https://www.pandawan.fr/wp-content/uploads/2025/01/image-3.png" alt="" class="wp-image-1312" srcset="https://www.pandawan.fr/wp-content/uploads/2025/01/image-3.png 723w, https://www.pandawan.fr/wp-content/uploads/2025/01/image-3-300x79.png 300w" sizes="auto, (max-width: 723px) 100vw, 723px" /></figure>



<p>Le premier échange consiste en un paquet SYN envoyé par le client au serveur, ce paquet demande l’établissement de la connexion. Le serveur renvoie une requête SYN/ACK avec les options de connexion. Le client répond en envoyant un paquet ACK. Ce message  indique au serveur qu’il a bien reçu les informations et qu’il est prêt à commencer les échanges.</p>



<h2 class="wp-block-heading" id="h-le-protocole-http">Le protocole HTTP</h2>



<p>La <a href="https://datatracker.ietf.org/doc/html/rfc1945">RFC1945</a> a standardisé le protocole HTTP en 1996.  Cette RFC décrit les méthodes de requêtes, les codes de statut et les en-têtes. Une seconde RFC, la <a href="https://datatracker.ietf.org/doc/html/rfc2616">RFC 2616</a>, publiée en 1999, ajoute des fonctionnalités qui permet de réduire la latence.</p>



<p>La version 2 du protocole HTTP ajoute des fonctionnalités de compression et de multiplexage de requêtes, ce qui améliore la vitesse de chargement. Elle intègre aussi une couche de sécurité imposant le chiffrement des requêtes. Actuellement, un travail sur la version 3 est en cours. En effet, cette nouvelle version s’appuiera sur le protocole QUIC au lieu de TCP. Ainsi le « Three-Way Handshake » sera supprimé, ce qui aura pour effet les requêtes. En observant les différentes versions du protocole, nous remarquons que l’accent est mis sur la rapidité d’exécution des requêtes HTTP et la sécurité.</p>



<h3 class="wp-block-heading" id="h-les-requetes-http-1-0">Les requêtes HTTP 1.0</h3>



<p>Une requête HTTP comprend une méthode qui spécifie l’action à effectuer sur une ressource. Dans la version HTTP/1.0, les méthodes prises en charge étaient :</p>



<ul class="wp-block-list">
<li><strong>GET</strong> : utilisée pour récupérer des informations depuis le serveur.</li>



<li><strong>POST</strong> : utilisée pour envoyer des informations au serveur pour une utilisation ultérieure.</li>



<li><strong>HEAD</strong> : utilisée pour ne renvoyer que les en-têtes d’une réponse HTTP.</li>
</ul>



<h3 class="wp-block-heading" id="h-les-requetes-http-1-1">Les requêtes HTTP 1.1</h3>



<p>Le protocole HTTP a été conçu pour l’échange de travaux scientifiques et non pour un usage commercial. Ces méthodes étaient suffisantes à l’époque. Cependant, avec l’essor commercial d’Internet, les quatre méthodes listées sont devenues insuffisantes. Il manquait la gestion des sessions, permettant, entre autres, à un utilisateur de s’identifier sur un site internet et de maintenir sa session active même lors de la navigation entre les pages. La version HTTP/1.1 a ajouté les méthodes suivantes :</p>



<ul class="wp-block-list">
<li><strong>PUT</strong> : utilisée pour envoyer des données à un serveur pour créer ou remplacer une ressource.</li>



<li><strong>DELETE</strong> : utilisée pour supprimer une ressource sur un serveur.</li>



<li><strong>TRACE</strong> : utilisée pour envoyer une requête pour déboguer.</li>



<li><strong>OPTIONS</strong> : utilisée pour découvrir les options disponibles pour une URL donnée.</li>



<li><strong>CONNECT</strong> : utilisée pour établir une connexion à travers un proxy.</li>



<li><strong>PATCH</strong> : utilisée pour envoyer des modifications partielles à une ressource sur le serveur..</li>
</ul>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-3 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="98" height="159" src="https://www.pandawan.fr/wp-content/uploads/2025/01/une-image-contenant-texte-graphiques-vectoriels-13.png" alt="Une image contenant texte, graphiques vectoriels Description générée automatiquement" class="wp-image-1305"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong><em>Bon à savoir&nbsp;:</em></strong></p>



<p>Dans la version http/2, les méthodes seront les mêmes que pour HTTP/1.1, la différence va être sur les fonctionnalités, permettant ainsi de traiter des requêtes multiples en simultanés.</p>
</blockquote>
</div>
</div>



<p>Le client recevra alors une réponse du serveur web contenant un statut sous la forme d’un code d’état, classé en cinq catégories :</p>



<ul class="wp-block-list">
<li><strong>La classe 1XX</strong> : indique que la requête a été reçue et bien interprétée, mais qu’elle n’a pas encore été traitée.</li>



<li><strong>La classe 2XX</strong> : indique que la requête a été traitée avec succès.</li>



<li><strong>La classe 3XX</strong> : indique que le serveur a besoin de plus d’informations pour traiter la requête (par exemple, une redirection vers une autre URL).</li>



<li><strong>La classe 4XX</strong> : indique que la requête contient une erreur.</li>



<li><strong>La classe 5XX</strong> : indique que le serveur a rencontré une erreur en tentant de traiter la requête.</li>
</ul>
<p>L’article <a href="https://www.pandawan.fr/serveur-web-la-base-du-www/">01 Serveur web et ses protocoles</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>10 &#8211; Le combo Dockerfile et Docker Compose</title>
		<link>https://www.pandawan.fr/dockerfile-et-docker-compos/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 10:44:31 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1197</guid>

					<description><![CDATA[<p>Pour ce chapitre, nous utiliserons l&#8217;étude de cas que celle utilisés dans le chapitre précédent. Par conséquent, une stack LAMP qui éxecutera WordPress. Nous aurons un Dockerfile par conteneur et [...]</p>
<p>L’article <a href="https://www.pandawan.fr/dockerfile-et-docker-compos/">10 &#8211; Le combo Dockerfile et Docker Compose</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Pour ce chapitre, nous utiliserons l&rsquo;étude de cas que celle utilisés<a href="https://www.pandawan.fr/?p=1194"> dans le chapitre précédent</a>. Par conséquent,  une stack LAMP qui éxecutera <a href="https://www.wordpress.org">WordPress</a>. Nous aurons un Dockerfile par conteneur et nous intégrerons Docker Compose pour orchestrer notre application.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="799" height="445" src="https://www.pandawan.fr/wp-content/uploads/2024/09/image-6.png" alt="Combo Dockerfile et Docker Compose" class="wp-image-1131" style="width:445px;height:auto" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/image-6.png 799w, https://www.pandawan.fr/wp-content/uploads/2024/09/image-6-300x167.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/image-6-768x428.png 768w" sizes="auto, (max-width: 799px) 100vw, 799px" /></figure>



<h3 class="wp-block-heading" id="h-creation-d-un-repertoire-de-travail">Création d&rsquo;un répertoire de travail</h3>



<p>Pour ce projet, nous créer un nouveau répertoire sur notre machine hôte, puis nous allons nous y rendre.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# mkdir /home/stack-lamp-compose-dockerfile
&#91;root@docker ~]# cd /home/stack-lamp-compose-dockerfile</code></pre>



<h3 class="wp-block-heading" id="h-creation-du-dockerfile-pour-mariadb">Création du Dockerfile pour MariaDB</h3>



<p>Dans ce répertoire nous créerons notre premier dockerfile pour le conteneur « mariadb ».</p>



<pre class="wp-block-code"><code>&#91;root@docker stack-lamp-compose-dockerfile]# vi dockerfile-mariadb
<strong><em>Contenu du dockerfile MariaDB</em></strong>
# Utilisez l'image officielle MariaDB
FROM mariadb:latest
# Définir les variables d'environnement
ENV MYSQL_ROOT_PASSWORD=p@ssw0rd1 \
MYSQL_DATABASE=wordpress \
MYSQL_USER=wordpress_user \
MYSQL_PASSWORD=p@ssw0rd1
# Copiez le script d'initialisation
COPY init.sql /docker-entrypoint-initdb.d/
# Exposez le port 3306 pour MariaDB
EXPOSE 3306</code></pre>



<p>Dans ce dockerfile, nous allons copier un fichier «&nbsp;init.sql&nbsp;», ce fichier que nous allons créer contiendras&nbsp;les requêtes SQL&nbsp;:</p>



<ul class="wp-block-list">
<li>Création de la base de données</li>



<li>Création de l’utilisateur</li>



<li>La gestion des droits de l’utilisateur sur la base de données</li>
</ul>



<pre class="wp-block-code"><code>&#91;root@docker stack-lamp-compose-dockerfile]# vi init.sql</code></pre>



<p><strong><em>Contenu init.sql</em></strong></p>



<pre class="wp-block-code"><code>CREATE DATABASE IF NOT EXISTS wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress_user'@'%' IDENTIFIED BY 'p@ssw0rd1';
FLUSH PRIVILEGES;</code></pre>



<p>Ce script sql devra avoir le droit en exécution.</p>



<pre class="wp-block-code"><code>&#91;root@docker stack-lamp-compose-dockerfile]# chmod +x init.sql</code></pre>



<h3 class="wp-block-heading" id="h-creation-du-dockerfile-pour-mariadb-0">Création du Dockerfile pour MariaDB</h3>



<p>Nous créerons également le Dockerfile pour le serveur web et WordPress. </p>



<pre class="wp-block-code"><code>&#91;root@docker stack-lamp-compose-dockerfile]# vi dockerfile-wordpress</code></pre>



<h4 class="wp-block-heading" id="h-contenu-du-dockerfile-wordpress">Contenu du Dockerfile WordPress</h4>



<pre class="wp-block-code"><code># Utilisez l'image Ubuntu la plus récente
FROM ubuntu:latest
# Mises à jour et installations nécessaires
RUN apt-get update \
&amp;&amp; export DEBIAN_FRONTEND=noninteractive \
&amp;&amp; apt-get install -y apache2 php libapache2-mod-php php-mysql mysql-client php-gd php-curl php-zip php-mbstring php-xml wget \
&amp;&amp; apt-get clean \
&amp;&amp; rm -rf /var/lib/apt/lists/*
&amp;&amp; cd /var/www/html/
&amp;&amp; rm index.html
# Télécharger et configurer WordPress
RUN cd /var/www/html &amp;&amp; \
wget https://wordpress.org/latest.tar.gz &amp;&amp; \
tar -xzvf latest.tar.gz --strip-components=1 &amp;&amp; \
rm latest.tar.gz &amp;&amp; \
mv wp-config-sample.php wp-config.php &amp;&amp; \
sed -i 's/database_name_here/wordpress/g' wp-config.php &amp;&amp; \
sed -i 's/username_here/wordpress_user/g' wp-config.php &amp;&amp; \
sed -i 's/password_here/p@ssw0rd1/g' wp-config.php &amp;&amp; \
sed -i 's/localhost/mariadb-server/g' wp-config.php &amp;&amp; \
chown -R www-data:www-data /var/www/html
# Attribue une adresse IP au serveur web
CMD &#91;"apache2ctl", "-D", "FOREGROUND"]
# Expose le port 80 pour Apache
EXPOSE 80</code></pre>



<p>Nous créerons le fichier Docker-Compose qui s’appuiera sur les deux Dockerfile que nous avons créé.</p>



<pre class="wp-block-code"><code>version: '3.8'
services:
# Service pour le serveur web Apache
web-server:
container_name: wp
build:
context: .
dockerfile: dockerfile-wordpress
depends_on:
- mariadb-server
ports:
- "80:80"
# Service pour la base de données MariaDB
mariadb-server:
container_name: mariadb-server
build:
context: .
dockerfile: dockerfile-mariadb</code></pre>



<h2 class="wp-block-heading" id="h-deploiement-de-conteneur-en-s-appuyant-sur-dockerfiles-et-docker-compose">Déploiement de conteneur en s&rsquo;appuyant sur Dockerfiles et Docker Compose</h2>



<p>Nous pouvons tester que notre déploiement de WordPress est maintenant fonctionnel.</p>



<pre class="wp-block-code"><code>&#91;root@docker stack-lamp-compose-dockerfile]# docker-compose up -d</code></pre>



<p>Depuis un navigateur, nous allons tenter de nous connecter à notre serveur WEB.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1120" height="812" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-144.png" alt="" class="wp-image-1100" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-144.png 1120w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-144-300x218.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-144-1024x742.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-144-768x557.png 768w" sizes="auto, (max-width: 1120px) 100vw, 1120px" /></figure>



<p>L&rsquo;approche qui combine Docker Compose et Dockerfiles segmente le travail de développement et de déploiement d&rsquo;applications en conteneurs. En effet, cette segmentation introduit une séparation claire des responsabilités à plusieurs niveaux.</p>



<p>Tout d&rsquo;abord, les Dockerfiles décrivent en détail la construction des images de conteneurs. Ainsi, les développeurs définissent les dépendances, les configurations et les étapes d&rsquo;installation spécifiques à chaque composant de l&rsquo;application. Grâce à cette séparation des préoccupations, les développeurs peuvent se concentrer sur la construction et la maintenance des images conteneurs, sans avoir à gérer la configuration des environnements de déploiement.</p>



<p>En parallèle, Docker Compose intervient au niveau de la composition et de la gestion de l&rsquo;ensemble de l&rsquo;application. En effet, les opérations d&rsquo;orchestration des conteneurs, la gestion des réseaux et la coordination entre les services sont encapsulées dans le fichier docker-compose.yml. De cette manière, les équipes opérationnelles peuvent se concentrer sur la gestion des aspects liés au déploiement global de l&rsquo;application, en utilisant une configuration déclarative simplifiée.</p>



<p>Cette segmentation du travail permet donc une collaboration plus fluide entre les équipes de développement et d&rsquo;exploitation. Les développeurs créent des environnements conteneurisés spécifiques à leurs applications, tandis que les opérations prennent en charge l&rsquo;orchestration et la gestion des déploiements à grande échelle. En résumé, Docker Compose et Dockerfiles encouragent une approche modulaire et efficace du développement et du déploiement d&rsquo;applications en conteneurs.</p>



<p></p>
<p>L’article <a href="https://www.pandawan.fr/dockerfile-et-docker-compos/">10 &#8211; Le combo Dockerfile et Docker Compose</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>09 Docker Compose : Création et gestion de multi-conteneur</title>
		<link>https://www.pandawan.fr/docker-compose/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 09:44:00 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1194</guid>

					<description><![CDATA[<p>L&#8217;un des principaux avantages de la conteneurisation est qu&#8217;elle nous permet de partitionner un serveur en services distincts. Nous pouvons ainsi déployer et gérer chaque service de manière indépendante. Contrairement [...]</p>
<p>L’article <a href="https://www.pandawan.fr/docker-compose/">09 Docker Compose : Création et gestion de multi-conteneur</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>L&rsquo;un des principaux avantages de la conteneurisation est qu&rsquo;elle nous permet de partitionner un serveur en services distincts. Nous pouvons ainsi déployer et gérer chaque service de manière indépendante. Contrairement aux machines virtuelles, où tous les services s&rsquo;exécutent sur le même système d&rsquo;exploitation, la conteneurisation offre une flexibilité accrue. Lors des mises à jour, nous devons souvent arrêter la machine virtuelle, ce qui entraîne des interruptions de service et des pertes financières. Cependant, avec la conteneurisation, chaque service s&rsquo;exécute dans son propre conteneur. Les conteneurs partagent le noyau du système d&rsquo;exploitation, ce qui les rend plus légers et plus portables que les machines virtuelles. De plus, Docker Compose nous permet de déployer des services rapidement et facilement, et de les mettre à l&rsquo;échelle de manière dynamique.</p>



<h2 class="wp-block-heading" id="h-presentation-de-docker-compose">Présentation de Docker Compose</h2>



<p> Docker Compose est un service qui permet d&rsquo;envoyer des instructions à Docker, telles que la spécification des dépendances, des informations de configuration et des interactions, afin de créer et de gérer des conteneurs Docker pour une application multi-conteneurs. Les instructions sont données sous forme de mot clé dont en voici les principaux utilisés&nbsp;:</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-left" data-align="left"><ul><li><strong>version :</strong> Spécifie la version de la syntaxe Docker Compose à utiliser.</li></ul></td><td><ul><li><strong>networks : </strong>Définit les réseaux auxquels un service est connecté.</li></ul></td></tr><tr><td class="has-text-align-left" data-align="left"><ul><li><strong>services :</strong> Définit les différents services (conteneurs) qui composent votre application.</li></ul></td><td><ul><li><strong>command : </strong>Spécifie la commande à exécuter dans le conteneur lors du démarrage.</li></ul></td></tr><tr><td class="has-text-align-left" data-align="left"><ul><li><strong>image : </strong>Indique l&rsquo;image Docker à utiliser pour un service.</li></ul></td><td><ul><li><strong>volumes_from </strong>: Montez des volumes à partir d&rsquo;un autre service.</li></ul></td></tr><tr><td class="has-text-align-left" data-align="left"><ul><li><strong>build : </strong>Permet de construire une image personnalisée pour un service en utilisant un Dockerfile.</li></ul></td><td><ul><li><strong>links :</strong> Crée des liaisons entre les services pour permettre la communication.</li></ul></td></tr><tr><td class="has-text-align-left" data-align="left"><ul><li><strong>ports : </strong>Définit les ports à exposer depuis le conteneur vers l&rsquo;hôte.</li></ul></td><td><ul><br><li><strong>restart :</strong> Définit la politique de redémarrage du service en cas d&rsquo;échec.</li></ul></td></tr><tr><td class="has-text-align-left" data-align="left"><ul><br><li><strong>volumes :</strong> Spécifie les volumes à monter pour un service, permettant le partage de données</li></ul></td><td><ul><br><li><strong>logging : </strong>Configure les options de journalisation pour le service.</li></ul></td></tr><tr><td class="has-text-align-left" data-align="left"><ul><br><li><strong>environment </strong>: Définit des variables d&rsquo;environnement pour un service.</li></ul></td><td><ul><br><li><strong>configs et secrets :</strong> Pour spécifier des configurations et des secrets à utiliser dans un service dans un environnement de swarm.</li></ul></td></tr><tr><td class="has-text-align-left" data-align="left"><ul><li><strong>depends_on :</strong> Déclare les dépendances entre les services pour garantir l&rsquo;ordre de démarrage.</li></ul></td><td><ul><li><strong>healthcheck : </strong>Définit des vérifications de santé pour un service.</li></ul></td></tr></tbody></table></figure>



<p>Les instructions doivent être contenu dans un fichier qui se nommera « docker-compose.yml ». Dans ce Docker compose, nous allons pouvoir faire des appels à des Dockerfiles. Dans un premier temps nous nous concentrerons sur Docker compose. Cela nous permettra de comprendre sont fonctionnement. Dans un second temps nous verrons comment faire fonctionner Docker-compose avec des<a href="https://www.pandawan.fr/?p=1188"> Dockerfiles.</a></p>



<h4 class="wp-block-heading" id="h-exemple-de-docker-compose">Exemple de Docker-compose</h4>



<p>Pour illustrer, nous prendrons comme exemple la conteneurisation d’un stack LAMP (Linux Apache MariaDB et PHP) où nous installerons <a href="https://www.wordpress.org">WordPress. </a></p>



<h5 class="wp-block-heading" id="h-installation-de-docker-compose">Installation de Docker Compose</h5>



<p>Avant cela, nous allons avoir besoin d’installer l’outils Docker Compose. Docker Compose est un outil écrit en Python et il est distribué via le gestionnaire de paquet Python appelé « pip ».</p>



<p>Installation le gestionnaire pip puis nous installerons Docker-Compose.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# dnf install -y python3-pip
&#91;root@docker ~]# pip3 install docker-compose</code></pre>



<h5 class="wp-block-heading" id="h-creation-environnement-de-travail">Création environnement de travail</h5>



<p>Ensuite, nous créerons ensuite un répertoire de travail.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# mkdir /home/Stack-LAMP</code></pre>



<h5 class="wp-block-heading" id="h-creation-du-fichier-yaml">Création du fichier YAML</h5>



<p>Nous ne rendrons dans le répertoire que nous avons créés , nous créerons un fichier nommé « docker-compose.yml ». Nous éditerons ce fichier à l&rsquo;aide d&rsquo;un éditeur de texte en ligne de commande (nano, vi, etc&#8230;)</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# cd /home/Stack-LAMP/</code></pre>



<pre class="wp-block-code"><code>&#91;root@docker Stack-LAMP]# vi docker-compose.yml</code></pre>



<h5 class="wp-block-heading" id="h-contenu-du-fichier-de-yaml">Contenu du fichier de YAML</h5>



<p>Pour rappel, les fichiers YAML à une syntaxe basée sur l’indentation (espaces ou tabulations). Cette contrainte rend le code plus lisible mais exige une attention particulière à la mise en forme. Rappelons également YAML est sensible à la case.</p>



<p>Dans un premier temps , nous allons définir la version de la syntaxe qui sera utilisé dans ce fichier. La version de la syntaxe est liée à la version de Docker Engine installée sur la machine. Dans notre exemple, nous sommes en version 24.0.5, nous utiliserons la version 3.8.</p>



<p>Nous commencerons donc notre fichier à déclarer la version de la syntaxe.</p>



<pre class="wp-block-code"><code>version: '3.8'</code></pre>



<h6 class="wp-block-heading" id="h-declaration-des-services">Déclaration des services</h6>



<p>Ensuite, nous allons spécifier nos services : un container hébergera la base de données, le second hébergera le serveur web et l’application WordPress. Ses informations seront renseignées dans la section «&nbsp;services&nbsp;».</p>



<pre class="wp-block-code"><code>version: '3.8'
services&nbsp;:
#Service base de données
<strong>db&nbsp;:</strong>
#Instruction
# Web Server et wordpress
<strong>wordpress&nbsp;:</strong>
#Instruction</code></pre>



<h6 class="wp-block-heading" id="h-instruction-pour-le-service-db">Instruction pour le service db</h6>



<p>Dans les instructions du conteneur db, nous indiquerons l’images que nous utiliserons, à savoir l’image officiel de mariadb dans sa dernière version, les données de la base de données devront être persistante, nous montrons donc un volume.</p>



<pre class="wp-block-code"><code>services&nbsp;:
#Service base de données
db:
<strong> image: mariadb:latest</strong>
<strong> volumes:</strong>
<strong> - db_data:/var/lib/mysql</strong>
# Web Server et wordpress
wordpress&nbsp;:
#Instruction</code></pre>



<p>Nous allons définir les variables d&rsquo;environnement pour paramétrer la base de données, en spécifiant un mot de passe pour l&rsquo;utilisateur root. Nous créerons également un utilisateur dédié à la gestion de la base de données WordPress, avec un identifiant et un mot de passe spécifiques, et créerons une base de données dédiée à WordPress.</p>



<pre class="wp-block-code"><code>services&nbsp;:
#Service base de données
db:
image: mariadb:latest
volumes:
- db_data:/var/lib/mysql
<strong> environment:</strong>
<strong> MYSQL_ROOT_PASSWORD: p@ssw0rd1</strong>
 <strong>MYSQL_DATABASE: wordpress</strong>
<strong> MYSQL_USER: wordpress_user</strong>
<strong> MYSQL_PASSWORD: p@ssw0rd1</strong>
# Web Server et wordpress
wordpress&nbsp;:
#Instruction</code></pre>



<h6 class="wp-block-heading" id="h-instruction-pour-le-service-wordpress">Instruction pour le service WordPress<mark class="annotation-text annotation-text-yoast" id="annotation-text-b5c63323-3e36-4ae6-8bf0-556f99ade43c"></mark></h6>



<p>Le conteneur de notre base de données étant configuré, nous pouvons maintenant passer à la création de notre conteneur WordPress. Nous indiquerons que le conteneur « wordpress » dépend du conteneur « db », cela aura pour conséquence que Docker s’assurera que le container « db» soit démarrer avant le container « Apache ».</p>



<pre class="wp-block-code"><code>services :
#Service base de données
db:
#+---------------+
#|Instruction db |
#+---------------+
# Web Server et wordpress
wordpress :
<strong> depends_on:</strong>
<strong> - db</strong>
<strong> image: wordpress:latest</strong></code></pre>



<p>Le conteneur «&nbsp;wordpress&nbsp;» sera en écoute sur le port 80 de la machine hôte, il nous faut donc mapper le port 80 de notre conteneur (qui est le port pas défaut d’écoute du serveur web) sur le port 80 de la machine hôte.</p>



<pre class="wp-block-code"><code>services :
#Service base de données
db:
#+---------------+
#|Instruction db |
#+---------------+
# Web Server et wordpress
wordpress :
depends_on:
- db
image: wordpress:latest
<strong> ports:</strong>
<strong> - "80:80"</strong></code></pre>



<p>Les données de l’application seront persistantes, nous créerons le volumes pour stocker les fichiers de WordPress.</p>



<pre class="wp-block-code"><code>services :
#Service base de données
db:
#+---------------+
#|Instruction db |
#+---------------+
# Web Server et wordpress
wordpress :
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
<strong> volumes:</strong>
<strong> - wordpress_data:/var/www/html</strong></code></pre>



<p>Pour conclure la configuration du conteneur, nous configurerons notre environnement pour permettre à WordPress de se connecter à la base de donnée que nous avons préparer dans le conteneur «&nbsp;db&nbsp;».</p>



<pre class="wp-block-code"><code>services :
#Service base de données
db:
#+---------------+
#|Instruction db |
#+---------------+
# Web Server et wordpress
wordpress :
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
volumes:
- wordpress_data:/var/www/html
<strong> environment:</strong>
<strong> WORDPRESS_DB_HOST: db</strong>
<strong> WORDPRESS_DB_USER: wordpress_user</strong>
<strong> WORDPRESS_DB_PASSWORD: p@ssw0rd1</strong>
<strong> WORDPRESS_DB_NAME: wordpress</strong></code></pre>



<h6 class="wp-block-heading" id="h-gestion-des-volumes">Gestion des volumes<mark class="annotation-text annotation-text-yoast" id="annotation-text-dba6253f-b150-45e3-bf25-2e9d91b2d9d4"></mark></h6>



<p>Pour assurer la persistance des données des volumes utilisées par nos conteneurs, nous devons les déclarés explicitement. Nous monterons le volumes que nous avons utilisées dans nos conteneurs.</p>



<pre class="wp-block-code"><code>services :
#Service base de données
db:
#+---------------+
#|Instruction db |
#+---------------+
# Web Server et wordpress
wordpress :
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
volumes:
- wordpress_data:/var/www/html
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: p@ssw0rd1
WORDPRESS_DB_NAME: wordpress
<strong>volumes:</strong>
<strong> db_data:</strong>
<strong> wordpress_data:</strong></code></pre>



<h6 class="wp-block-heading" id="h-execution-du-docker-compose">Exécution du Docker compose</h6>



<p>Nous exécuterons ce docker-compose à l’aide de la commande suivante&nbsp;:</p>



<pre class="wp-block-code"><code>&#91;root@docker Stack-LAMP]# docker compose up</code></pre>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-5 wp-block-columns-is-layout-flex"></div>



<p>Après avoir exécuter la commande, un certain nombre de tâche s’exécute, notamment les téléchargement des images utilisées dans le fichier docker-compose.yml. Une fois que toutes les tâches ont été exécuté, nous testerons l’accès à notre serveur WordPress depuis un navigateur.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1120" height="812" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-138.png" alt="" class="wp-image-1090" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-138.png 1120w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-138-300x218.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-138-1024x742.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-138-768x557.png 768w" sizes="auto, (max-width: 1120px) 100vw, 1120px" /></figure>



<h2 class="wp-block-heading" id="h-execution-de-nos-conteneur-en-arriere-plan-avec-docker-compose">Exécution de nos conteneur en arriere plan avec Docker-compose</h2>



<p>Notre serveur est pleinement opérationnel. Ceux-ci étant dit, nous avons perdu l’accès à notre terminal, en effet, il est attaché à nos conteneurs, si nous le détachons cela provoquera l’arrêt des conteneurs. Pour exécuter les containeurs en arrière-plan, nous devons ajouter le commutateur «&nbsp;-d&nbsp;», lorsque nous exécutons le docker-compose. Pour tester cette commande, nous allons supprimer ce que nous avons fait, nous tuerons nos conteneurs à l’aide de la combinaison de touche [ctrl]+[c].</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="815" height="173" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-139.png" alt="" class="wp-image-1093" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-139.png 815w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-139-300x64.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-139-768x163.png 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /></figure>



<p>Nous supprimerons les services à l’aide de la commande suivante&nbsp;:</p>



<pre class="wp-block-code"><code>&#91;root@docker Stack-LAMP]# docker compose down</code></pre>



<p>Dans notre  docker-compose des volumes sont créés, nous les supprimerons afin de repartir d’une configuration initiale, nous listerons les volumes pour récupérer leurs noms complets.</p>



<pre class="wp-block-code"><code>&#91;root@docker Stack-LAMP]# docker volume list | grep "stack-lamp"</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="916" height="112" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-141.png" alt="" class="wp-image-1096" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-141.png 916w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-141-300x37.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-141-768x94.png 768w" sizes="auto, (max-width: 916px) 100vw, 916px" /></figure>



<pre class="wp-block-code"><code>&#91;root@docker Stack-LAMP]# docker volume rm stack-lamp_db_data stack-lamp_wordpress_data</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1228" height="109" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-142.png" alt="" class="wp-image-1097" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-142.png 1228w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-142-300x27.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-142-1024x91.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-142-768x68.png 768w" sizes="auto, (max-width: 1228px) 100vw, 1228px" /></figure>



<p>Nous exécutons à nouveau le docker-compose en précisant l’option «&nbsp;-d&nbsp;».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1164" height="178" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-143.png" alt="" class="wp-image-1098" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-143.png 1164w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-143-300x46.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-143-1024x157.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-143-768x117.png 768w" sizes="auto, (max-width: 1164px) 100vw, 1164px" /></figure>



<p>Docker Compose offre une approche déclarative, simplifiant la définition complète d&rsquo;une application, de ses services, de ses dépendances et de ses configurations dans un unique fichier (docker-compose.yml). Cette approche favorise un déploiement homogène et reproductible en décrivant l&rsquo;état souhaité sans spécifier les détails de mise en œuvre.</p>



<p>Pour exploiter pleinement Docker Compose, il est essentiel de comprendre comment l&rsquo;associer à un autre élément clé de l&rsquo;écosystème Docker que nous avons vu plus tôt : les Dockerfiles.</p>
<p>L’article <a href="https://www.pandawan.fr/docker-compose/">09 Docker Compose : Création et gestion de multi-conteneur</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>08 Dockerfiles : Automatiser la création d&#8217;image Docker</title>
		<link>https://www.pandawan.fr/les-dockerfiles-creer-des-images-personnalisees-avec-docker/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 07:45:30 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1188</guid>

					<description><![CDATA[<p>La création d’un conteneur n’est en fait que l’exécution d’une image dans laquelle nous allons installer un ensemble d’outil, de librairies, de framework, etc… Avant de déployer un conteneur, il [...]</p>
<p>L’article <a href="https://www.pandawan.fr/les-dockerfiles-creer-des-images-personnalisees-avec-docker/">08 Dockerfiles : Automatiser la création d&rsquo;image Docker</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>La création d’un conteneur n’est en fait que l’exécution d’une image dans laquelle nous allons installer un ensemble d’outil, de librairies, de framework, etc… Avant de déployer un conteneur, il nous faut donc créer des images que nous allons adapter à nos besoins avec des Dockerfiles. Cette création passera par l’installation des éléments que nous avons vue dans les articles précédent. A cela nous ajouterons des éléments de configurations spécifique à notre conteneur, par exemple, les volumes, le réseaux, etc…</p>



<p> Il pourrait s’avérer fastidieux de recréer cette image à chaque que nous souhaitons la reproduire. Au lieu de cela, nous créer un fichier qui contiendras toutes les instructions pour créer notre image docker personnalisé. Ce fichier s’appelle un DockerFile, il listera un ensemble d’instruction qui sont défini par des mots clés, les Dockerfiles. En voici une liste non-exhaustive&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>FROM</strong> : Spécifie l&rsquo;image de base à partir de laquelle vous allez construire votre image. L&rsquo;argument est le nom de l&rsquo;image de base, par exemple : FROM ubuntu:20.04.</li>



<li><strong>RUN</strong> : Exécute une commande dans l&rsquo;image pour installer des logiciels, mettre à jour des paquets, créer des répertoires, etc. L&rsquo;argument est la commande à exécuter, par exemple : RUN apt-get update &amp;&amp; apt-get install -y apache2.</li>



<li><strong>CMD </strong>: Définit la commande par défaut à exécuter lorsque le conteneur est lancé. L&rsquo;argument est la commande, généralement sous forme d&rsquo;une liste, par exemple : CMD [« apachectl », « -D », « FOREGROUND »].</li>



<li><strong>EXPOSE</strong> : Spécifie les ports sur lesquels le conteneur écoutera. L&rsquo;argument est le numéro de port ou une plage de ports, par exemple : EXPOSE 80.</li>



<li><strong>ENV</strong> : Définit des variables d&rsquo;environnement pour l&rsquo;image. L&rsquo;argument est une paire clé-valeur, par exemple : ENV MY_VARIABLE= »valeur ».</li>



<li><strong>ADD</strong> : Copie des fichiers depuis le système de fichiers hôte dans l&rsquo;image, tout en permettant des opérations plus avancées. L&rsquo;argument est le chemin source et de destination, par exemple : ADD app.tar.gz /app.</li>



<li><strong>COPY</strong> : Copie des fichiers depuis le système de fichiers hôte dans l&rsquo;image, sans les opérations avancées offertes par ADD. L&rsquo;argument est le chemin source et de destination, par exemple : COPY index.html /var/www/html/.</li>



<li><strong>WORKDIR</strong> : Définit le répertoire de travail actuel pour les instructions suivantes dans le Dockerfile. L&rsquo;argument est le chemin du répertoire, par exemple : WORKDIR /app.</li>



<li><strong>USER</strong> : Spécifie l&rsquo;utilisateur ou l&rsquo;identifiant de l&rsquo;utilisateur sous lequel les commandes RUN, CMD, et ENTRYPOINT sont exécutées. L&rsquo;argument est le nom de l&rsquo;utilisateur ou l&rsquo;identifiant.</li>



<li><strong>VOLUME</strong> : Crée un point de montage de volume pour le stockage de données persistantes en dehors du conteneur. L&rsquo;argument est le chemin du point de montage, par exemple : VOLUME /data.</li>
</ul>



<p>En somme toutes les étapes que nous avions réalisées dans le chapitre <a href="https://www.pandawan.fr/wp-admin/post.php?post=1151">03 Image Docker</a> pour créer nos images peuvent être fait à l’aide d’un Dockerfile.</p>



<h3 class="wp-block-heading" id="h-creation-un-dockerfile">Création un DockerFile</h3>



<p>Dans cette mise en pratique nous allons créer un Dockerfile qui nous permettra d’exécuter PHP en version 7.4.Nous commencerons par créer un répertoire de travail. </p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# mkdir /home/MonProjet</code></pre>



<p>Aprés avoir créer ce répertoire, nous allons créer un fichier, qui devra se nommer Dockerfile.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# vi /home/MonProjet/Dockerfile</code></pre>



<p>Dans ce fichier, nous allons renseigner les instructions pour la création de mon image. Nous indiquerons l’image que nous souhaitons utiliser.</p>



<pre class="wp-block-code"><code># Utilisation d’une image Ubuntu de base
FROM ubuntu:latest</code></pre>



<p>Supprimons maintenant toutes les interactivités imposée lors de l’installation de paquets en utilisant les Dockerfiles.</p>



<pre class="wp-block-code"><code>ENV DEBIAN_FRONTEND=nonintercative</code></pre>



<p>Nous mettons ensuite à jours la distribution puis nous installons le service Apache2.</p>



<pre class="wp-block-code"><code># Mise à jour des packages et installation d'Apache2
RUN apt update -y &amp;&amp; apt install -y apache2</code></pre>



<p>Installons les dépendances nécessaires à l’installation de PHP 7.4 puis nous installerons PHP.</p>



<pre class="wp-block-code"><code># Installation de PHP7.4</code></pre>



<pre class="wp-block-code"><code>RUN apt install software-properties-common -y &amp;&amp; add-apt-repository ppa:ondrej/php -y &amp;&amp; apt install php7.4 -y</code></pre>



<p>Nous exposerons le port 80 de notre image.</p>



<pre class="wp-block-code"><code># Exposer le port 80 pour Apache
EXPOSE 80</code></pre>



<p>Ensuite créons le volume pour rendre les données persistantes. Pour cette étape, nous créerons le répertoire sur notre machine. Ensuite nous le monterons dans un volume de notre image.</p>



<pre class="wp-block-code"><code># Créez un répertoire pour les données d'Apache et configurez un point de montage de volume
RUN mkdir /var/www/html/data
VOLUME /var/www/html/data</code></pre>



<p>Nous créerons un fichier PHP qui affichera les informations PHP.</p>



<pre class="wp-block-code"><code># Créez un fichier PHP qui exécute phpinfo()
RUN echo "<?php phpinfo(); ?>" > /var/www/html/data/phpinfo.php</code></pre>



<p>Nous démarrerons ensuite PHP.</p>



<pre class="wp-block-code"><code># Démarrer Apache en premier plan
CMD &#91;"apachectl", "-D", "FOREGROUND"]</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1357" height="515" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-129.png" alt="" class="wp-image-1073" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-129.png 1357w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-129-300x114.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-129-1024x389.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-129-768x291.png 768w" sizes="auto, (max-width: 1357px) 100vw, 1357px" /></figure>



<h3 class="wp-block-heading" id="h-executer-le-dockerfile">Executer le DockerFile</h3>



<p>La liste de ses instructions, vont être exécuté lorsque nous créerons notre image à l’aide de la commande «&nbsp;docker build&nbsp;». Nous allons nous rendre dans le répertoire de travail où se trouver notre Dockerfile afin d’exécuter les Dockerfiles.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# cd /home/MonProjet/</code></pre>



<p>Dans ce répertoire, nous exécuterons la commande de création de notre image, en lui donnant un nom.</p>



<pre class="wp-block-code"><code>&#91;root@docker MonProjet]# docker build -t php74 .</code></pre>



<p>Une fois la commande exécutée, nous voyons les étapes de la création.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1687" height="386" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-131.png" alt="" class="wp-image-1077" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-131.png 1687w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-131-300x69.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-131-1024x234.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-131-768x176.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-131-1536x351.png 1536w" sizes="auto, (max-width: 1687px) 100vw, 1687px" /></figure>



<p>Nous vérifierons que l’images à bien été ajouter à notre registre interne.</p>



<pre class="wp-block-code"><code>&#91;root@docker MonProjet]# docker images | grep php74</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1368" height="90" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-132.png" alt="" class="wp-image-1079" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-132.png 1368w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-132-300x20.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-132-1024x67.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-132-768x51.png 768w" sizes="auto, (max-width: 1368px) 100vw, 1368px" /></figure>



<p> Testons cette images, après avoir créé notre instance, nous tenterons d’accéder à notre page «&nbsp;phpinfo.php&nbsp;», en utilisant les Dockerfiles correctement configurés.</p>



<pre class="wp-block-code"><code>&#91;root@docker MonProjet]# docker run -d -p 80:80 php74</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="931" height="548" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-133.png" alt="" class="wp-image-1080" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-133.png 931w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-133-300x177.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-133-768x452.png 768w" sizes="auto, (max-width: 931px) 100vw, 931px" /></figure>



<p></p>
<p>L’article <a href="https://www.pandawan.fr/les-dockerfiles-creer-des-images-personnalisees-avec-docker/">08 Dockerfiles : Automatiser la création d&rsquo;image Docker</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>07 Docker registry : un registre Docker privé</title>
		<link>https://www.pandawan.fr/07-docker-registry-un-registre-docker-prive/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 07:44:48 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1179</guid>

					<description><![CDATA[<p>Stockage initial des images Nous créons des images et les stockons sur notre propre ordinateur. À mesure que nos projets se développent, nous utiliserons un Docker registry pour partager ces [...]</p>
<p>L’article <a href="https://www.pandawan.fr/07-docker-registry-un-registre-docker-prive/">07 Docker registry : un registre Docker privé</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h4 class="wp-block-heading">Stockage initial des images</h4>



<p>Nous créons des images et les stockons sur notre propre ordinateur. À mesure que nos projets se développent, nous utiliserons un Docker registry pour partager ces images personnalisées. La première idée qui nous vient souvent à l&rsquo;esprit est de les stocker sur une plateforme publique, comme <a href="https://hub.docker.com/">Docker Hub</a>.</p>



<h4 class="wp-block-heading">Limitations de Docker Hub gratuit</h4>



<p>Néanmoins, il est important de noter que la version gratuite de Docker Hub présente certaines limitations. La capacité totale de stockage peut être restreinte, ce qui constitue une des principales limitations. Pour des projets de petite envergure, cette limite peut être suffisante. Cependant, pour des projets plus importants ou des équipes de développement collaboratives, cette capacité limitée peut rapidement devenir un obstacle. De plus, la version gratuite peut également imposer des restrictions de bande passante, de vitesse de téléchargement et de stockage. Ces restrictions peuvent affecter la rapidité avec laquelle vous pouvez distribuer vos images.</p>



<h4 class="wp-block-heading">Création d&rsquo;un registre Docker privé</h4>



<p>Pour les projets nécessitant un espace de stockage plus important, il peut être judicieux de créer un registre Docker privé. Cette option offrira un contrôle total sur l&rsquo;espace de stockage, la bande passante et la vitesse.</p>



<h4 class="wp-block-heading">Sécurité et confidentialité</h4>



<p>Lorsque nous utilisons Docker Hub en version gratuite, les images sont par défaut publiques. Toute personne connaissant le nom de référence de notre image peut y accéder et la télécharger. Cette caractéristique avantage les projets open source ou les collaborations publiques. Cependant, pour les projets sensibles ou privés, elle pose des problèmes de sécurité ou de confidentialité. Nous devons donc prendre en compte cette caractéristique publique lors du choix de l&rsquo;outil pour héberger nos images Docker.</p>



<h4 class="wp-block-heading">Options pour la confidentialité</h4>



<p>Si la confidentialité est une préoccupation, nous devrions passer à un abonnement payant sur Docker Hub. Une autre option est de créer notre propre Docker Hub, appelé un Registry local. Pour certains projets, créer notre propre registre Docker privé est la meilleure solution pour avoir un contrôle total.</p>



<h3 class="wp-block-heading" id="h-mise-en-place-d-un-conteneur-prive-local">Mise en place d&rsquo;un conteneur privé local</h3>



<p>Dans ce ce chapitre, nous allons explorer le processus d&rsquo;installation d&rsquo;un registre Docker privé. Notons que cet outil était autrefois appelé « Docker Registry », a été renommé en « Docker Distribution » dans sa version 2.</p>



<p>Téléchargerons l’image depuis le portail Docker hub.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker pull registry</code></pre>



<p>Ensuite, créerons ensuite un répertoire sur notre machine local pour y stocker les images.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# mkdir -p /var/lib/registry</code></pre>



<p>Maintenant, nous pouvons démarrer notre instance docker-registry</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /var/lib/registry:/var/lib/registry registry:latest</code></pre>



<h3 class="wp-block-heading" id="h-ajout-dimage-dans-docker-registry-local">Ajout dimage dans Docker registry local</h3>



<p>Nous allons ensuite peupler ce registre en y envoyant nos images <a href="https://www.pandawan.fr/wp-admin/post.php?post=1151">que nous avons créé précédemment</a>. Il nous faudra modifier le «&nbsp;tag&nbsp;» puis pousser l’image vers notre registre.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker tag srv_web_php8 localhost:5000/srv_web_php8 <br>&#91;root@docker ~]# docker push localhost:5000/srv_web_php8</code></pre>



<p>En nous rendant dans le catalogue de notre registre, nous pouvons remarquer que nous voyons notre image.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# curl http://localhost:5000/v2/_catalog</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1167" height="85" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-123.png" alt="Afficher le cataloque des image Docker" class="wp-image-1058" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-123.png 1167w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-123-300x22.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-123-1024x75.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-123-768x56.png 768w" sizes="auto, (max-width: 1167px) 100vw, 1167px" /></figure>



<p>Nous suivrons la même approche pour les images « reverse-proxy » et « srv_web_php7 ». Tout d&rsquo;abord, nous allons modifier le tag de ces images :</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker tag srv_web_php7 localhost:5000/srv_web_php7
&#91;root@docker ~]# docker tag reverse-proxy localhost:5000/reverse_proxy</code></pre>



<p>Ensuite, nous allons les téléverser vers notre registry local :</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker push localhost:5000/srv_web_php7
&#91;root@docker ~]# docker push localhost:5000/reverse_proxy</code></pre>



<p>De cette manière, notre catalogue d&rsquo;images dans le registry local s&rsquo;enrichira avec ces nouvelles images. Le déplacement d&rsquo;une image vers un autre dépôt n&rsquo;entraîne pas la suppression de l&rsquo;image d&rsquo;origine. En réalité, l&rsquo;attribution d&rsquo;un tag à une image n&rsquo;est qu&rsquo;un alias. Cela devient évident lorsque nous examinons notre liste d&rsquo;images en filtrant :</p>



<ul class="wp-block-list">
<li> par la chaîne de caractères « srv » pour nos images « srv_web_php7 » et « srv_web_php8 », </li>



<li>par « reverse» pour notre image « reverse-proxy ».</li>
</ul>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker images --format {{.Repository}} | grep -E 'srv|reverse'</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1218" height="216" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-124.png" alt="lister nos images" class="wp-image-1059" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-124.png 1218w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-124-300x53.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-124-1024x182.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-124-768x136.png 768w" sizes="auto, (max-width: 1218px) 100vw, 1218px" /></figure>



<p>Nous supprimerons les images que nous avons transférer dans notre repository local.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker rmi reverse-proxy srv_web_php8 srv_web_php7</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1172" height="148" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-125.png" alt="Lister nos images dans notre Docker registry" class="wp-image-1061" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-125.png 1172w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-125-300x38.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-125-1024x129.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-125-768x97.png 768w" sizes="auto, (max-width: 1172px) 100vw, 1172px" /></figure>



<h3 class="wp-block-heading" id="h-ajouter-le-docker-registry-en-utilisant-portainer">Ajouter le Docker registry en utilisant Portainer</h3>



<p>Nous ajouterons notre Docker registry dans <a href="https://www.pandawan.fr/wp-admin/post.php?post=1174">Portainer</a>, après nous être connecter, nous sélectionnerons dans le menu latéral gauche « Registries ».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1907" height="511" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-126.png" alt="Ajouter notre Docker registry phase 1" class="wp-image-1063" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-126.png 1907w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-126-300x80.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-126-1024x274.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-126-768x206.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-126-1536x412.png 1536w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-126-1800x482.png 1800w" sizes="auto, (max-width: 1907px) 100vw, 1907px" /></figure>



<p>Nous cliquerons ensuite sur le bouton «&nbsp;Add registry&nbsp;».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1919" height="515" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-127.png" alt="Ajouter notre Docker registry phase 2" class="wp-image-1067" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-127.png 1919w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-127-300x81.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-127-1024x275.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-127-768x206.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-127-1536x412.png 1536w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-127-1800x483.png 1800w" sizes="auto, (max-width: 1919px) 100vw, 1919px" /></figure>



<p>Dans la page d’ajout de registry, nous sélectionnerons «&nbsp;Custom Registry&nbsp;», puis dans le formulaire en dessous, nous indiquerons un nom, puis l’adresse de notre registry, dans notre contexte, Portainer et notre registry sont installés sur la même machine, nous indiquerons donc notre adresse IP localhost avant de cliquer sur le bouton «&nbsp;Add Registry&nbsp;».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1615" height="707" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-128.png" alt="Ajouter notre Docker registry phase 3" class="wp-image-1071" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-128.png 1615w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-128-300x131.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-128-1024x448.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-128-768x336.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-128-1536x672.png 1536w" sizes="auto, (max-width: 1615px) 100vw, 1615px" /></figure>



<p>De retour sur notre pages « Regestries », notre Docker registry est maintenant listé et donc ajouté.</p>



<p>Pour conclure cette partie, rappelons qu’un registry permet de centraliser les images de conteneurs dans un seul emplacement, ce qui facilite la gestion et le partage des images entre les équipes. Un registre Docker peut également être utilisé pour améliorer la sécurité et les performances des applications conteneurisées.</p>
<p>L’article <a href="https://www.pandawan.fr/07-docker-registry-un-registre-docker-prive/">07 Docker registry : un registre Docker privé</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>06 Gestion des conteneurs et Images Docker avec portainer.io</title>
		<link>https://www.pandawan.fr/portainer-simplifiez-la-gestion-de-vos-conteneurs-docke/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 07:44:30 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1174</guid>

					<description><![CDATA[<p>La gestion de Docker comprend la gestion d&#8217;éléments tels que les images, les conteneurs, les volumes et les réseaux. Pour simplifier cette gestion, vous pouvez opter pour une interface graphique [...]</p>
<p>L’article <a href="https://www.pandawan.fr/portainer-simplifiez-la-gestion-de-vos-conteneurs-docke/">06 Gestion des conteneurs et Images Docker avec portainer.io</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>La gestion de Docker comprend la gestion d&rsquo;éléments tels que les images, les conteneurs, les volumes et les réseaux. Pour simplifier cette gestion, vous pouvez opter pour une interface graphique conviviale comme Portainer plutôt que d&rsquo;utiliser la ligne de commande que nous l&rsquo;avons fait dans <a href="https://www.pandawan.fr/?p=1174">les articles précéden</a>t. C&rsquo;est précisément ce que vous offre <a href="https://www.portainer.io/">cet outil.</a></p>



<h3 class="wp-block-heading" id="h-presentation-de-portainer">Présentation de Portainer</h3>



<p>Portainer vous offre une interface de gestion conviviale pour les conteneurs et les images Docker, simplifiant ainsi la gestion des conteneurs Docker. Étant lui-même un conteneur Docker, vous pouvez facilement le déployer sur votre système Docker. En se connectant à l&rsquo;API Docker de votre système, Portainer vous permet de visualiser et de gérer tous les aspects de Docker via une interface web conviviale. Par conséquent, vous pouvez créer et gérer des images, des conteneurs, des volumes et des réseaux sans avoir à mémoriser des commandes Docker complexes. Une fois connecté à Portainer via un navigateur web, vous pouvez alors effectuer des tâches telles que :</p>



<ul class="wp-block-list">
<li> le déploiement de nouveaux conteneurs à partir d&rsquo;images existantes,</li>



<li> la surveillance en temps réel des performances de vos conteneurs,</li>



<li> la gestion de volumes de stockage, et la configuration de réseaux pour vos conteneurs.</li>
</ul>



<p>Un des avantages de Portainer est sa simplicité d&rsquo;installation et d&rsquo;utilisation. Cet avantage fait de Portainer un outil idéal pour gérer Docker.</p>



<h2 class="wp-block-heading" id="h-installation-de-portainer-et-lancement-du-conteneur-docker">Installation de Portainer et lancement du conteneur Docker</h2>



<p>L&rsquo;installation est également simplifiée, car Portainer est fourni sous forme d&rsquo;image Docker, ce qui le rend facile à déployer. Globalement, Portainer facilite la gestion de Docker en rendant les opérations courantes plus simples.</p>



<p>L’image Docker que nous utiliserons est «&nbsp;portainer/portainer-ce&nbsp;:latest&nbsp;». Nous mapperons deux ports :</p>



<ul class="wp-block-list">
<li> le 8000 qui servira aux requêtes http </li>



<li> le 9443 pour les requêtes https.</li>
</ul>



<p>Nous ajouterons l’argument «&nbsp;&#8211;restart=always&nbsp;». Cet argument permet au conteneur de démarrer automatiquement à chaque redémarrage du service Docker.</p>



<p>De plus, Nous monterons deux volumes&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>-v /var/run/docker.sock:/var/run/docker.sock</strong>: On monte le socket Docker de l&rsquo;hôte (/var/run/docker.sock) dans le conteneur. Cela permet à Portainer d&rsquo;interagir avec le démon Docker de l&rsquo;hôte, ce qui permettra la gestion des conteneurs.</li>
</ul>



<ul class="wp-block-list">
<li><strong>-v portainer_data:/data</strong>: Cet indicateur monte un volume nommé «&nbsp;portainer_data&nbsp;» dans le conteneur à l&#8217;emplacement « /data ». Ce volume est utilisé pour stocker les données de configuration et de stockage persistantes de Portainer.</li>
</ul>



<p>En considérant tous les points que nous avons traités la commande sera la suivante&nbsp;:</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run -d -p 9000:9000 -p 9443:9443 -p 8000:8000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1667" height="467" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-112.png" alt="" class="wp-image-1028" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-112.png 1667w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-112-300x84.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-112-1024x287.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-112-768x215.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-112-1536x430.png 1536w" sizes="auto, (max-width: 1667px) 100vw, 1667px" /></figure>



<p>Dans l&rsquo;exemple précédent, nous lançons le conteneur Portainer directement. Comme nous n&rsquo;avons pas encore téléchargé l&rsquo;image spécifiée dans la commande, Docker la télécharge automatiquement depuis la plateforme Docker Hub.</p>



<p>Nous configurerons notre pare-feu pour qu’autoriser les requêtes sur le port 9443 et 8000.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# firewall-cmd --add-port=8000/tcp --permanent
&#91;root@docker ~]# firewall-cmd --add-port=9443/tcp --permanent
&#91;root@docker ~]# firewall-cmd --reload</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="921" height="198" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-113.png" alt="" class="wp-image-1030" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-113.png 921w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-113-300x64.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-113-768x165.png 768w" sizes="auto, (max-width: 921px) 100vw, 921px" /></figure>



<h3 class="wp-block-heading" id="h-acceder-a-l-interface-web-de-l-outil">Accéder à l&rsquo;interface web de l&rsquo;outil</h3>



<p>Depuis le navigateur de notre machine connectée au même réseau que celle exécutant Docker, nous devons d&rsquo;abord accéder à l’URL https://:9443. Ensuite, nous recevrons un avertissement de sécurité car nous utilisons un certificat autosigné. Une fois que nous sommes sur l’interface Portainer, nous serons alors invités à renseigner un mot de passe pour l’utilisateur « admin ». Après avoir configuré le mot de passe, nous pourrons commencer à utiliser Portainer pour gérer nos conteneurs Docker. Enfin, assurons-nous de sauvegarder nos informations de connexion pour un accès futur.<ip_hôte_docker>.</ip_hôte_docker></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1693" height="801" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-114.png" alt="Portainer interface web Modification mot de passe" class="wp-image-1032" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-114.png 1693w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-114-300x142.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-114-1024x484.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-114-768x363.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-114-1536x727.png 1536w" sizes="auto, (max-width: 1693px) 100vw, 1693px" /></figure>



<h4 class="wp-block-heading" id="h-presentation-de-l-interface-web">Présentation de l&rsquo;interface web</h4>



<p>Depuis le navigateur de notre machine connectée au même réseau que celle exécutant Docker, nous accédons d&rsquo;abord à l’URL https://:9443. Ensuite, nous recevons un avertissement de sécurité car nous utilisons un certificat autosigné. Une fois sur l’interface Portainer, nous renseignons un mot de passe pour l’utilisateur « admin ». Après avoir configuré le mot de passe, nous commençons à utiliser Portainer pour gérer nos conteneurs Docker. Enfin, nous sauvegardons nos informations de connexion pour un accès futur.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1871" height="642" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-115.png" alt="Portainer interface web ajout d'environnement" class="wp-image-1035" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-115.png 1871w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-115-300x103.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-115-1024x351.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-115-768x264.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-115-1536x527.png 1536w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-115-1800x618.png 1800w" sizes="auto, (max-width: 1871px) 100vw, 1871px" /></figure>



<p>Nous avons un bref récapitulatif de notre environnement local, dans la capture ci-dessous, nous pouvons voir que nous avons 4 conteneurs qui tournent, 2 volumes ou encore 5 images, nous avons également accès à des informations liées à l’hôte, nous voyons que notre hôte a 4 CPU et 3.8 Go de ram. Pour avoir plus de détails, nous cliquerons sur le bandeau «&nbsp;local&nbsp;».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1559" height="432" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-116.png" alt="Portainer interface web liste des environnement" class="wp-image-1038" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-116.png 1559w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-116-300x83.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-116-1024x284.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-116-768x213.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-116-1536x426.png 1536w" sizes="auto, (max-width: 1559px) 100vw, 1559px" /></figure>



<p>En cliquant sur le bandeau «&nbsp;local&nbsp;», nous accédons à une interface qui offre plus d’information et plus d’options sur Portainer.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1871" height="689" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-117.png" alt="Portainer interface web Tableau de bord" class="wp-image-1040" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-117.png 1871w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-117-300x110.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-117-1024x377.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-117-768x283.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-117-1536x566.png 1536w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-117-1800x663.png 1800w" sizes="auto, (max-width: 1871px) 100vw, 1871px" /></figure>



<p>Sur la partie latérale de Portainer, nous avons accès aux différents composants de Docker. Cliquons sur Containers, nous devrions y voir nos conteneurs et leurs états.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1887" height="548" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-118.png" alt="Portainer interface web Liste des conteneurs Docker" class="wp-image-1045" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-118.png 1887w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-118-300x87.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-118-1024x297.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-118-768x223.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-118-1536x446.png 1536w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-118-1800x523.png 1800w" sizes="auto, (max-width: 1887px) 100vw, 1887px" /></figure>



<p>Dans la section Images de Portainer, nous avons accès à nos images, celles qui ne seront pas utilisées seront marquées «&nbsp;Unused&nbsp;». Nous voyons, en haut de page, que le registry, c’est-à-dire l’endroit où Docker ira chercher les images par défaut. Il est tout à fait possible de télécharger les images Docker en indiquant leur nom dans le champ images.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1472" height="729" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-119.png" alt="Portainer interface web Liste des images Docker" class="wp-image-1048" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-119.png 1472w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-119-300x149.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-119-1024x507.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-119-768x380.png 768w" sizes="auto, (max-width: 1472px) 100vw, 1472px" /></figure>



<p>Dans la partie réseau, il nous sera possible de voir les réseaux créés à l’installation de Docker. Ils sont reconnaissables au tag «&nbsp;system&nbsp;» mais aussi ceux que nous avons créés.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1556" height="546" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-120.png" alt="Portainer interface web Liste des réseaux Docker" class="wp-image-1051" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-120.png 1556w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-120-300x105.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-120-1024x359.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-120-768x269.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-120-1536x539.png 1536w" sizes="auto, (max-width: 1556px) 100vw, 1556px" /></figure>



<p>En cliquant sur le nom du réseau, nous connaîtrons les conteneurs qui y sont connectés. Par exemple, reseau_php7 contient deux conteneurs «&nbsp;rp&nbsp;» et «&nbsp;app-php7&nbsp;».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1545" height="227" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-121.png" alt="Portainer interface web Liste des réseaux Docker" class="wp-image-1054" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-121.png 1545w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-121-300x44.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-121-1024x150.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-121-768x113.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-121-1536x226.png 1536w" sizes="auto, (max-width: 1545px) 100vw, 1545px" /></figure>



<p>La logique restera un peu la même pour les volumes de Portainer.</p>
<p>L’article <a href="https://www.pandawan.fr/portainer-simplifiez-la-gestion-de-vos-conteneurs-docke/">06 Gestion des conteneurs et Images Docker avec portainer.io</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>05 conteneur Docker : l&#8217;isolation</title>
		<link>https://www.pandawan.fr/conteneur-par-la-pratique/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 07:44:29 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1156</guid>

					<description><![CDATA[<p>Aprés avoir vu les conteneneurs Dockers, nous allons maintenant explorer l&#8217;isolation d conteneur Docker. Tout d&#8217;abord, nous commencerons par voir un avantage de la conteneurisation : l&#8217;isolation. En effet, la capacité à [...]</p>
<p>L’article <a href="https://www.pandawan.fr/conteneur-par-la-pratique/">05 conteneur Docker : l&rsquo;isolation</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Aprés avoir vu les <a href="https://www.pandawan.fr/?p=1153">conteneneurs Dockers</a>, nous allons maintenant explorer l&rsquo;isolation d conteneur Docker. Tout d&rsquo;abord, nous commencerons par voir un avantage de la conteneurisation : l&rsquo;isolation. En effet, la capacité à isoler les applications grâce aux conteneurs individuels résout les conflits de dépendances entre applications. Par exemple, lorsqu&rsquo;une application requiert une version spécifique d&rsquo;une bibliothèque, cela peut créer des conflits avec une autre application. Ainsi, en utilisant des conteneurs, chaque application est emballée avec ses propres dépendances, évitant ainsi les perturbations mutuelles. De ce fait, vous pouvez exécuter plusieurs applications sur la même machine sans conflits. </p>



<h2 class="wp-block-heading" id="h-contexte-de-la-mise-en-pratique-de-l-isolation-d-un-conteneur-docker">Contexte de la mise en pratique de l&rsquo;isolation d&rsquo;un conteneur Docker</h2>



<p>Pour illustrer le concept de l&rsquo;isolation de conteneur  Docker, prenons un exemple concret. Supposons que vous ayez une application web relativement ancienne qui exige PHP7. En outre, sur cette machine, vous souhaitez également installer une autre application plus récente qui nécessite la version PHP8. Dans une installation traditionnelle, vous auriez besoin de deux machines virtuelles distinctes (ou deux machines physiques). Cependant, en les intégrant dans un conteneur Docker, nous pouvons exécuter les deux applications sur la même machine en s&rsquo;appuyant sur des conteneurs Docker. Ainsi, cela évitera la complexité et les coûts supplémentaires associés à la gestion de plusieurs machines. C&rsquo;est ce concept de la conteneurisation que nous allons couvrir dans un premier temps.</p>



<h2 class="wp-block-heading" id="h-creation-d-un-conteneur-docker-executant-php7">Création d’un conteneur Docker exécutant php7</h2>



<p>Nous illustrerons cet exemple par une mise en pratique. Précédemment, nous avons récupérer une image Ubuntu, nous allons nous en servir pour créer un conteneur Docker.</p>



<p>Nous créerons ce conteneur Docker que nous nommerons « apache_php7 » soit la commande suivante :</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run -it --name apache_php7 ubuntu</code></pre>



<p>Après avois créé notre conteneur Docker, nous mettrons à jours ce dernier.</p>



<pre class="wp-block-code"><code>root@94331d07f35a:/# apt update -y
root@94331d07f35a:/# apt upgrade -y</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1055" height="280" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-44.png" alt="update du systeme" class="wp-image-890" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-44.png 1055w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-44-300x80.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-44-1024x272.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-44-768x204.png 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px" /></figure>



<h3 class="wp-block-heading" id="h-installation-serveur-web-apache">Installation serveur web Apache</h3>



<p>PHP a besoin d&rsquo;un serveur web pour fonctionner.  Apache est l&rsquo;un des serveurs web les plus couramment utilisés pour exécuter des applications PHP. Par conséquent nous installerons «&nbsp;Apache httpd&nbsp;»</p>



<pre class="wp-block-code"><code>root@94331d07f35a:/# apt install apache2 -y</code></pre>



<h3 class="wp-block-heading" id="h-installation-de-php-7-4">Installation de PHP 7.4</h3>



<p>La version 22.04 d&rsquo;Ubuntu inclut des dépôts qui fournissent PHP dans sa version 8 par défaut. Si nous souhaitons installer la version 7 de PHP, nous devrons recourir à un <a href="https://launchpad.net/ubuntu/+ppas">PPA (Personal Package Archive)</a>. Dans le PPA de ondrej nous y retrouverons les packages requis pour installer PHP 7. Pour pouvoir ajouter un PPA, nous allons avoir besoin de l’utilitaire «&nbsp;add-apt-repository&nbsp;» présent dans le package «&nbsp;software-properties-common&nbsp;».</p>



<pre class="wp-block-code"><code>root@94331d07f35a:/# apt install software-properties-common -y
root@94331d07f35a:/# add-apt-repository ppa:ondrej/php -y
root@94331d07f35a:/# apt install php7.4 -y</code></pre>



<p>Lors de l’installation, il nous sera demandé le choix de zone géographique pour configurer le fuseau horaire de php (php.ini).</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1630" height="738" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-46.png" alt="tzdata php dans le conteneur" class="wp-image-894" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-46.png 1630w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-46-300x136.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-46-1024x464.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-46-768x348.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-46-1536x695.png 1536w" sizes="auto, (max-width: 1630px) 100vw, 1630px" /></figure>



<p>Vérifions  que la version de PHP est effectivement bien la version 7 à l’aide de la commande suivante&nbsp;: .</p>



<pre class="wp-block-code"><code>root@94331d07f35a:/# php --version</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1273" height="161" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-47.png" alt="version de php" class="wp-image-897" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-47.png 1273w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-47-300x38.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-47-1024x130.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-47-768x97.png 768w" sizes="auto, (max-width: 1273px) 100vw, 1273px" /></figure>



<p>Nous allons générer un fichier qui exécute la fonction phpinfo(), ce qui nous permettra d&rsquo;afficher la configuration de PHP. Ce fichier sera placé dans le répertoire par défaut d&rsquo;Apache, qui est /var/www/html.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1126" height="221" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-48.png" alt="executer un script php dans un conteneur" class="wp-image-899" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-48.png 1126w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-48-300x59.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-48-1024x201.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-48-768x151.png 768w" sizes="auto, (max-width: 1126px) 100vw, 1126px" /></figure>



<p>La configuration est terminé . Nous sortirons de notre conteneur à l’aide de la combinaison de touche [ctrl]+[p], [ctrl]+[q].</p>



<p>Nous listerons nos conteneurs pour s’assurer que celui que nous venons de créer est bien présent et actif.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker ps</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1473" height="139" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-49.png" alt="Liste des conteneur en run" class="wp-image-901" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-49.png 1473w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-49-300x28.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-49-1024x97.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-49-768x72.png 768w" sizes="auto, (max-width: 1473px) 100vw, 1473px" /></figure>



<h3 class="wp-block-heading" id="h-mappage-de-port">Mappage de port</h3>



<p>Pour accéder à ce conteneur Docker, nous devons associer le port d&rsquo;écoute du conteneur au port de  la machine hôte. Dans notre exemple, nous avons conteneurisé un serveur web Apache. Le serveur apache par défaut écoute sur le port 80. En mappant le port 80 du conteneur au port 80 de la machine hôte, il sera accessible via son IP. L’adresse de la machine utilise l’adresse 10.0.0.3, cette sur cette adresse que le serveur web sera accessible</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1494" height="127" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-50.png" alt="cli récupérer son adresse IP" class="wp-image-903" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-50.png 1494w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-50-300x26.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-50-1024x87.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-50-768x65.png 768w" sizes="auto, (max-width: 1494px) 100vw, 1494px" /></figure>



<p>Nous n’avons pas précisé d’écoute à la création de notre container. Par conséquent, nous pouvons constater que le conteneur n’écoute sur aucun port.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1466" height="115" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-51.png" alt="Liste des conteneur docker en cours" class="wp-image-905" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-51.png 1466w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-51-300x24.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-51-1024x80.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-51-768x60.png 768w" sizes="auto, (max-width: 1466px) 100vw, 1466px" /></figure>



<p>Dans la partie suivante, nous verrons comment convertir ce conteneur Docker en une image. En effet, pour exposer le port 80 de notre conteneur Docker, nous devons le préciser au lancement de l&rsquo;image. Dans notre cas, si nous ne convertissons pas le conteneur Docker en une image Docker, nous devrions tout refaire. Le fait de convertir ce conteneur Docker en image Docker, nous permettra de repartir de là où on en était.</p>



<h3 class="wp-block-heading" id="h-convertir-un-conteneur-docker-en-image-docker">Convertir un conteneur Docker en image Docker</h3>



<p>Configurez le mappage de port lors de la création du conteneur Docker. Ensuite, pour éviter de répéter toutes les commandes utilisées pour créer ce conteneur, transformez-le en une image. Appelez cette image&nbsp;<strong>srv_web_php7</strong>&nbsp;et ajoutez-y un tag.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker commit apache_php7 srv_web_php7:latest</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1099" height="105" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-53.png" alt="" class="wp-image-908" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-53.png 1099w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-53-300x29.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-53-1024x98.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-53-768x73.png 768w" sizes="auto, (max-width: 1099px) 100vw, 1099px" /></figure>



<p>Nous vérifierons que l’image Docker a bien été ajouter sur la machine hôte.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker images</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1133" height="145" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-54.png" alt="" class="wp-image-910" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-54.png 1133w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-54-300x38.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-54-1024x131.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-54-768x98.png 768w" sizes="auto, (max-width: 1133px) 100vw, 1133px" /></figure>



<h3 class="wp-block-heading" id="h-supprimer-un-conteneur">Supprimer un conteneur</h3>



<p>Nous répliquons la configuration de cette image chaque fois que nous l&rsquo;utilisons pour créer un conteneur Docker. En résumé, nous pouvons supprimer le conteneur Docker utilisé pour créer cette image. Pour cela, nous commençons par arrêter le conteneur Docker, puis nous le supprimons. Enfin, nous vérifions que le conteneur Docker a bien été supprimé.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker stop apache_php7
&#91;root@docker ~]# docker rm apache_php7
&#91;root@docker ~]# docker ps -a</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1541" height="246" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-56.png" alt="" class="wp-image-913" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-56.png 1541w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-56-300x48.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-56-1024x163.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-56-768x123.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-56-1536x245.png 1536w" sizes="auto, (max-width: 1541px) 100vw, 1541px" /></figure>



<h3 class="wp-block-heading" id="h-supprimer-plusieurs-conteneurs">Supprimer plusieurs conteneurs</h3>



<p>Pour rappel, un conteneur est conçu pour être léger et jetable. Donc, dans une utilisation typique, lorsqu&rsquo;un conteneur est éteint, il n&rsquo;a généralement plus de raison d&rsquo;être. Nous supprimerons donc les conteneurs stockés sur la machine hôte après avoir arrêté ceux qui sont en statut « UP ».</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker stop 7c85ed7d6261
&#91;root@docker ~]# docker rm -f $(docker ps -aq)</code></pre>



<p>Explication de la commande :</p>



<ul class="wp-block-list">
<li><strong>docker ps -aq</strong> : liste tous les conteneurs, en incluant ceux qui ne sont pas en cours d&rsquo;exécution</li>



<li><strong>docker rm -f</strong> supprime tous les conteneurs dont les IDs sont renvoyés par la commande précédente.</li>
</ul>



<p>Nous vérifierons qu’il n’y a plus aucun conteneur.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker ps -a</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1033" height="113" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-57.png" alt="" class="wp-image-915" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-57.png 1033w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-57-300x33.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-57-1024x112.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-57-768x84.png 768w" sizes="auto, (max-width: 1033px) 100vw, 1033px" /></figure>



<h3 class="wp-block-heading" id="h-exposition-d-un-port-d-un-conteneur-docker">Exposition d&rsquo;un port d&rsquo;un conteneur Docker</h3>



<p>Maintenant nous avons un environnement sans aucun conteneur préexistant.Nous testerons notre image précédemment créé. Cette fois nous mapperons le port 80 du conteneur et le port 80 de la machine. Étant donné que le service httpd d&rsquo;Apach n&rsquo;est pas démarrer par défaut, nous allons le lancer manuellement.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run -it -p 80:80 --name php7 srv_web_php7
root@81610801a595:/# apachectl start</code></pre>



<p>L&rsquo;adresse IP de la machine est 10.0.0.3. Par conséquent,le serveur Web de notre conteneur sera accessible à partir de cette adresse. Pour permettre à la machine hôte de recevoir des requêtes sur le port 80. Il nous faudra donc configurer le pare-feu de la machine hôte pour autoriser le trafic entrant sur ce port.</p>



<pre class="wp-block-code"><code>root@81610801a595:/# <em>&#91;ctrl]+&#91;P] &amp; &#91;ctrl]+&#91;Q]</em>
&#91;root@docker ~]# firewall-cmd --add-service=http --permanent
&#91;root@docker ~]# firewall-cmd –reload</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1190" height="166" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-58.png" alt="" class="wp-image-917" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-58.png 1190w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-58-300x42.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-58-1024x143.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-58-768x107.png 768w" sizes="auto, (max-width: 1190px) 100vw, 1190px" /></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="931" height="548" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-59.png" alt="" class="wp-image-919" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-59.png 931w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-59-300x177.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-59-768x452.png 768w" sizes="auto, (max-width: 931px) 100vw, 931px" /></figure>



<p>En lançant un navigateur depuis une machine connectée au même réseau nous nous connecterons à l&rsquo;URL http://10.0.0.3/. Nous devrions avoir accès à notre serveur WEB</p>



<p>Nous nous rendrons sur http://10.0.0.3/phpinfo.php, pour vérifier que nous utilisons PHP version 7.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="931" height="548" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-60.png" alt="" class="wp-image-921" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-60.png 931w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-60-300x177.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-60-768x452.png 768w" sizes="auto, (max-width: 931px) 100vw, 931px" /></figure>



<h4 class="wp-block-heading" id="h-creation-d-un-conteneur-en-executant-php8">Création d’un conteneur en exécutant php8</h4>



<p>La création de notre conteneur Docker qui exécutera PHP 8 suivra la même logique que conteneur exécutant PHP 7. Nous commencerons à partir de notre image Ubuntu de base. Nous installerons à la fois le service httpd d&rsquo;Apache Foundation et PHP. Il est important de noter que la version 8 de PHP est disponible par défaut dans les dépôts d&rsquo;Ubuntu 22.04. Par conséquent nous n&rsquo;aurons pas besoin de recourir à l&rsquo;utilisation de PPA (Personal Package Archive) pour obtenir cette version spécifique.</p>



<p>Le port 80 de la machine hôte est déjà occupé par le conteneur qui exécute PHP version 7. Nous ne pouvons pas l&rsquo;utiliser pour ce conteneur. Nous utiliserons dons  le port 81 de la machine hôte. </p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="898" height="348" src="https://www.pandawan.fr/wp-content/uploads/2024/09/une-image-contenant-texte-peripherique-descripti.png" alt="Une image contenant texte, périphérique

Description générée automatiquement" class="wp-image-923" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/une-image-contenant-texte-peripherique-descripti.png 898w, https://www.pandawan.fr/wp-content/uploads/2024/09/une-image-contenant-texte-peripherique-descripti-300x116.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/une-image-contenant-texte-peripherique-descripti-768x298.png 768w" sizes="auto, (max-width: 898px) 100vw, 898px" /></figure>



<h3 class="wp-block-heading" id="h-configuration-le-conteneur-docker-php-8">Configuration le conteneur docker PHP 8</h3>



<p>Nous commencerons par créer notre conteneur avec la commande suivante&nbsp;:</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run -it -p 81:80 --name php8 ubuntu</code></pre>



<p>Dans le conteneur que nous venons de créer, Aprés avoir mis à jour le systeme nous y installerons : </p>



<ul class="wp-block-list">
<li>le serveur web Apache </li>



<li> php 8</li>
</ul>



<pre class="wp-block-code"><code>root@fb9b37059606:/# apt update -y &amp;&amp; apt upgrade -y
root@fb9b37059606:/# apt install apache2 -y
root@fb9b37059606:/# apt install php -y
root@fb9b37059606:/# apachectl restart</code></pre>



<p>Une fois PHP installé, nous pouvons vérifier qu&rsquo;il s&rsquo;agit bien de la version 8 qui est en cours d&rsquo;exécution.</p>



<pre class="wp-block-code"><code>root@fb9b37059606:/# php -v</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1319" height="173" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-62.png" alt="" class="wp-image-924" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-62.png 1319w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-62-300x39.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-62-1024x134.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-62-768x101.png 768w" sizes="auto, (max-width: 1319px) 100vw, 1319px" /></figure>



<p>Nous créerons également un fichier exécutant la fonction phpinfo() à la racine du répertoire «&nbsp;html&nbsp;» présent dans «&nbsp;/va/www/&nbsp;»</p>



<pre class="wp-block-code"><code>root@fb9b37059606:/# echo "&lt;?php phpinfo(); ?&gt;" &gt; /var/www/html/phpinfo.php</code></pre>



<p>Après être sorti de notre conteneur, nous autoriserons la machine hôte à recevoir des requêtes sur le port 81.</p>



<pre class="wp-block-code"><code>root@fb9b37059606:/#
&#91;root@docker ~]# firewall-cmd --add-port=81/tcp --permanent
&#91;root@docker ~]# firewall-cmd --reload</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1187" height="159" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-63.png" alt="" class="wp-image-927" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-63.png 1187w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-63-300x40.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-63-1024x137.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-63-768x103.png 768w" sizes="auto, (max-width: 1187px) 100vw, 1187px" /></figure>



<p>Nous pouvons maintenant nous rendre sur le port 81 de notre machine hôte pour accéder à notre conteneur. Nous constaterons que le conteneur exécutant PHP8 est bien fonctionnel.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1887" height="576" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-64.png" alt="" class="wp-image-929" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-64.png 1887w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-64-300x92.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-64-1024x313.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-64-768x234.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-64-1536x469.png 1536w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-64-1800x549.png 1800w" sizes="auto, (max-width: 1887px) 100vw, 1887px" /></figure>



<p>Docker référencie bien ses deux conteneurs, un qui est mapper sur le port 80 et un autre mapper sur le port 81.</p>



<p>[root@docker ~]# docker ps</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1649" height="143" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-65.png" alt="" class="wp-image-934" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-65.png 1649w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-65-300x26.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-65-1024x89.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-65-768x67.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-65-1536x133.png 1536w" sizes="auto, (max-width: 1649px) 100vw, 1649px" /></figure>



<h2 class="wp-block-heading" id="h-acceder-au-conteneur-derriere-un-reverse-proxy">Accéder au conteneur derrière un reverse proxy</h2>



<p>Dans un environnement de production, nous configurons un serveur Web pour qu&rsquo;il soit accessible sur son port par défaut, correspondant aux protocoles « http » ou « https » : le port 80 pour http et le port 443 pour https. Pour atteindre cet objectif, nous utilisons un reverse proxy qui reçoit les requêtes entrantes et les redirige vers le conteneur Docker approprié. Pour faciliter l&rsquo;identification de ces conteneurs Docker par les utilisateurs, nous employons des noms de domaine pleinement qualifiés (FQDN) en mettant en place un système de résolution de noms. Nous allons maintenant découvrir comment réaliser cette configuration.</p>



<h3 class="wp-block-heading" id="h-creation-d-u-conteneur-de-l-image-php8">Création d&rsquo;u conteneur de l&rsquo;image PHP8</h3>



<p>Pour démarrer ce nouveau projet, nous capitalisons sur notre travail antérieur. Cependant, avant de poursuivre, nous créons en priorité l&rsquo;image Docker pour le conteneur Docker exécutant PHP 8. Autrement dit, nous élaborons cette nouvelle image de la même manière que nous l&rsquo;avons fait pour l&rsquo;image du conteneur Docker srv_web_php7.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker commit fb9b37059606 srv_web_php8:latest</code></pre>



<p>Nous vérifierons que l’image a bien été créée.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker images</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1380" height="174" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-66.png" alt="" class="wp-image-936" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-66.png 1380w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-66-300x38.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-66-1024x129.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-66-768x97.png 768w" sizes="auto, (max-width: 1380px) 100vw, 1380px" /></figure>



<p>Nous créerons l’architecture suivante&nbsp;:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1034" height="389" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-67.png" alt="" class="wp-image-938" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-67.png 1034w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-67-300x113.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-67-1024x385.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-67-768x289.png 768w" sizes="auto, (max-width: 1034px) 100vw, 1034px" /></figure>



<p>Dans cette configuration de base, nous disposons déjà de l&rsquo;image « srv_web_php7 » pour créer le conteneur « PHP7 », ainsi que de l&rsquo;image « src_web_php8 » pour créer le conteneur « PHP8 ». Notre prochaine étape consiste à créer l&rsquo;image qui exécutera le reverse proxy, lequel sera configuré sur un serveur nginx. Cependant, avant de faire cela, nous commencerons avec un environnement Docker propre, sans aucun conteneur. Supprimons donc ceux que nous avons précédemment créer.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker rm -f $(docker ps -aq)</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1170" height="170" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-68.png" alt="" class="wp-image-941" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-68.png 1170w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-68-300x44.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-68-1024x149.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-68-768x112.png 768w" sizes="auto, (max-width: 1170px) 100vw, 1170px" /></figure>



<p>Nous commencerons par créer notre conteneur PHP7. Nous allons également avoir besoin d’outils «&nbsp;ip&nbsp;» pour configurer la partie réseau et de l’outils ping pour tester la communication entre nos conteneurs. L’outils «&nbsp;ip&nbsp;» est présent dans le paquet «&nbsp;iproute2&nbsp;» et l’outil «&nbsp;ping&nbsp;» sera disponible en installant le paquet «&nbsp;iptutils-ping&nbsp;». Ce conteneur sera ensuite converti en images, par conséquent, pour le moment, nous le mapperons sur aucun port de la machine physique.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run -it --name PHP7 srv_web_php7
root@413ddd8824ab:/# apt update -y &amp;&amp; apt upgrade -y
root@413ddd8824ab:/# apt install iproute2 iputils-ping -y</code></pre>



<p>Nous vérifierons que nous avons bien la possibilité d’utiliser la commande «&nbsp;ip&nbsp;», par exemple, nous utiliserons la commande «&nbsp;ip&nbsp;» pour connaître l’adresse IP de notre passerelle.</p>



<pre class="wp-block-code"><code>root@413ddd8824ab:/# ip route show</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1208" height="107" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-69.png" alt="" class="wp-image-942" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-69.png 1208w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-69-300x27.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-69-1024x91.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-69-768x68.png 768w" sizes="auto, (max-width: 1208px) 100vw, 1208px" /></figure>



<p>Nous testerons également la commande «&nbsp;ping&nbsp;» en tenant de communiquer avec la passerelle configurée sur le conteneur.</p>



<pre class="wp-block-code"><code>root@413ddd8824ab:/# ping 172.17.0.1 -c 4</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="934" height="265" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-70.png" alt="" class="wp-image-945" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-70.png 934w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-70-300x85.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-70-768x218.png 768w" sizes="auto, (max-width: 934px) 100vw, 934px" /></figure>



<h3 class="wp-block-heading" id="h-creation-du-conteneur-php8">Création du conteneur PHP8</h3>



<p>Pour la création du conteneur PHP8, nous procéderons de la même façon après avoir détacher notre terminal de l’invite de commande de notre nouveau conteneur en utilisant la combinaison de touche [ctrl]+[P] &amp; [ctrl]+[Q].</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1193" height="155" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-71.png" alt="Création d'un conteneur docker php8" class="wp-image-947" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-71.png 1193w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-71-300x39.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-71-1024x133.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-71-768x100.png 768w" sizes="auto, (max-width: 1193px) 100vw, 1193px" /></figure>



<p>Ensuite nous mettrons à jours le système et nous installerons les paquets «&nbsp;iproute2&nbsp;» et «&nbsp;iputils-ping&nbsp;».</p>



<pre class="wp-block-code"><code>root@212bbec8e72c:/# apt update -y &amp;&amp; apt upgrade -y
root@212bbec8e72c:/# apt install iproute2 iputils-ping -y</code></pre>



<p>Nous effectuerons les mêmes tests que ceux que nous avons fait sur le conteneur que nous avons précédemment créé.</p>



<pre class="wp-block-code"><code>root@212bbec8e72c:/# ip route show
root@212bbec8e72c:/# ping 172.17.0.1 -c4</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1087" height="382" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-72.png" alt="Communication Conteneur docker vers l'extérieur" class="wp-image-950" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-72.png 1087w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-72-300x105.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-72-1024x360.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-72-768x270.png 768w" sizes="auto, (max-width: 1087px) 100vw, 1087px" /></figure>



<p>Nous constaterons que les conteneurs partagent la même adresse de passerelle, ce qui indique clairement que les deux conteneurs sont sur le même réseau à savoir 172.17.0.0/16. Si l’adresse de ce conteneur est 172.17.0.3, l’adresse du précédent conteneur est 172.17.0.2. Cette information est donnée lors de la commande «&nbsp;ip route show&nbsp;» à la fin de la seconde ligne.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="956" height="80" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-73.png" alt="passerelle des conteneur docker" class="wp-image-952" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-73.png 956w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-73-300x25.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-73-768x64.png 768w" sizes="auto, (max-width: 956px) 100vw, 956px" /></figure>



<p>Ce conteneur étant configurer nous pouvons détacher notre terminal de l’invite de commande du conteneur.</p>



<h3 class="wp-block-heading" id="h-creation-du-conteneur-nginx">Création du conteneur NGINX</h3>



<p>Pour le conteneur docker qui exécutera nginx, nous devons repartir d’une image vierge. Nous repartirons sur l’image Ubuntu vu qu’elle est présente sur notre machine.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1178" height="100" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-74.png" alt="Créer un conteneur docker reverse-proxy" class="wp-image-954" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-74.png 1178w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-74-300x25.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-74-1024x87.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-74-768x65.png 768w" sizes="auto, (max-width: 1178px) 100vw, 1178px" /></figure>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run -ti --name reverse_proxy ubuntu</code></pre>



<p>Dans ce conteneur, nous installerons le paquet «&nbsp;nginx&nbsp;» qui sera configuré en reverse proxy et nous y ajouterons les outils «&nbsp;iproute2&nbsp;» et «&nbsp;iputils-ping&nbsp;» après avoir mis à jour le système d’exploitation.</p>



<pre class="wp-block-code"><code>root@e4cee4f4deb3:/# apt update -y &amp;&amp; apt upgrade -y
root@e4cee4f4deb3:/# apt install nginx iproute2 iputils-ping -y</code></pre>



<h3 class="wp-block-heading" id="h-rappelle-fonctionnement-reverse-proxy">Rappelle fonctionnement Reverse Proxy</h3>



<p>Le reverse proxy fonctionne en se basant sur l&rsquo;URL de la requête. Une seule machine peut héberger plusieurs sites ou applications. Pour différencier ces sites, il est essentiel d&rsquo;utiliser des noms de domaine pleinement qualifiés (FQDN) uniques. Lorsqu&rsquo;une requête HTTP est reçue, le reverse proxy examine l&rsquo;entête HTTP, en particulier l&rsquo;URL et le nom d&rsquo;hôte, pour déterminer où rediriger la requête. Cela nécessite que le reverse proxy puisse résoudre le nom d&rsquo;hôte (FQDN) en une adresse IP pour identifier la destination correcte et transmettre la requête au bon conteneur ou serveur. </p>



<h4 class="wp-block-heading" id="h-configuration-de-la-resolution-de-nom">Configuration de la résolution de nom</h4>



<p>Pour éviter d’avoir à déployer un DNS, nous utiliserons le fichier /etc/hosts présent dans le conteneur «&nbsp;reverse_proxy&nbsp;». Nous rappellerons ici qu’un conteneur n’a pas d’éditeur de texte par défaut, nous utiliserons donc la commande «&nbsp;echo&nbsp;» pour modifier le fichier /etc/hosts. Une ligne étant une information, dans notre contexte, nous avons à renseigner la résolution de nom de deux conteneurs, nous aurons donc un saut de ligne, il nous faudra donc utiliser le commutateur «&nbsp;-e » pour la prise en charge du saut de ligne ( \n ) dans la commande echo</p>



<p>Etant donnée que le conteneur PHP7 a pour adresse IP 172.17.0.2, nous lui attribuerons le nom pleinement qualifier «&nbsp;php7.elkhrissi.lab&nbsp;» et pour le conteneur PHP8 disponible à l’adresse IP 172.17.0.3 avec le FQDN «&nbsp;php8.elkhrissi.lab&nbsp;».</p>



<p>Nous ajouterons donc ses informations dans le fichier hosts de notre conteneur «&nbsp;reverse_proxy&nbsp;».</p>



<pre class="wp-block-code"><code>root@e4cee4f4deb3:/# echo -e "172.17.0.2 php7 php7.elkhrissi.lab \n172.17.0.3 php8 php8.elkhrissi.lab" &gt;&gt; /etc/hosts</code></pre>



<p>Nous vérifierons que la résolution de nom est bien effective à l’aide de la commande «&nbsp;ping&nbsp;».</p>



<pre class="wp-block-code"><code>root@e4cee4f4deb3:/# ping php7.elkhrissi.lab -c1
root@e4cee4f4deb3:/# ping php8.elkhrissi.lab -c1</code></pre>



<p>Ce conteneur doit pouvoir communiquer avec les deux autres conteneurs PHP7 et PHP8, nous exécuterons une commande ping pour vérifier que le conteneur nginx peut joindre le conteneur PHP7 et PHP8.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="990" height="399" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-75.png" alt="Test de la communication entre les conteneur docker" class="wp-image-956" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-75.png 990w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-75-300x121.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-75-768x310.png 768w" sizes="auto, (max-width: 990px) 100vw, 990px" /></figure>



<h4 class="wp-block-heading" id="h-configuration-du-reverse-proxy">Configuration du reverse proxy</h4>



<p>Nous mettrons en place une configuration dans nginx qui permettra de rediriger les requêtes adressées au nom de domaine pleinement qualifié (FQDN) « php7.elkhrissi.lab » vers le conteneur PHP7, et les requêtes adressées à « php8.elkhrissi.lab » vers le conteneur PHP8.</p>



<h5 class="wp-block-heading" id="h-reverse-proxy-pour-php7">Reverse proxy pour PHP7</h5>



<p>Pour la configuration des requêtes à destination du conteneur PHP7, nous créerons un fichier de configuration php7.conf qui devra être stocké /etc/nginx/conf.d/. Le contenu de se fichier sera le suivant&nbsp;:</p>



<pre class="wp-block-code"><code>server {
listen 80;
server_name php7.elkrhissi.lab;
location / {
proxy_pass http://php7.elkhrissi.lab;
}</code></pre>



<ul class="wp-block-list">
<li><strong>server { &#8230; }</strong> : Cela définit un bloc de configuration pour un serveur virtuel. Cela signifie que les instructions à l&rsquo;intérieur de ce bloc s&rsquo;appliqueront aux requêtes entrantes qui correspondent au nom du serveur spécifié (server_name) et au port spécifié (listen).</li>



<li><strong>listen 80;</strong> : Cette ligne indique au serveur nginx d&rsquo;écouter les requêtes entrantes sur le port 80. Le port 80 est le port par défaut pour les requêtes HTTP non chiffrées.</li>



<li><strong>server_name php7.elkrhissi.lab;</strong> : Ici, nous spécifions le nom de domaine pleinement qualifié (FQDN) auquel le reverse proxy répondra. Dans ce cas, il s&rsquo;agit de php7.elkrhissi.lab. Cela signifie que ce serveur nginx traitera les requêtes entrantes pour ce FQDN spécifique.</li>



<li><strong>location / { &#8230; } </strong>: Cela configure une directive location qui spécifie comment le serveur nginx doit gérer les requêtes pour les chemins correspondant à la racine (« / »). Cela signifie que toutes les requêtes entrantes seront gérées par cette directive.</li>



<li><strong>proxy_pass http://php7.elkhrissi.lab;</strong> : C&rsquo;est la partie la plus importante de la configuration. Cette directive indique à nginx de rediriger toutes les requêtes entrantes à cette location vers le conteneur Docker nommé « php7.elkhrissi.lab » en utilisant le protocole HTTP. En d&rsquo;autres termes, lorsque le serveur nginx reçoit une requête pour php7.elkrhissi.lab, il transmettra cette requête au conteneur Docker qui exécute PHP7, permettant ainsi au conteneur de traiter la requête et de renvoyer la réponse.</li>
</ul>



<p>Pour créer ce fichier, nous utiliserons l’outil «&nbsp;echo&nbsp;»</p>



<pre class="wp-block-code"><code>root@e4cee4f4deb3:/#echo 'server {
   listen 80;
   server_name php7.elkhrissi.lab;
   location / {
   proxy_pass http://php7.elkhrissi.lab;
   }
}' | tee <a id="post-840-_Hlk144912481"></a>/etc/nginx/conf.d/php7.conf</code></pre>



<h4 class="wp-block-heading" id="h-reverse-proxy-pour-php8">Reverse proxy pour PHP8</h4>



<p>Pour les requêtes à destination du conteneur exécutant PHP8, nous créerons un fichier de configuration en gardant la même logique que le fichier que nous avons créé précédemment.</p>



<pre class="wp-block-code"><code>root@e4cee4f4deb3:/#echo 'server {
    listen 80;
    server_name php8.elkhrissi.lab;
    location / {
    proxy_pass http://php8.elkhrissi.lab;
   }
}' | tee /etc/nginx/conf.d/php8.conf</code></pre>



<h3 class="wp-block-heading" id="h-conversion-conteneur-docker-en-image-docker">Conversion conteneur docker en image docker</h3>



<p>Nous convertirons ses conteneurs en une image, pour ce faire, nous devrons détacher notre terminal de l’invite de commande de notre conteneur à l’aide des combinaisons de touche [ctrl]+[P] &amp; [ctrl]+[Q]</p>



<pre class="wp-block-code"><code>root@e4cee4f4deb3:/# &#91;ctrl]+&#91;P] &amp; &#91;ctrl]+&#91;Q]
&#91;root@docker ~]# docker commit e4cee4f4deb3 reverse-proxy</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1184" height="126" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-76.png" alt="convertir conteneur Docker vers image Docker" class="wp-image-959" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-76.png 1184w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-76-300x32.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-76-1024x109.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-76-768x82.png 768w" sizes="auto, (max-width: 1184px) 100vw, 1184px" /></figure>



<p>Nous avons notre image prête à l’emploi, nous allons pouvoir l’exécuter et mapper le port 80 du conteneur avec le port 80 de la machine hôte. Le conteneur s’appellera nginx-rp.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run -ti -p 80:80 --name nginx-rp reverse-proxy</code></pre>



<p>En lançant le service nginx dans notre conteneur, nous sommes confrontés à une erreur. Cette erreur survient en raison de l&rsquo;absence de persistance des données stockées dans notre conteneur précédent, qui a servi de base pour créer cette image.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1193" height="101" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-77.png" alt="Démarrer service nginx dans le conteneur docker" class="wp-image-961" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-77.png 1193w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-77-300x25.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-77-1024x87.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-77-768x65.png 768w" sizes="auto, (max-width: 1193px) 100vw, 1193px" /></figure>



<p>Cette caractéristique essentielle des conteneurs, à savoir leur nature éphémère, signifie qu&rsquo;ils ne conservent pas les données au-delà de leur cycle de vie, du moins pas celles qui ne sont pas présentes dans leur système de fichiers principal. Par défaut, lors de l&rsquo;installation d&rsquo;une nouvelle application, les fichiers de configuration sont généralement stockés dans les répertoires du service, c&rsquo;est-à-dire dans le système de fichiers principal du conteneur. Ainsi, nous retrouverons bien nos fichiers de configuration.</p>



<pre class="wp-block-code"><code>root@1c6760241900:/# ls /etc/nginx/conf.d/</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1101" height="76" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-78.png" alt="VirtualHost di conteneur docker nginx" class="wp-image-963" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-78.png 1101w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-78-300x21.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-78-1024x71.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-78-768x53.png 768w" sizes="auto, (max-width: 1101px) 100vw, 1101px" /></figure>



<p>En revanche, les modifications que nous avons apportées au fichier /etc/hosts n’ont pas été conservé.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1184" height="249" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-79.png" alt="résollution des conteneurs docker" class="wp-image-965" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-79.png 1184w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-79-300x63.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-79-1024x215.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-79-768x162.png 768w" sizes="auto, (max-width: 1184px) 100vw, 1184px" /></figure>



<p>Par conséquent, lors du démarrage du service nginx, nous avons configuré des fichiers de configuration dans lesquels nous avons spécifié les noms de domaine vers lesquels il doit rediriger les requêtes. Cependant, le service nginx ne peut pas les contacter car le système ne peut pas résoudre ces noms de domaine en adresses IP. En conséquence, le service nginx génère une erreur. Nous ajouterons nos deux entrées dans le fichier /etc/hosts puis nous serons en mesure de démarrer le service nginx.</p>



<pre class="wp-block-code"><code>root@1c6760241900:/# echo -e "172.17.0.2 php7 php7.elkhrissi.lab \n172.17.0.3 php8 php8.elkhrissi.lab" &gt;&gt; /etc/hosts
root@1c6760241900:/# service nginx start</code></pre>



<h3 class="wp-block-heading" id="h-verification-des-acces-aux-serveurs-web">Verification des accès aux serveurs Web </h3>



<p>À partir d&rsquo;une machine cliente Windows connectée au même réseau que notre machine hôte, nous vérifierons la fonctionnalité de notre configuration. Avant de procéder aux vérifications, nous ajusterons le fichier hosts de la machine cliente afin qu&rsquo;elle puisse résoudre les noms de domaine de nos deux conteneurs. Nous ouvrions «&nbsp;notepad&nbsp;» en tant qu’administrateur, nous ouvrions le fichier hosts disponible au chemin C:\Windows\System32\drivers\etc. En sélectionnant «&nbsp;Tout les fichiers&nbsp;» en bas à doite nous devrions voir le fichier hosts. Nous le sélectionnerons et cliquerons sur le bouton «&nbsp;Ouvrir&nbsp;»</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1159" height="462" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-81.png" alt="Ouvrir fichier Host résolution de nom des conteneurs DOcker" class="wp-image-968" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-81.png 1159w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-81-300x120.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-81-1024x408.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-81-768x306.png 768w" sizes="auto, (max-width: 1159px) 100vw, 1159px" /></figure>



<p>L’adresse IP que nous renseignerons sera l’adresse IP de notre machine hôte qui, dans le cadre de cette documentation est 10.0.0.3 qui cela la résolution de nom de «&nbsp;php7.elkhrissi.lab&nbsp;» et «&nbsp;php8.elkhrissi.lab&nbsp;»</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1265" height="636" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-82.png" alt="Fichier Host résolution de nom des conteneurs DOcker" class="wp-image-970" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-82.png 1265w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-82-300x151.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-82-1024x515.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-82-768x386.png 768w" sizes="auto, (max-width: 1265px) 100vw, 1265px" /></figure>



<p>Une fois que la modification a été enregistré, nous allons nous rendre aux&nbsp;URLs après nous êtes assurer que les services apache sur nos conteneurs est bien démarré :</p>



<p>Après avoir enregistré la modification, nous allons accéder aux URLs suivant une fois que nous nous sommes assurés que les services Apache dans nos conteneurs Docker sont bien démarrés :</p>



<ul class="wp-block-list">
<li>http://php7.elkhrissi.lab/phpinfo.php</li>



<li>http://php8.elkhrissi.lab/phpinfo.php</li>
</ul>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1456" height="390" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-83.png" alt="Version PHP dans conteneur DOcker" class="wp-image-973" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-83.png 1456w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-83-300x80.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-83-1024x274.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-83-768x206.png 768w" sizes="auto, (max-width: 1456px) 100vw, 1456px" /></figure>



<p>Nous vérifierons que les deux conteneurs ne communiquent pas ensemble. Pour ce faire, nous allons utiliser l’outils ping qui, par défaut, n’est pas présent. Nous l’installerons dans le conteneur app-php7, app-php8</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker exec -it app-php7 apt-get install -y iputils-ping
&#91;root@docker ~]# docker exec -it app-php8 apt-get install -y iputils-ping</code></pre>



<p>Pour rappel, l’adresse IP du conteneur Docker de « app-php7 » est 192.168.1.2 et l’adresse IP de « app-php8 » est 192.168.2.2</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1302" height="101" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-108.png" alt="" class="wp-image-1020" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-108.png 1302w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-108-300x23.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-108-1024x79.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-108-768x60.png 768w" sizes="auto, (max-width: 1302px) 100vw, 1302px" /></figure>



<p>Nous testerons que la communication entre app-php7 et app-php8 ne peux pas se faire.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker exec -it app-php7 ping -c 4 192.168.2.2</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="961" height="166" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-109.png" alt="" class="wp-image-1022" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-109.png 961w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-109-300x52.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-109-768x133.png 768w" sizes="auto, (max-width: 961px) 100vw, 961px" /></figure>



<p>En toute logique, le conteneur app-php8 ne sera pas en mesure de communiquer avec app-php7.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker exec -it app-php7 ping -c 4 192.168.2.2</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1046" height="163" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-111.png" alt="" class="wp-image-1026" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-111.png 1046w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-111-300x47.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-111-1024x160.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-111-768x120.png 768w" sizes="auto, (max-width: 1046px) 100vw, 1046px" /></figure>



<p>Dans ce chapitre, nous avons vu le cloisonnement sans passer par des solutions UTM. Si nous voulions durcir le cloisonnement la solution docker ne serait pas adaptée, d’autres solutions existent.</p>
<p>L’article <a href="https://www.pandawan.fr/conteneur-par-la-pratique/">05 conteneur Docker : l&rsquo;isolation</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>04 Conteneur Docker</title>
		<link>https://www.pandawan.fr/les-conteneurs-avec-docker/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 07:44:29 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1153</guid>

					<description><![CDATA[<p>Lorsque vous lancez une image Docker, elle génère un conteneur Docker. Ce conteneur sera un réplica de cette image au niveau des fichiers. Cependant, il intégrera son propre espace de [...]</p>
<p>L’article <a href="https://www.pandawan.fr/les-conteneurs-avec-docker/">04 Conteneur Docker</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Lorsque vous lancez une image Docker, elle génère un conteneur Docker. Ce conteneur sera un réplica de cette image au niveau des fichiers. Cependant, il intégrera son propre espace de stockage, ses processus distincts et un environnement d&rsquo;exécution isolé. Par exemple, prenons l’image que nous avons précédemment récupérée du portail «<a href="https://hub.docker.com/"> Docker Hub</a> ». Pour l’exécuter, nous utiliserons la commande « docker run », soit pour l’image Ubuntu..</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run ubuntu</code></pre>



<p>Cette commande recherche l&rsquo;image Ubuntu sur la machine locale. Si l&rsquo;image n&rsquo;est pas présente, elle la télécharge depuis Docker Hub. Ensuite, elle crée un conteneur basé sur cette image. Le conteneur exécute généralement la commande par défaut, souvent /bin/bash, pour permettre l&rsquo;interaction. Pour lister les conteneurs en cours d&rsquo;exécution, exécutez la commande « docker ps ».</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker ps</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1134" height="107" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-24.png" alt="Liste conteneur docker active" class="wp-image-866" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-24.png 1134w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-24-300x28.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-24-1024x97.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-24-768x72.png 768w" sizes="auto, (max-width: 1134px) 100vw, 1134px" /></figure>



<p>Comme nous pouvons le constater sur la capture d’écran ci-dessus, il n’y a aucun conteneur. Cela s’explique par le fait qu’après avoir exécuté la commande « /bin/bash », il n’exécute plus aucune autre commande. Un conteneur docjer qui n&rsquo;éxecutre rien s&rsquo;éteinds automatiquement d&rsquo;où le statut « Exited ». Ce conteneur, même s&rsquo;il est éteint, est tout de même présent dans la machine. Pour voir tous les conteneurs actifs ou inactifs (statut exited), nous exécuterons la commande « docker ps -a ».</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker ps -a</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1667" height="116" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-25.png" alt="" class="wp-image-867" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-25.png 1667w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-25-300x21.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-25-1024x71.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-25-768x53.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-25-1536x107.png 1536w" sizes="auto, (max-width: 1667px) 100vw, 1667px" /></figure>



<p>Afin de pouvoir interagir avec une instance dès sa création, il nous faudra le précisier au lancement du conteneur Docker.  Pour cela, nous spécifierons lnous ajouterons le mode interactif (-i)et d&rsquo;un terminal (-t). Cela nous permettra d&rsquo;engager une interaction avec le conteneur via notre propre terminal.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker run -it ubuntu</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1576" height="58" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-27.png" alt="" class="wp-image-869" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-27.png 1576w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-27-300x11.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-27-1024x38.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-27-768x28.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-27-1536x57.png 1536w" sizes="auto, (max-width: 1576px) 100vw, 1576px" /></figure>



<p>Dans notre invite de commande, sur prompt, nous sommes passé du nom de l’hôte « docker » à l’identifiant de l’instance « 7c85ed7d6261 ».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1398" height="88" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-28.png" alt="" class="wp-image-870" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-28.png 1398w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-28-300x19.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-28-1024x64.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-28-768x48.png 768w" sizes="auto, (max-width: 1398px) 100vw, 1398px" /></figure>



<p>Dans ce conteneur, le seul processus en cours d&rsquo;exécution est  le shell Bash.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1325" height="108" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-29.png" alt="" class="wp-image-871" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-29.png 1325w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-29-300x24.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-29-1024x83.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-29-768x63.png 768w" sizes="auto, (max-width: 1325px) 100vw, 1325px" /></figure>



<p>Pour revenir à l&rsquo;invite de commande de l&rsquo;hôte sans éteindre le conteneur, nous utiliserons la combinaison de touches<strong><em> [Ctrl]+[P]</em></strong> <strong><em>[Ctrl]+[Q]</em></strong>.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1240" height="46" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-31.png" alt="" class="wp-image-873" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-31.png 1240w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-31-300x11.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-31-1024x38.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-31-768x28.png 768w" sizes="auto, (max-width: 1240px) 100vw, 1240px" /></figure>



<p>Nous exécuterons la commande permettant de répertorier tous les conteneurs, et nous constaterons que notre conteneur affiche un statut « UP ».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1384" height="113" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-32.png" alt="" class="wp-image-874" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-32.png 1384w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-32-300x24.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-32-1024x84.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-32-768x63.png 768w" sizes="auto, (max-width: 1384px) 100vw, 1384px" /></figure>



<p>L&rsquo;utilisation de la combinaison de touches [Ctrl]+[P] et [Ctrl]+[Q]  nous détache de l&rsquo;invite de commande du terminal de notre conteneur. Pour revenir au terminal de notre conteneur, nous attacherons le terminale de l&rsquo;hôte à celui du conteneur. Nous utiliserons son identifiant unique, soit « 7c85ed7d6261&Prime; dans notre exemple, ou même en tronquant l&rsquo;identifiant en indiquant « 7c ».</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker attach 7c</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1069" height="116" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-33.png" alt="" class="wp-image-875" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-33.png 1069w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-33-300x33.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-33-1024x111.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-33-768x83.png 768w" sizes="auto, (max-width: 1069px) 100vw, 1069px" /></figure>



<p>Les modifications apportées à un conteneur n&rsquo;affectent ni l&rsquo;image d&rsquo;origine, ni la machine où le moteur Docker est exécuté. Pour illustrer ce concept, prenons  notre conteneur, nous allons créer un fichier nommé « panda » dans le répertoire /home/.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="903" height="141" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-34.png" alt="" class="wp-image-876" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-34.png 903w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-34-300x47.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-34-768x120.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-34-900x141.png 900w" sizes="auto, (max-width: 903px) 100vw, 903px" /></figure>



<p>Après avoir créer et vérifier la présence du fichier « panda », nous détacherons l’invite de commande. Pour rappel le détachement de l&rsquo;invite de commande se fait à l’aide de la combinaison de touche clavier [ctrl]+[P] et [ctrl]+[Q]. Nous vérifierons ensuite que le répertoire /home/ de notre machine n’héberge pas ce fichier.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="990" height="84" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-35.png" alt="" class="wp-image-877" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-35.png 990w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-35-300x25.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-35-768x65.png 768w" sizes="auto, (max-width: 990px) 100vw, 990px" /></figure>



<p>Après avoir créé et vérifié la présence du fichier « panda », nous détacherons l&rsquo;invite de commande de notre conteneur à l&rsquo;aide de la combinaison de touches [Ctrl]+[P] et [Ctrl]+[Q], puis nous vérifierons que le répertoire /home/ de notre machine ne contient pas ce fichier. Pour récapituler ce qui a été expliqué précédemment, Docker crée une couche de données supplémentaire pour stocker ces nouvelles données. Cela s&rsquo;appelle la couche de données différentielle. La couche de données différentielle est fusionnée avec les autres données de notre conteneur pour former un seul objet, qui est le conteneur lui-même. Les informations de cette couche de données différentielle sont stockées dans les bibliothèques de Docker. Il nous sera possible de lister les données différentielles et les données fusionner, c’est-à-dire notre fichier panda en le recherchant dans notre système.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1502" height="78" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-36.png" alt="" class="wp-image-878" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-36.png 1502w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-36-300x16.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-36-1024x53.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-36-768x40.png 768w" sizes="auto, (max-width: 1502px) 100vw, 1502px" /></figure>



<p>Nous retournerons dans notre conteneur, puis nous ajouterons des données dans le fichier «&nbsp;panda&nbsp;».</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker attach 7c
root@7c85ed7d6261:/home# echo "Bonjour" &gt; panda
root@7c85ed7d6261:/home# cat panda</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1281" height="136" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-37.png" alt="" class="wp-image-879" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-37.png 1281w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-37-300x32.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-37-1024x109.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-37-768x82.png 768w" sizes="auto, (max-width: 1281px) 100vw, 1281px" /></figure>



<p>Retournons sur l’invite de commande de notre machine et éditons le fichier de différencier.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# vi /var/lib/docker/overlay2/14401c86fa9a626c1d8b39a7c6ba94968a3d4c6e8a54fe745db8f97efb307e8e/diff/home/panda</code></pre>



<p>Nous ajouterons des données dans ce fichier.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1088" height="40" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-38.png" alt="" class="wp-image-880" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-38.png 1088w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-38-300x11.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-38-1024x38.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-38-768x28.png 768w" sizes="auto, (max-width: 1088px) 100vw, 1088px" /></figure>



<p>Après avoir enregistrer les modifications nous retournerons dans notre conteneur, puis nous éditerons le fichier que nous avons créée.</p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# docker attach 7c
root@7c85ed7d6261:/home# cat panda</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1284" height="82" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-39.png" alt="" class="wp-image-882" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-39.png 1284w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-39-300x19.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-39-1024x65.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-39-768x49.png 768w" sizes="auto, (max-width: 1284px) 100vw, 1284px" /></figure>



<p>Les données n’auront pas été altérer par la modification que nous avons apporté à notre fichier vu qu’elles n’ont pas été fusionner avec les autres éléments de notre conteneur, c’est dire les données stockées dans le fichier&nbsp;: <em>«&nbsp;var/lib/docker/overlay2/14401c86f../merged/home/panda&nbsp;»</em>.</p>



<p>Sortons une nouvelle fois de notre conteneur à l’aide des combinaisons de touche [ctrl]+[P] et [ctrl]+[Q], nous ajouterons des données dans le fichier&nbsp;:</p>



<p><em>«&nbsp;var/lib/docker/overlay2/14401c86f&#8230;/merged/home/panda»</em>.</p>



<p class="has-text-align-center">👍🏻 <strong>Les &#8230; sont à remplacer par la suite alphanumérique complet.</strong></p>



<pre class="wp-block-code"><code>&#91;root@docker ~]# vi /var/lib/docker/overlay2/14401c.../merged/home/panda</code></pre>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1070" height="52" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-40.png" alt="" class="wp-image-884" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-40.png 1070w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-40-300x15.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-40-1024x50.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-40-768x37.png 768w" sizes="auto, (max-width: 1070px) 100vw, 1070px" /></figure>



<p>Après avoir enregistrer cette modification, nous attacherons une nouvelle fois le conteneur à notre invite de commande puis nous afficherons le contenu du fichier «&nbsp;panda&nbsp;».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="836" height="112" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-41.png" alt="" class="wp-image-886" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-41.png 836w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-41-300x40.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-41-768x103.png 768w" sizes="auto, (max-width: 836px) 100vw, 836px" /></figure>



<p>Docker se concentre principalement sur la séparation des programmes, appelés processus, pour éviter qu&rsquo;ils ne se perturbent mutuellement et sur la gestion équitable des ressources telles que la puissance de calcul (CPU) et la mémoire. Cependant, en ce qui concerne les données, Docker n&rsquo;impose pas une séparation aussi stricte par défaut. Cela signifie que, si nous ne prenons pas de précautions, les programmes dans les conteneurs pourraient partager ou même accéder à des données que nous souhaitons garder privées. Il est donc essentiel d&rsquo;être attentif à la manière dont nous gérons et partageons les données dans Docker pour garantir la sécurité et la confidentialité des informations sensibles.</p>



<p><a id="post-840-_Toc151354839"></a></p>
<p>L’article <a href="https://www.pandawan.fr/les-conteneurs-avec-docker/">04 Conteneur Docker</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
