<?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>Archives des Conteneurisation - Pandawan</title>
	<atom:link href="https://www.pandawan.fr/category/conteneurisation/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.pandawan.fr/category/conteneurisation/</link>
	<description>La connaissance prends de la valeur quand on la partage</description>
	<lastBuildDate>Sun, 01 Dec 2024 06:49:11 +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>Archives des Conteneurisation - Pandawan</title>
	<link>https://www.pandawan.fr/category/conteneurisation/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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="(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 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="(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-2 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 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="(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>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>
		<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>02 Installation Docker pour AlmaLinux 9</title>
		<link>https://www.pandawan.fr/installation-docker/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 07:44:28 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1143</guid>

					<description><![CDATA[<p>Ce tutoriel pas-à-pas vous aidera à installer Docker-CE (Community Edition) la version gratuite et performante de Docker. Il vient compléter l&#8217;article précédent en proposant une mise en pratique. Que vous [...]</p>
<p>L’article <a href="https://www.pandawan.fr/installation-docker/">02 Installation Docker pour AlmaLinux 9</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Ce tutoriel pas-à-pas vous aidera à installer Docker-CE (Community Edition) la version gratuite et performante de Docker. Il vient compléter <a href="https://www.pandawan.fr/conteneurisation-avec-docker/">l&rsquo;article précédent en proposant une mise en pratique</a>. Que vous soyez développeur ou administrateur système, ce guide vous permettra d&rsquo;installer et de configurer rapidement un environnement Docker fonctionnel.</p>



<h3 class="wp-block-heading" id="h-pourquoi-choisir-almalinux-pour-l-installation-docker">Pourquoi choisir AlmaLinux pour l&rsquo;installation Docker ?</h3>



<p>Docker, la solution leader en conteneurisation d’applications, est parfaitement compatible avec<a href="https://www.almalinux.org"> AlmaLinux 9</a>. Cette distribution, issue de CentOS, offre une stabilité et une compatibilité avec les dépôts officiels de Docker, facilitant ainsi son installation.</p>



<h3 class="wp-block-heading" id="h-preparation-pour-l-installation-docker-sur-almalinux-9">Préparation pour l&rsquo;installation Docker sur AlmaLinux 9</h3>



<p>Aprés s&rsquo;être assure d’avoir un système AlmaLinux 9 configuré en mode minimal. Vous devrez ensuite ajouter le dépôt officiel de Docker pour CentOS, compatible avec AlmaLinux :</p>



<pre class="wp-block-preformatted">[root@docker ~]# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo</pre>



<p>Ensuite, effectuez une mise à jour complète pour intégrer les modifications liées à ce dépôt et préparer votre système :</p>



<pre class="wp-block-preformatted">[root@docker ~]# dnf upgrade -y</pre>



<p>Pour vérifier que le dépôt a bien été ajouté, exécutez cette commande :</p>



<pre class="wp-block-preformatted">[root@docker ~]# dnf repolist -v</pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="283" src="https://www.pandawan.fr/wp-content/uploads/2024/11/image.png" alt="" class="wp-image-1145" srcset="https://www.pandawan.fr/wp-content/uploads/2024/11/image.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/11/image-300x83.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/11/image-768x212.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading" id="h-proceder-a-l-installation-docker-ce-sur-almalinux-9">Procéder à l&rsquo;installation Docker-CE sur AlmaLinux 9</h3>



<p>Une fois votre système préparé, il est temps d’installer Docker et ses outils essentiels. La commande suivante permet d’installer Docker-CE, l’interface en ligne de commande Docker (<code>docker-ce-cli</code>) et le runtime (<code>containerd.io</code>) :</p>



<pre class="wp-block-preformatted">[root@docker ~]# dnf install docker-ce docker-ce-cli containerd.io -y</pre>



<p>Après l’installation, vérifiez que Docker a bien été installé en affichant sa version :</p>



<pre class="wp-block-preformatted">[root@docker ~]# docker --version</pre>



<h3 class="wp-block-heading" id="h-configurer-docker-pour-un-demarrage-automatique">Configurer Docker pour un démarrage automatique</h3>



<p>Pour garantir que Docker démarre automatiquement avec votre système AlmaLinux, exécutez cette commande qui active et démarre immédiatement le service :</p>



<pre class="wp-block-preformatted">[root@docker ~]# systemctl enable --now docker</pre>



<p>Vous pouvez confirmer que Docker est bien configuré pour démarrer au démarrage du système avec :</p>



<pre class="wp-block-preformatted">[root@docker ~]# systemctl is-enabled docker</pre>



<p>Enfin, vérifiez que Docker fonctionne correctement et que son service est actif avec cette commande :</p>



<pre class="wp-block-preformatted">[root@docker ~]# systemctl status docker</pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="261" src="https://www.pandawan.fr/wp-content/uploads/2024/11/image-1.png" alt="" class="wp-image-1146" srcset="https://www.pandawan.fr/wp-content/uploads/2024/11/image-1.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/11/image-1-300x76.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/11/image-1-768x196.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>
<p>L’article <a href="https://www.pandawan.fr/installation-docker/">02 Installation Docker pour AlmaLinux 9</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>03 Les images Docker</title>
		<link>https://www.pandawan.fr/image-docker/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 07:44:28 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1151</guid>

					<description><![CDATA[<p>Avant de parler de conteneurisation, il est essentiel de comprendre ce qu&#8217;est une image Docker. En effet, un conteneur repose sur des images. Ces images jouent le rôle de modèles [...]</p>
<p>L’article <a href="https://www.pandawan.fr/image-docker/">03 Les images Docker</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Avant de parler de conteneurisation, il est essentiel de comprendre ce qu&rsquo;est une image Docker. En effet, un conteneur repose sur des images. Ces images jouent le rôle de modèles (ou de gabarits) qui serviront de base pour la création des conteneurs.</p>



<p>Tout d&rsquo;abord, les images Docker assemblent une série de couches, renfermant tous les éléments nécessaires au bon fonctionnement de l&rsquo;application. De plus, ces couches sont en lecture seule, et chaque modification effectuée donne naissance à une nouvelle couche distincte. Pour réaliser cela, les images Docker font usage d&rsquo;un système de fichiers en couches superposées. Ce système de fichier est comparable à un modèle en oignon, également connu sous le nom d&rsquo;UnionFS.</p>



<figure class="wp-block-image aligncenter"><img loading="lazy" decoding="async" width="1402" height="523" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-14.png" alt="diagramme UnionFS Docker" class="wp-image-856" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-14.png 1402w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-14-300x112.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-14-1024x382.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-14-768x286.png 768w" sizes="auto, (max-width: 1402px) 100vw, 1402px" /><figcaption class="wp-element-caption">Les couches des images Docke</figcaption></figure>



<h3 class="wp-block-heading">Télécharger une image docker</h3>



<p>Des images prêtes à l’emploi sont disponibles sur des dépôts, il existe des dépôts privés et public. Commençons par nous rendre sur le dépôt officiel de Docker à l’adresse <a href="https://hub.docker.com">https://hub.docker.com</a>.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1330" height="551" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-15.png" alt="Docker Hub" class="wp-image-857" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-15.png 1330w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-15-300x124.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-15-1024x424.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-15-768x318.png 768w" sizes="auto, (max-width: 1330px) 100vw, 1330px" /></figure>



<p>La récupération d’une image se fera à l’aide de la commande « docker pull » suivi de nom de l’image. Par exemple si nous souhaitons récupérer l’image de Ubuntu, sur la plateforme « Dockerhub ». Il nous faudra renseigner  dans la barre de recherche « Ubuntu ».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1314" height="550" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-16.png" alt=" Docker Hub DOcker" class="wp-image-858" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-16.png 1314w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-16-300x126.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-16-1024x429.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-16-768x321.png 768w" sizes="auto, (max-width: 1314px) 100vw, 1314px" /></figure>



<p>Le résultat de la recherche, nous avons plusieurs propositions. Nous recommandons d’utiliser les images officielles. En cliquant sur l&rsquo;image, nous aurons accès à plus d’information. Parmi ses informations nous  pouvons voir qu&rsquo;elle est la commande à exécuter pour récupérer l&rsquo;image.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1286" height="330" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-17.png" alt="Decription image ubuntu DOcker Hub" class="wp-image-859" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-17.png 1286w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-17-300x77.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-17-1024x263.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-17-768x197.png 768w" sizes="auto, (max-width: 1286px) 100vw, 1286px" /></figure>



<h4 class="wp-block-heading">Récupération d&rsquo;une image Docker depuis le Hub officiel</h4>



<p>Sur notre machine, nous exécuterons la commande donnée sur la plateforme «&nbsp;DockerHub&nbsp;».</p>



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



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1122" height="176" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-18.png" alt="CLI Pull image docker" class="wp-image-860" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-18.png 1122w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-18-300x47.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-18-1024x161.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-18-768x120.png 768w" sizes="auto, (max-width: 1122px) 100vw, 1122px" /></figure>



<p>Vérifions que l&rsquo;image a bien été téléchargée en exécutant la commande « docker images ».</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1081" height="105" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-19.png" alt="CLI Reponse pull image docker" class="wp-image-861" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-19.png 1081w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-19-300x29.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-19-1024x99.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-19-768x75.png 768w" sizes="auto, (max-width: 1081px) 100vw, 1081px" /></figure>



<p>La réponse à la commande « docker pull ubuntu » indique que nous avons obtenu la version marquée (tag) « latest ». Cette information est accessible lorsque nous listons les images présentes sur le système. En effet, nous avons la possibilité de sélectionner une version spécifique si  plusieurs version d&rsquo;une même images existe.</p>



<p>Lorsque une Image Docker est téléchargée sans spécifier la version, l&rsquo;image portant l&rsquo;étiquette « latest » est utilisée par défaut. Pour lister les étiquettes d&rsquo;une image, il  faudra consulter l&rsquo;onglet « tag » de la description de l&rsquo;image sur la plateforme DockerHub.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1270" height="835" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-20.png" alt="Tag Image Docker" class="wp-image-862" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-20.png 1270w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-20-300x197.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-20-1024x673.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-20-768x505.png 768w" sizes="auto, (max-width: 1270px) 100vw, 1270px" /></figure>



<p>Cette image a pour identifiant une valeur exprimée en sha256,  la valeur est tronquée par défaut.  Le « vrai » identifiant, cette à dire la valeur qui n’est pas tronqué pourras être obtenu en ajoutant le commutateur « no-trunc ».</p>



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



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1663" height="89" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-21.png" alt="Identifiant Image non tronqués" class="wp-image-863" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-21.png 1663w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-21-300x16.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-21-1024x55.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-21-768x41.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-21-1536x82.png 1536w" sizes="auto, (max-width: 1663px) 100vw, 1663px" /></figure>



<h4 class="wp-block-heading">Recherche d&rsquo;image Docker depuis le CLI</h4>



<p>Pour rechercher une image, nous pouvons le faire sans passer par un navigateur WEB. En effet, la commande « docker », nous permettra de rechercher un conteneur en se basant sur un mot clé. Par exemple, si nous souhaitons récupérer une image d’un serveur web.  Nous exécuterons la commande « docker search » suivi d&rsquo;un mot clé. Ainsi si nous voulons récupérer une image Docker qui exécutera un serveur web, le mot clé sera « http ».</p>



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



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1585" height="675" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-22.png" alt="CLi Docker search" class="wp-image-864" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-22.png 1585w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-22-300x128.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-22-1024x436.png 1024w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-22-768x327.png 768w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-22-1536x654.png 1536w" sizes="auto, (max-width: 1585px) 100vw, 1585px" /></figure>



<p>La réponse de la commande « docker search », nous renvoie les mêmes informations que le portail Docker Hub. Dans la mesure du possible, nous prioriserons les images officielles ou celle avec un nombre d’étoile important.</p>



<h4 class="wp-block-heading">Fonctionnement d’une image</h4>



<p>Il faut voir une image Docker comme à LiveCD. Lorsque vous lancez une image, elle reste en lecture seule, et toutes les modifications que vous apportez sont enregistrées séparément. L&rsquo;image d&rsquo;origine, combinée à toutes les couches de modifications, forme le conteneur. C&rsquo;est cette combinaison qui permet aux conteneurs d&rsquo;être légers, reproductibles et efficaces</p>



<figure class="wp-block-image aligncenter is-resized"><img loading="lazy" decoding="async" width="484" height="308" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-23.png" alt="COntainer illustration " class="wp-image-865" style="width:700px;height:auto" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-23.png 484w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-23-300x191.png 300w" sizes="auto, (max-width: 484px) 100vw, 484px" /></figure>



<p>Lorsque nous exécutons une image, nous créons un conteneur à partir de cette image. Ce conteneur constitue un environnement isolé et autonome où l&rsquo;application ou le service spécifié par l&rsquo;image peut s&rsquo;exécuter. L&rsquo;image de base demeure inchangée, quelle que soit l&rsquo;action que nous effectuons dans le conteneur. Chaque modification que nous apportons au conteneur est enregistrée dans une couche de modification distincte (overlay). L&rsquo;image d&rsquo;origine de demeurer inchangée. Cette approche favorise la reproductibilité et facilite la gestion des applications. Nous pourrions toujours lancer un nouveau conteneur à partir de la même image d&rsquo;origine, sans affecter des modifications précédentes. Les conteneurs offrent une isolation et une portabilité tout en maintenant la cohérence de l&rsquo;image initiale, ce qui garantit un environnement reproductible et fiable.</p>



<p></p>
<p>L’article <a href="https://www.pandawan.fr/image-docker/">03 Les images Docker</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>01 &#8211; Comprendre la Conteneurisation avec Docker pour les SysOps</title>
		<link>https://www.pandawan.fr/conteneurisation-avec-docker/</link>
		
		<dc:creator><![CDATA[Belkacem EL KHRISSI]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 07:00:31 +0000</pubDate>
				<category><![CDATA[Conteneurisation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Conteneurisation]]></category>
		<guid isPermaLink="false">https://www.pandawan.fr/?p=1200</guid>

					<description><![CDATA[<p>La conteneurisation En tant qu&#8217;administrateur nous faisons face à l&#8217;émergence de nouveau outil favorisant le maintien en condition opérationnel (MCO) des systèmes d&#8217;information. Parmi ces outils, la conteneurisation, et plus [...]</p>
<p>L’article <a href="https://www.pandawan.fr/conteneurisation-avec-docker/">01 &#8211; Comprendre la Conteneurisation avec Docker pour les SysOps</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="h-la-conteneurisation">La conteneurisation</h2>



<p>En tant qu&rsquo;administrateur nous faisons face à l&rsquo;émergence de nouveau outil favorisant le maintien en condition opérationnel (MCO) des systèmes d&rsquo;information. Parmi ces outils, la conteneurisation, et plus spécifiquement Docker, peut s&rsquo;avérée être un complément judicieux à la virtualisation, offrant une flexibilité accrue aux systèmes d&rsquo;information. Avant de commencer les différentes mises en pratiques, examinons ce qu&rsquo;est la conteneurisation.</p>



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



<p>Pour vraiment saisir les avantages de la conteneurisation, il est essentiel de prendre en compte l&rsquo;évolution au fil des années des architectures logicielles. </p>



<h4 class="wp-block-heading" id="h-application-monolithique">Application monolithique</h4>



<p>Cela nous amène à revisiter le concept des applications monolithiques. Dans ce modèle d&rsquo;architecture, tous les éléments logiciels sont conçus au sein d&rsquo;une même plateforme unifiée.</p>



<figure class="wp-block-image aligncenter is-resized"><img loading="lazy" decoding="async" width="821" height="341" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-3.png" alt="" class="wp-image-847" style="width:438px;height:auto" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-3.png 821w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-3-300x125.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-3-768x319.png 768w" sizes="auto, (max-width: 821px) 100vw, 821px" /><figcaption class="wp-element-caption">Architecture Monolithique</figcaption></figure>



<p> Cependant, ce schéma ne favorise pas la modularité, c&rsquo;est-à-dire la capacité d&rsquo;apporter de la souplesse au sein du système d&rsquo;information. Par conséquent, ces applications fonctionnent avec leurs propres bases de données, qui ne sont pas partagées avec d&rsquo;autres applications. De plus, leur méthode d&rsquo;authentification interne n&rsquo;est pas compatible avec les technologies de type SSO (Single Sign-On).</p>



<p>Au fil du temps, les entreprises ont progressivement adopté un nombre croissant d&rsquo;applications pour automatiser leurs processus métiers. Chaque service au sein de l&rsquo;entreprise disposait de sa propre application pour gérer ses processus spécifiques. Toutefois, le besoin d&rsquo;harmoniser certaines données s&rsquo;est rapidement fait sentir. Par exemple, les informations relatives à l&rsquo;identité d&rsquo;un employé étaient pertinentes à la fois pour le service de paie et le service des ressources humaines en charge de la gestion de carrière. Dans le cadre d&rsquo;une architecture monolithique, chaque service devait créer sa propre fiche employée dans son propre logiciel, entraînant non seulement des risques d&rsquo;erreurs, mais également des pertes de temps considérables.</p>



<h4 class="wp-block-heading" id="h-les-architectures-soa">Les architectures SOA</h4>



<p>Les architectures monolithiques ont évolué vers les architectures SOA, centrées sur les services. L&rsquo;architecture SOA considère les applications et bases de données comme des services dans un système d&rsquo;information. Prenons l&rsquo;exemple des services de paie et de ressources humaines. Les données saisies dans le logiciel RH deviennent accessibles à l&rsquo;application de gestion des paies. Cette architecture divise le code en plusieurs blocs indépendants appelés services. Une application devient alors un réseau de services interconnectés.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="619" height="353" src="https://www.pandawan.fr/wp-content/uploads/2024/09/image-4.png" alt="" class="wp-image-1129" style="width:573px;height:auto" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/image-4.png 619w, https://www.pandawan.fr/wp-content/uploads/2024/09/image-4-300x171.png 300w" sizes="auto, (max-width: 619px) 100vw, 619px" /><figcaption class="wp-element-caption">Architecture SOA</figcaption></figure>



<p>Ce type d&rsquo;architecture nous permet de gérer les aspects applicatifs. Cependant, l&rsquo;inconvénient majeur de ce modèle réside dans la nature des services. Si une application est une composition de services, ces services forment un bloc solide et immuable.</p>



<h4 class="wp-block-heading" id="h-architecture-microservice">Architecture microservice</h4>



<p>LLa transformation du bloc solide en un bloc malléable accroît la flexibilité. Chaque service de l&rsquo;application devient modifiable indépendamment. Une modification d&rsquo;un service n&rsquo;impacte pas les autres services, sauf en cas de dépendance directe.</p>



<figure class="wp-block-image aligncenter is-resized"><img loading="lazy" decoding="async" width="865" height="402" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-5.png" alt="" class="wp-image-848" style="width:625px;height:auto" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-5.png 865w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-5-300x139.png 300w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-5-768x357.png 768w" sizes="auto, (max-width: 865px) 100vw, 865px" /><figcaption class="wp-element-caption">Architecture Micro Service</figcaption></figure>



<p>Lorsqu&rsquo;une mise à jour de l&rsquo;authentification est effectuée, les données protégées deviennent alors inaccessibles. En revanche, les données libres d&rsquo;authentification restent quant à elles disponibles. Par ailleurs, modifier le système d&rsquo;impression n&rsquo;affecte donc pas l&rsquo;utilisation globale de l&rsquo;application</p>



<h3 class="wp-block-heading" id="h-isolation-des-processus-sous-linux">Isolation des processus sous Linux</h3>



<p>Pour créer une telle architecture, nous aurons besoin d&rsquo;un environnement capable de générer des services autonomes et de les regrouper.</p>



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



<p>En 2002, une fonctionnalité permettant l&rsquo;isolation des processus a été introduite dans le noyau Linux (version 2.4.19). Cette fonctionnalité, appelée « Namespaces », autorise des processus à utiliser des ressources qui sont déjà utilisées par d&rsquo;autres ressources.</p>



<p><br>Les systèmes partagent désormais des ressources comme une carte réseau, grâce à la virtualisation. Ainsi, la machine physique et les hyperviseurs utilisent simultanément cette ressource. Pendant ce temps, le processus maintient une isolation adéquate entre les utilisateurs de la ressource.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="742" height="379" src="https://www.pandawan.fr/wp-content/uploads/2024/09/image-5.png" alt="" class="wp-image-1130" style="width:455px;height:auto" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/image-5.png 742w, https://www.pandawan.fr/wp-content/uploads/2024/09/image-5-300x153.png 300w" sizes="auto, (max-width: 742px) 100vw, 742px" /><figcaption class="wp-element-caption">Les NameSpaces</figcaption></figure>



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



<p>En plus de la fonctionnalité des Namespaces, une autre capacité a été introduite : celle de regrouper et contrôler des fonctionnalités du noyau, connue sous le nom de cgroups (control group). À l&rsquo;intérieur d&rsquo;un groupe sous notre contrôle, il est possible d&rsquo;agréger une portion de nos ressources. Par exemple, cela peut consister en l&rsquo;allocation de 25 % de notre CPU, 25 % de notre mémoire RAM et 10 % de notre espace disque.</p>



<figure class="wp-block-image aligncenter is-resized"><img loading="lazy" decoding="async" width="638" height="316" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-7.png" alt="" class="wp-image-849" style="width:488px;height:auto" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-7.png 638w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-7-300x149.png 300w" sizes="auto, (max-width: 638px) 100vw, 638px" /></figure>



<p>Les ressources peuvent être gérées collectivement. Les fonctionnalités des Namespaces et des Cgroups peuvent collaborer de concert. Le projet qui a fusionné ces deux capacités au sein du noyau est le projet<a href="https://linuxcontainers.org/"> LinuX Container (LXC</a>), lancé en 2007 qui était les prémisses de la conteneurisation. Comme son nom l&rsquo;indique, ce projet vise à créer des conteneurs.</p>



<figure class="wp-block-image aligncenter"><img loading="lazy" decoding="async" width="495" height="213" src="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-8.png" alt="Cgroups et Namespace au coeur de la conteneurisation" class="wp-image-850" srcset="https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-8.png 495w, https://www.pandawan.fr/wp-content/uploads/2024/09/word-image-840-8-300x129.png 300w" sizes="auto, (max-width: 495px) 100vw, 495px" /></figure>



<p>La difficulté rencontrée avec ce projet réside dans la question de la portabilité. Comme nous l&rsquo;avons expliqué précédemment, les fonctionnalités des cgroups et des Namespaces sont intégrées au sein du noyau. Ainsi, si nous transférions le conteneur vers une autre machine, des effets indésirables pourraient apparaître. Ces défis peuvent être résolus en ajoutant une couche supplémentaire à LXC, afin de gérer les disparités entre la machine qui va conteneurisé et celle qui l&rsquo;exécutera. Cette surcouche a été introduite en tant que projet open source en 2013 sous le nom de Docker.</p>



<h2 class="wp-block-heading" id="h-conteneurisation-avec-docker">Conteneurisation avec Docker</h2>



<p>Docker est multiplateforme, c’est-à-dire qu’il peut être installer sur Windows, Linux ou MacOS. Pour illustrer nos exemples, nous installerons docker sur une distribution Alamlinux. Docker se décline en deux versions :</p>



<ul class="wp-block-list">
<li>Docker-CE (Community Edition).</li>



<li>Docker-EE (Enterprise Edition)</li>
</ul>



<p>Les fonctionnalités en termes de conteneurisation proposées par les deux éditions sont identiques en tout point. La différence se base au niveau du support proposé par Docker. La version Docker-CE qui est une version gratuite propose un support via la communauté des utilisateurs alors que la version Docker EE avec un support payant et proposé d’autres services. Il existe trois offres payantes pour Docker-EE :</p>



<ul class="wp-block-list">
<li>De base: vous obtenez la plate-forme Docker pour une infrastructure certifiée, ainsi que le support de Docker Inc. Vous avez également accès aux conteneurs Docker certifiés et aux plugins Docker depuis Docker Store.</li>



<li>Standard: Comprend les mêmes fonctionnalités que le niveau de base, mais avec une gestion avancée des images et des conteneurs, une intégration utilisateur LDAP / AD et un contrôle d&rsquo;accès basé sur les rôles.</li>



<li>Avancé: Comprend une analyse de sécurité Docker supplémentaire et une surveillance continue des vulnérabilités.</li>
</ul>



<p>La tarification générale de chaque niveau est généralement basée sur</p>
<p>L’article <a href="https://www.pandawan.fr/conteneurisation-avec-docker/">01 &#8211; Comprendre la Conteneurisation avec Docker pour les SysOps</a> est apparu en premier sur <a href="https://www.pandawan.fr">Pandawan</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
