Posté le 19/01/2024 | 2 commentaires dans PHP Développement Docker | Retour à la liste
Table des matières
Table des matières
Je vous parlais de Docker il y a peu. Aujourd'hui on va aller un peu plus loin dans ce qui est pour moi, l'intérêt premier de Docker.
En effet, avant même de vouloir tester des CMS, des scripts etc, ce que je souhaite faire moi, c'est développer mes trucs à moi, en PHP.
Pas à pas, on va voir ensemble comment faire ça, avec la persistence et tout ce qui va bien.
Une première version simple
On va clarifier notre besoin : On a un projet sur Github qu'on souhaite tester. Le projet ? 299ko, un CMS qui nécessite au moins PHP 7.4 sur un serveur Apache, c'est tout.
Pas de base de données, rien, ça va être très simple.
Pour la continuité de l'article, vous aurez simplement besoin de Docker installé sur votre machine, pas plus.
L'image
La première chose à faire, c'est de construire l'image dont on a besoin.
Docker fonctionne avec des conteneurs, qui sont tous isolés les uns des autres. Pour lancer un conteneur, il faut une image, qui comprend l'ensemble des fichiers et des services qui lui sont nécessaires.
Une fois qu'on a notre image, on peut en créer autant de conteneurs qu'on souhaite. Mais avant ça, il faut bien créer notre image.
Pour ça, on a à notre disposition un outil formidable : Docker Hub.
Le Docker Hub est une plateforme où l'on peut récupérer des images Docker prêtes à l'emploi, pour tester des scripts, serveurs etc, mais où chacun a le droit d'en mettre également.
Le mieux, c'est qu'il est possible de récupérer une image, la modifier pour notre besoin et la partager à tout le monde.
On en revient à notre image. J'ai dit qu'on avait juste besoin d'un serveur Apache et PHP pour tester notre petit CMS. Ca tombe bien, l'équipe webdevops a déjà créé une image avec tout ce qui nous faut.
Récupérer l'image
Pour récupérer une image trouvée sur le hub docker, il nous suffit d'ouvrir une console et de lancer :
docker pull webdevops/php-apache:8.0
Cette commande va télécharger l'image (ici php-apache), de l'auteur webdevops, au tag 8.0, qui correspond ici à une version supérieure de PHP que celle dont nous avons besoin.
Lister les images
Nous venons de télécharger notre première image.
Pour lister l'ensemble des images que vous avez déjà téléchargé, il suffit de lancer :
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
webdevops/php-apache 8.0 aaa9c0647b41 5 weeks ago 1.06GB
Et notre image ressort.
Créer notre premier conteneur
On va lancer notre premier conteneur, avec l'image fraîchement récupérée :
docker run --name 299ko -p 8080:80 webdevops/php-apache:8.0
docker run
permet de créer un conteneur depuis une image- l'option
--name
attribut le nom 299ko au conteneur créé -p 8080:80
"mappe" le port 80 de notre machine créée vers le port 8080 de la machine hôte (machine physique). En gros on utilisera le port 8080 sur notre navigateur pour arriver sur le port 800 de notre conteneur- enfin, le nom de l'image avec le tag. Si l'image n'a pas été téléchargée, elle le sera automatiquement. Si le tag n'est pas spécifié, ce sera la dernière version (
:lastest
) qui sera recherché.
A partir de ce moment, votre conteneur Apache + PHP est en fonctionnement. Si vous prenez votre navigateur et que vous vous rendez à l'adresse http://localhost:8080, vous aurez bien une réponse du serveur Apache qui vous affichera certainement une erreur 403 (forbidden).
Lister les conteneurs
Une fois le conteneur créé, vous pouvez retrouver les détails de celui-ci :
Lister les conteneurs actifs :
docker ps
Lister tous les conteneurs :
docker ps -a
Stopper, relancer
Arrêter le conteneur :
docker stop 299ko
Lancer le conteneur :
docker start 299ko
En stoppant le conteneur, vous verrez que la page http://localhost:8080 n'est plus accessible.
Et les fichiers ?
Vous avez raison. Si le service est actif, il faut pouvoir modifier les fichiers pour faire apparaître quelque chose.
Mais où doit-on mettre les fichiers pour que le serveur les prennent en compte ?
Alors là, faut se pencher sur la doc de webdevops. Je vous donne le chapitre concerné, et la réponse : dans le repertoire /app
. Donc tout ce qui est dans le repertoire /app sera visible à l'adresse http://localhost:8080 .
Mais comment avoir accès à ce repertoire ?
Vous allez ouvrir une autre console, en laissant le conteneur créé précédemment actif. Et on va taper dedans :
docker exec -ti 299ko bash
Cette commande va simplement exécuter le programme bash
dans notre conteneur 299ko. En gros, on ouvre un terminal dans la machine hôte, comme si on se connectait en SSH dessus.
On peut alors taper un ls
pour lister les fichiers et dossiers du / (root) du conteneur :
On voit notre dossier 'app', et on va pouvoir se positionner dedans :
cd app
Si vous retapez un ls
, vous verrez que le dossier /app est vide. On va ensuite utiliser vi, l'éditeur en terminal présent dans l'image, pour créer un fichier que l'on pourra voir sur notre serveur. Au hasard, on va créer un fichier 'index.php', qui nous servira simplement de phpinfo, pour afficher la configuration PHP présente :
vi index.php
Pour les non initiés à vi, on va le faire ensemble :
- Avec la touche "i", on va basculer du mode de commandes au mode édition
- On va pouvoir taper notre texte. Ici, on ne tapera que 2 lignes :
<?php
etphpinfo();
- Pour revenir au mode de commande, apuyez sur la touche "Echap"
- Tapez ":w" puis "Entrée" pour enregistrer le fichier, et ":q" puis "Entrée" pour quitter Vi.
Enfin, accèdez à l'adresse http://localhost:8080, et vous devriez voir le magnifique phpinfo apparaître :
Voilà, vous avez créé votre premier conteneur Apache, mis votre premier fichier PHP, et ça fonctionne. Mais c'est vrai, c'est pas ouf non plus...
Dockerfile
Les images pour Docker sont organisés par dépendance. Par exemple, notre image initiale webdevops va dépendre d'une image PHP, qui dépend elle d'une image Debian Buster.
Ici, on va s'aider de notre image pour monter, comme tout à l'heure, notre combo Apache + PHP, mais au lieu d'aller modifier les fichiers à la main, on va aller récupérer les fichiers d'un dépôt Git. Pour ça, nous allons utiliser un Dockerfile, un simple fichier texte qui va automatiser toutes ces tâches.
Je vous laisse, sur votre ordinateur physique, choisir un dossier, et y créer un fichier appelé "Dockerfile". C'est tout, pas d'extension, rien. Dedans, nous y mettrons simplement ceci :
# syntax=docker/dockerfile:1
FROM webdevops/php-apache:8.0
RUN apt-get update && apt-get install -y git
RUN git clone --depth 1 -b v1.3.2 https://github.com/299Ko/299ko.git /app
RUN chown -R application:application /app/
- La première ligne est une directive pour Docker, afin de spécifier la version de syntaxe utilisée.
- FROM : On récupère l'image webdevops/php-apache:8.0 existante (la même que plus haut).
- A partir de cette image, on va exécuter la commande (RUN) qui permet d'installer git
- On clône un dépôt Git (ici https://github.com/299Ko/299ko.git, sur sa branche 1.3.2) on on place les fichiers dans le dossier /app
- Et on change le propriétaire de ce dossier, pour ne pas avoir de soucis de droits en écriture dessus.
On sauvegarde et on ouvre un terminal dans le dossier où se trouve notre dockerfile. Nous allons simplement construire cette image pour pouvoir en créer des conteneurs. Pour cela, on lance juste un :
docker build .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM webdevops/php-apache:8.0
---> aaa9c0647b41
Step 2/4 : RUN apt-get update && apt-get install -y git
---> Running in b70c4885ba15
..............
Removing intermediate container 7cf8e8b4db0a
---> 1731c4fa143b
Step 4/4 : RUN chown -R application:application /app/
---> Running in c0be2d884c19
Removing intermediate container c0be2d884c19
---> 54b25dd63d40
Successfully built 54b25dd63d40
Le point final est important, il permet de spécifier que le Dockerfile à construire est dans le repertoire courant.
Ici, le nom de l'image créée est 54b25dd63d40. Si on veut ajouter un nom à l'image que l'on va créer (par exemple, testdf, il suffit de le spécifier comme ceci :
docker build --tag=testdf .
Puis on va pouvoir créer un conteneur de cette image testdf, qu'on appelera "contdf", sans oublier de changer le port pour l'accès :
docker run --name contdf -p 8081:80 testdf
Puis, en allant, sur l'adresse http://localhost:8081/, vous pourrez voir le CMS 299ko en action :
A ce stade, l'application est parfaitement fonctionnelle. Vous pouvez tester l'installation etc, le script peut modifier les fichiers de la machine.
Avec notre fichier Dockerfile, on a trouvé un vrai moyen de partager notre petit CMS. Ce n'était pas notre but premier, mais on avance.
Le vrai problème c'est vous, comment vous pouvez modifier les fichiers ?
Premier volume
On va faire différemment. Plutôt que de récupérer les fichiers distants et les balancer automatiquement dans le conteneur, on va créer un conteneur sans données d'application, comprenez sans les fichiers de notre CMS.
La particularité, c'est qu'on va créer un volume , un espèce de système de fichiers destiné à notre conteneur, mais qui aura la particularité d'être utilisable après la suppression de celui-ci.
En effet, Docker a été initialement dans le but de lancer des systèmes sans état, c'est à dire que si on supprime le conteneur, toutes les modifications sont perdues. Si c'est bien pour celui qui veut toucher à tout sans tout péter, pour développer des scripts en PHP c'est plutôt chiant.
Les volumes de Docker sont donc un moyen pour faire de la persistance, garder les données même si on pète tout.
Il existe 2 types de volumes dans Docker : Les volumes nommés, qui seront utiles lorsque vous voudrez partager des données entre 2 conteneurs par exemple, et les volume bind, comprenez volumes liés.
Ces derniers utilisent un dossier ou un fichier pour être monté dans le conteneur, là où vous le souhaitez.
Petit exemple
Pour tester les volumes bind, on va recréer un conteneur à partir de notre première image, Apache + PHP. La particularité, c'est qu'on va identifier au préalable un dossier sur notre machine physique que l'on utilisera pour monter dans le fameux dossier '/app' du conteneur.
Vous m'avez suivi ? C'est parti.
On va choisir un dossier, que l'on créera avant tout. J'ai choisi ici /home/maxk/docker, mais vous pouvez choisir celui que vous voulez, tant que vous avez les droits d'y placer et modifier des fichiers. C'est dans ce repertoire qu'on stockera les fichiers de notre application, et qui seront accessibles dans notre conteneur.
On va simplement lancer cette commande, pour créer un nouveau conteneur à partir de notre première image :
docker run --mount type=bind,source=/home/maxk/docker/,target=/app --name dockervolume -p 8083:80 webdevops/php-apache:8.0
docker run
, comme d'habitude, pour créer un conteneur--mount type=bind
: Indique qu'on souhaite monter un volume bindsource=/home/maxk/docker/,target=/app
: J'ai expliqué au dessus--name dockervolume
: Le nom de notre conteneur du coup- Puis vient le port utilisé, et le nom de notre image.
On lance ça, et on a un vrai conteneur de développement !
Il suffit de mettre vos fichiers dans le repertoire source, ici mon dossier /home/maxk/docker, et vous pouvez développer :)
Si vous supprimez le conteneur, les fichier sont gardés. Et mieux, si vous souhaitez tester vos scripts avec d'autres extensions, une autre version de PHP etc, vous pouvez. Il suffit de recréer un conteneur avec la même source, en changeant uniquement l'image d'origine :
docker run --mount type=bind,source=/home/maxk/docker/,target=/app --name dockervolumephp83 -p 8084:80 webdevops/php-apache:8.3
N'oubliez pas de changer le nom du conteneur et du port utilisé bien sûr, chacun doit être unique pour ne pas avoir de conflit.
Configuration
Je n'en ai pas parlé, mais il est évidemment possible de configurer l'environnement de PHP et Apache sur vos conteneurs. Je vous envoie vers la doc des images dont on a parlé, avec ce qu'on a vu vous avez toutes les cartes en main pour faire ça sans soucis ;)
Nous verrons dans un prochain article comment créer vos propres images, et les proposer sur le Docker Hub. Enjoy !
Commentaires
Bonsoir
J'ai un projet sur github qui m intéressé pour créer un site ..il s agit d'un dashboard avec liste d étudiants, paiements, etc ..
Le projet est top et il y a tous les fichiers au format php. Je galère à installer de l'environnement !! J'ai tout essayé et ça bug tout le temps. Je ne connaissais pas docker, je vais tester 🤞
vibration analysis
Vibration Analysis with Balanset-1A
Vibration analysis is a critical process used in various industries to ensure the optimal performance and longevity of machinery. The Balanset-1A is a portable balancer and vibration analyzer that specializes in dynamic balancing across multiple rotor types. This advanced device plays a vital role in diagnosing and correcting imbalances in equipment such as crushers, fans, mulchers, augers, shafts, centrifuges, and turbines, making it an essential tool for engineers and technicians involved in machinery maintenance.
Importance of Vibration Analysis
Vibration analysis serves as a proactive measure in equipment health monitoring. By detecting abnormal vibration levels, potential mechanical failures can be identified before they lead to catastrophic breakdowns. This approach not only minimizes downtime but also significantly reduces maintenance costs. The Balanset-1A, with its sophisticated features, enables professionals to perform precise vibration analysis, facilitating effective corrective actions to maintain efficiency and safety in operations.
Features of the Balanset-1A
The Balanset-1A is designed with two channels to streamline the balancing process, allowing for dynamic balancing in two planes. This functionality is integral to achieving high-precision results across various applications. Some notable features of the Balanset-1A include:
Vibrometer Mode: This mode allows technicians to measure the rotational speed accurately, offering insights into machinery performance.
Phase Measurement: The ability to determine the phase angle of vibration signals aids in comprehensive analysis and correcting misalignments.
FFT Spectrum Analyzer: The device provides detailed frequency spectrum analysis, which is essential for identifying specific vibration frequencies that may indicate underlying issues.
Measurement Log: It stores vital measurement data for future review, ensuring that no significant changes are overlooked during analysis.
Diverse Balancing Modes: Operators can choose between single and two-plane balancing, allowing for tailored solutions based on the specific requirements of the rotor.
Polar Graph Visualization: The Balanset-1A visualizes imbalance through polar graphs, facilitating rapid identification of necessary corrective weights.
Tolerance Calculations: Compliant with ISO 1940, the system computes acceptable balancing tolerances, ensuring industry-standard accuracy.
Report Generation: Generates comprehensive reports documenting all balancing outcomes for quality control purposes.
Operational Capabilities
The Balanset-1A extends its capabilities beyond basic vibration analysis. Advanced features allow for simultaneous monitoring of various parameters, enabling a thorough investigation of machinery health. For instance, it includes harmonic charts that delineate the presence of harmonic frequencies, impacting operational efficiency. The software interface also supports both metric and imperial units, making it convenient for users worldwide.
Component Breakdown
The Balanset-1A kit includes several essential components that enhance its functionality:
Two Vibration Sensors: These sensors are pivotal in monitoring vibration levels and making necessary calculations. With lengths of four and ten meters available, they can be adjusted based on the application’s needs.
Optical Sensor (Laser Tachometer): This sensor accurately measures the rotational speed from a distance of 50 to 500mm, contributing to precise analysis.
USB Interface Module: The addition of a USB interface enables easy connection to a PC for software integration, enhancing data analysis and storage capabilities.
Applications Across Industries
The versatility of the Balanset-1A makes it suitable for a wide range of sectors. Industries such as manufacturing, agriculture, and energy generation can benefit from its comprehensive capabilities.
In manufacturing, for example, early detection of vibration anomalies can lead to timely maintenance and avoid costly production downtime. In agricultural applications, balancing rotating components on combines ensures efficiency, maximizing crop yields. The energy sector can leverage vibration analysis to maintain optimal performance of turbines, safeguarding against energy loss and mechanical failures.
Conclusion
The Balanset-1A stands out in the world of vibration analysis by delivering a suite of advanced features that enable comprehensive rotor balancing and performance monitoring. Its portability makes it an ideal choice for on-site evaluations, while its detailed reporting and data analysis capabilities allow for informed decision-making and effective preventive maintenance strategies. Investing in vibration analysis with the Balanset-1A not only enhances equipment reliability but also contributes to improved operational efficiency across various industries.
Overall, integrating vibration analysis into routine maintenance processes is vital for the sustainability of machinery operations. The Balanset-1A is an indispensable tool for professionals seeking to maintain high standards of performance and safety in their machinery.
Article taken from https://vibromera.eu/