Crée son image docker laravel
Bienvenue dans notre tutoriel express sur la création d’une image docker de Laravel (pour un rappel sur ce qu’est laravel, on a fait un tuto ici). Apprenez rapidement comment créer votre propre image docker, comment gérer les différents layer, et comprendre les subtilités de la création d’une image docker. Ce guide vous équipe pour créer une api laravel portable et vous fait entrer dans le grand bain du devops !
- Comprendre les fondamentaux – Familiarisez-vous avec les bases de docker, la containerisation et ses images.
- Prérequis – Découvrez ce dont vous avez besoin pour démarrer, y compris la configuration initiale ainsi que l’installation de docker.
- Le FROM – Apprenez à créer la base de votre image à partir d’autres images et comment les choisir .
- L’installation de dépendance – Installer les dépendances pour laravel.
- Le système de fichier– Découvrez comment faire une architecture de système de fichier efficace pour un projet containers.
- Le build – Apprenez comment build votre image docker.
Comprendre les fondamentaux
Qu’est-ce que la conteneurisation ?
La conteneurisation est une technologie logicielle qui permet de regrouper une application et ses dépendances dans un conteneur portable et autonome. Ce conteneur est constitué d’une image qui contient tous les éléments nécessaires à l’exécution de l’application, y compris le code source, les bibliothèques, les outils système et les configurations.
La conteneurisation est basée sur le principe de la virtualisation mais au lieu de virtualiser une machine virtuelle avec un système d’exploitation et tout le matériel, la conteneurisation virtualise un service ou une application.
Ce qui rend la conteneurisation bien plus performante et rapide que les machines virtuelles tout en bénéficiant des avantages de la virtualisation tel que la portabilité et l’isolation virtuelle qui ajoute une couche de sécurité supplémentaire
Qu’est-ce que Docker ?
Docker est un moteur de conteneurisation open source qui facilite la création, le déploiement et la gestion des conteneurs. Il fournit un ensemble d’outils et de services pour automatiser les tâches courantes liées à la gestion du cycle de vie des conteneurs.
C’est actuellement le moteur de conteneurisation le plus populaire il utilisé dans de nombreuse grande entreprise, docker possède actuellement un écosystème vaste et riche notamment via la plateforme en ligne d’image docker hub.
Qu’est-ce qu’une image Docker ?
Une image Docker est un fichier exécutable via docker qui contient tout ce qui est nécessaire pour créer un conteneur. Elle est composée de plusieurs couches, chacune représentant une étape du processus de construction de l’image. La couche de base contient les dépendances du système d’exploitation nécessaire à notre projet, tandis que les couches suivantes ajoutent les dépendances et les configurations nécessaires à l’application.
Avantages de la conteneurisation avec Docker
- Portabilité: Les conteneurs peuvent être facilement déplacés d’un environnement à l’autre sans aucune modification.
- Isolation: Les conteneurs s’exécutent de manière isolée les uns des autres, ce qui garantit la sécurité et la stabilité des applications.
- Fiabilité: Les conteneurs garantissent un environnement d’exécution cohérent pour les applications, quelle que soit la plateforme sous-jacente.
- Efficacité: Les conteneurs partagent le noyau du système d’exploitation, ce qui optimise l’utilisation des ressources.
Structure d’une image Docker
Une image Docker est composée de plusieurs couches, chacune ayant une fonction spécifique :
- Couche de base: Contient le système d’exploitation.
- Couches d’application: Contient les dépendances et les configurations nécessaires à l’application.
- Couche de travail: Contient les données et les fichiers générés par l’application.
Création d’une image Docker
Pour créer une image Docker, il faut utiliser un fichier Dockerfile. Ce fichier contient des instructions qui décrivent les étapes nécessaires à la construction de l’image.
Déploiement d’une application conteneurisée
Une fois l’image Docker créée, elle peut être déployée sur un serveur ou une plateforme de cloud computing. Docker fournit plusieurs outils pour faciliter le déploiement des conteneurs.
Prérequis
Configuration minimale requise
Pour utiliser Docker, vous devez avoir un ordinateur avec les configurations suivantes :
- Système d’exploitation: Windows 10 Famille, Professionnel ou Entreprise (64 bits), macOS 10.12 Sierra ou version ultérieure, ou Linux (64 bits)
- Processeur: Intel Core i5 ou AMD Athlon X4 (ou équivalent)
- Mémoire vive: 4 Go de RAM minimum (8 Go recommandés)
- Espace disque: 2 Go d’espace libre minimum
Activation de la virtualisation
Windows:
- Redémarrez votre ordinateur et entrez dans le BIOS/UEFI.
- Recherchez l’option de virtualisation (souvent appelée Intel VT-x ou AMD-V) et activez-la.
- Enregistrez les modifications et quittez le BIOS/UEFI.
Mac:
- Redémarrez votre ordinateur et maintenez enfoncée la touche ⌘ pendant le démarrage.
- Sélectionnez Utilitaires > Démarrage de sécurité.
- Cliquez sur Continuer.
- Cochez la case Activer la virtualisation.
- Cliquez sur Redémarrer.
Linux:
La virtualisation est généralement activée par défaut sur les systèmes Linux. Vous pouvez vérifier son statut en exécutant la commande suivante :
Si la virtualisation est activée, vous verrez une sortie indiquant svm ou vmx.
Installation de Docker
Windows:
- Téléchargez Docker Desktop pour Windows à partir de https://docs.docker.com/desktop/install/windows-install/.
- Exécutez le fichier d’installation et suivez les instructions à l’écran.
Mac:
- Téléchargez Docker Desktop pour Mac à partir de https://docs.docker.com/desktop/install/mac-install/.
- Exécutez le fichier d’installation et suivez les instructions à l’écran.
Linux:
- Installez Docker selon les instructions de la documentation Docker pour votre distribution Linux : https://docs.docker.com/.
Vérification de l’installation
Une fois Docker installé, vous pouvez vérifier son installation en exécutant la commande suivante :
Si Docker est correctement installé, vous verrez une sortie indiquant la version de Docker installée.
Le FROM dans Docker : Créer des images à partir d’autres images
Qu’est-ce que FROM ?
FROM est une instruction essentielle dans un fichier Dockerfile. Elle permet de créer une image en s’appuyant sur une image existante. Cette image de base est appelée « image parent ».
Avantages de l’utilisation de FROM:
- Réutilisation: Vous pouvez profiter des fonctionnalités et des dépendances déjà installées dans l’image parent.
- Gain de temps: Vous n’avez pas à installer les dépendances de base à partir de zéro.
- Taille réduite: Votre image sera plus petite car elle ne contiendra que les modifications par rapport à l’image parent.
Choisir une image parent pour Laravel:
Pour Laravel, plusieurs images parent peuvent être utilisées :
- Images officielles PHP: Elles sont fournies par la communauté PHP et contiennent le runtime PHP et les extensions les plus courantes.
- Images Nginx: Elles incluent un serveur web Nginx configuré pour servir des applications PHP.
- Images Alpine: Elles sont basées sur l’image BusyBox et sont connues pour leur taille réduite mais a pour inconvénient d’avoir régulièrement des failles de sécurité majeures dans son image.
- Images Debian: Elles sont basées sur l’image de l’os debian et sont connues pour leur sécurité et leur stabilité.
Exemples d’images parent pour Laravel:
- php:zts-bookworm
- php:zts-alpine3.19
- nginx:alpine-perl
Conseils pour choisir une image parent:
- Tenez compte de vos besoins: Choisissez une image qui contient les fonctionnalités dont vous avez besoin par exemple est ce qu’il faut du FPM (FastCGI Process Manager) ou ZTS (Zend Thread Id) ?.
- Considérez la taille: Les images Alpine sont plus petites mais peuvent ne pas contenir toutes les dépendances dont vous avez besoin et ont des failles de sécurité.
- Choisissez une image populaire: Les images populaires ont généralement une communauté plus active et une documentation plus riche.
L’installation de dépendance
Voici un exemple de Dockerfile Laravel simple utilisant l’instruction FROM et permettant de créer une image d’un nouveau projet laravel vierge:
Dockerfile
Ce Dockerfile utilise l’image php:zts-bookworm comme image parent qui la version 12 de debian:
- Il installe ensuite les dépendances pour laravel via le gestionnaire de paquet apt et via la commande docker-php-ext-install
- Ensuite avec curl on récupère la dernière version de composer depuis le site officiel et on l’install de manière globale
- On autorise composer de fonctionner en root
- Puis on fait les commandes composer pour créer un projet laravel depuis la racine dans le répertoire app
- Ensuite on définit comme le répertoire de travail aka le répertoire par défaut du conteneur
- Pour finir on détermine ce que fait le container quand on le l’exécute ici par exemple on génère une clef de chiffrement pour la BDD on installe les dépendance composer puis pour finir on lance notre laravel sur le port 8000 du containeur.
Si vous avez bien suivie ce que fait ce dockerfile on peut retenir 7 type de commande de dockerfile:
- FROM : qui comme on la vue permet de partir sur image docker existante
- RUN : qui l’équivalent d’un /bin/bash c’est à dire que c’est run qui va permettre d’exécuter des commandes lors de la création de notre de images.
- WORKDIR : permet de définir un répertoire de travail soit le répertoire par défaut du container.
- ENV : va permettre de déterminer une variable d’environnement pour pouvoir de manière efficace configurez des application si besoin (comme composer par exemple)
- EXPOSE : permet d’exposer un port du conteneur sur le réseau ici c’est le port 8000 car on fait php artisan serve –port=8000
- CMD : La plus importante des instruction c’est elle qui détermine ce que fait le conteneur fait lorsque celui-ci s’exécute il est important le différencier de RUN qui lui exécute des instruction uniquement dans la création de l’images
Le système de fichiers dans les conteneurs Docker
Introduction:
Le système de fichiers est un élément crucial pour l’organisation et la gestion des données dans un projet conteneurisé. Une architecture de système de fichiers efficace est essentielle pour garantir la performance, la portabilité et la cohérence de vos conteneurs.
Structure du système de fichiers:
Définissez une structure claire et logique pour vos fichiers. Regroupez les fichiers par fonction ou par type.
Étape 1: Définir la structure du système de fichiers
Commencez par définir une structure claire et logique pour vos fichiers. Regroupez les fichiers par fonction ou par type. Par exemple, vous pouvez créer les dossiers suivants:
- /app: Contient le code source de l’application
- /config: Contient les fichiers de configuration
- /data: Contient les données persistantes
- /logs: Contient les journaux d’application
Étape 2: Utiliser des volumes Docker pour le partage et la persistance des données
Les volumes Docker permettent de partager des données entre plusieurs conteneurs et de les stocker de manière persistante en dehors des conteneurs.
- Partage de données: Créez un volume Docker pour les données que vous souhaitez partager entre plusieurs conteneurs. Ensuite, montez ce volume dans chaque conteneur qui a besoin d’accéder aux données.
Persistance des données: Créez un volume Docker pour les données persistantes. Ensuite, montez ce volume dans le conteneur qui a besoin d’accéder aux données. Les données seront conservées même après la suppression du conteneur.
Construire une image Docker
Comment construire une image Docker ?
Pour construire une image Docker, vous pouvez utiliser la commande docker build. Cette commande prend plusieurs options, dont :
- -f: Le chemin vers le fichier Dockerfile.
- -t: Le nom de l’image à construire.
- -c: Le contexte de construction. Il s’agit du répertoire qui contient le fichier Dockerfile et les autres fichiers nécessaires à la construction de l’image.
Exemple de construction d’une image Docker:
Cette commande construit une image nommée my-app à partir du fichier Dockerfile situé dans le répertoire actuel.
Conseils pour la construction d’images Docker:
- Utilisez un fichier Dockerfile clair et concis: Le fichier Dockerfile doit être facile à lire et à comprendre.
- Utilisez des images de base minimalistes: Commencez avec une image de base minimale et ajoutez uniquement les logiciels et les fichiers nécessaires à votre application.
- Cachez les couches: Les couches du cache permettent d’accélérer le processus de construction.
- Testez vos images: Assurez-vous que vos images fonctionnent correctement avant de les déployer en production.
Voilà on a vue avec ce tutoriel comment faire sa propre image d’un projet vierge laravel afin pouvoir faire une API REST conteneurisé, la prochaine étape c’est de voire grâce à docker compose comme déployer de manière rapide et automatisé l’écosystème pour notre API REST (mariadb+phpmyadmin+api).
Envie d’en savoir plus sur le développement d’applications web ,sur le dev/ops ou la conception d’applications inscrivez-vous à notre formation Développeur web et web mobile ou Concepteur Développeur d’Application (CDA) afin de viser l’excellence, acquérir un savoir-faire concret dans le développement web et d’obtenir un diplôme national RNCP reconnus par l’État.