Dernière mise à jour sur 6 sept. 2023, 13:10:54.
Catégorie:
Serveurs cloud
Cet article explique comment vous pouvez utiliser Docker pour configurer votre propre environnement de développement, par exemple pour développer une application Web avec un déploiement facile sur notre infrastructure de serveur cloud.
Avec le fichier yml que nous avons créé, lancer l'environnement sur la plate-forme de serveur cloud Kinamo à l'aide de Docker Engine devient un jeu d'enfant.
Si vous souhaitez plus d'informations sur l'installation de Docker Engine sur un serveur cloud Kinamo, veuillez lire notre article sur CentOS 7 et les conteneurs Docker !
Docker utilise des "images" pour commencer à créer des conteneurs. Une image contient un environnement Linux minimal et exécute généralement une fonction spécifique : un serveur Web, un serveur de base de données...
Avec l'aide de Docker Engine, vous pouvez exécuter Docker "Containers".
Un conteneur docker est à bien des égards comparable à une machine virtuelle « prête à fonctionner » : vous pouvez créer, supprimer et modifier des fichiers. Il y a une grande différence - et assez importante : dès que vous arrêtez un conteneur docker, toutes les modifications sont perdues.
Avec une machine virtuelle, après une "mise hors tension", vous pouvez simplement redémarrer avec le dernier "état" de votre machine.
Où pour l'installation d'un serveur virtuel vous utilisez une image ISO, cd d'installation, ... vous pouvez simplement utiliser une image docker pour le point de départ de votre conteneur docker.
Les images Docker peuvent être considérées comme une sorte de modèle qui vous permet d'être rapidement opérationnel. Avec ces images, vous pouvez créer un environnement docker.
Pour vous assurer que les données de votre base de données ou de votre configuration de serveur Web restent disponibles, vous devrez lier des volumes locaux sur vos conteneurs Docker depuis l'hôte.
Pour la plupart des logiciels, frameworks ou langages de développement, une variété d'images docker officielles sont disponibles. La seule chose qui reste est d'ajouter votre propre code ou vos propres données et vous êtes prêt à partir.
Lorsque vous utilisez plusieurs conteneurs dans un projet, il n'est pas toujours simple de mettre en place et de faire fonctionner rapidement l'environnement piloté par Docker. Configurer chaque conteneur, relier les volumes, le configurer devient une tâche laborieuse.
Pour résoudre ce problème, nous avons Docker Compose.
Avec Docker Compose, vous pouvez définir une application multi-conteneurs. Avec une seule commande, vous pouvez lancer tout l'environnement !
Dans cet article, nous examinerons l'utilisation de base de Docker Compose pour mettre en place un environnement de développement classique.
Nous utiliserons Docker Compose pour configurer un environnement avec deux conteneurs Docker : un serveur Web avec Apache et PHP et un serveur de base de données avec MySQL. Il s'agit d'un scénario récurrent et qui ouvre la porte à l'expérimentation de frameworks Wordpress, PHP, ... Pour notre installation, nous utiliserons les images officielles du Docker Hub.
Le projet ci-dessous peut être testé sur Windows, Mac ou Linux. Le guide d'installation expliquant comment faire fonctionner Docker Engine sous Linux peut être lu ici.
Si vous préférez utiliser Windows ou Mac, la boîte à outils Docker peut être une solution.
Nous allons commencer par configurer un conteneur pour le serveur Web. En tant qu'image pour le serveur Web, nous utiliserons l'une des images PHP officielles "php:5.6-apache".
Il s'agit d'une image pratique car Apache est déjà intégré à l'image.
Malheureusement, toutes les extensions ne sont pas disponibles prêtes à l'emploi pour le binaire PHP. Cela peut souvent être le cas avec les images "de démarrage". Afin de créer une connexion avec la base de données, nous devrons ajouter l'extension mysqli. Cela peut être fait en créant notre propre image, basée sur l'image Docker Hub. En d'autres termes, nous utiliserons l'image du Docker Hub comme point de départ pour notre propre image.
Dans un premier temps, nous allons créer un dossier dans lequel nous placerons tous les fichiers pour le serveur Web. Nous nommerons le dossier "php" puisque nous travaillons avec une image php.
Dans ce dossier, nous allons créer un nouveau fichier avec le nom "Dockerfile".
Un "Dockerfile" est un fichier texte contenant les commandes pour construire une image Docker. Le fichier docker de notre image php contient :
DEPUIS php:5.6-apache
RUN docker-php-ext-install mysqli
Avec FROM, nous indiquons quelle image nous utiliserons comme base.
Avec RUN, nous exécuterons une commande pour que l'extension mysqli soit installée. Cette commande est une fonctionnalité de l'image de base php, qui permet d'activer facilement plusieurs extensions. Lisez toujours la documentation de l'image que vous utiliserez, souvent les images ont des commandes spécifiques pour étendre l'image de base.
Pour ce test, nous utiliserons une page d'informations PHP. Dans le dossier 'php', créez un nouveau dossier 'www'. Dans ce dossier, nous placerons tous les fichiers proposés par le serveur Web.
Créez un nouveau fichier avec le nom index.php et ajoutez le code suivant :
<?php
phpinfo();
?>
Dans une dernière étape, nous allons créer notre nouvelle image et exécuter le conteneur. Pour cela, nous utiliserons Docker Compose.
Dans le dossier supérieur de notre projet, nous créons un fichier nommé docker-compose.yml. Celui-ci peut contenir les éléments suivants :
version 2'
prestations de service:
php :
construction : php
ports :
- "80:80"
- "443:443"
tomes :
- ./php/www:/var/www/html
Sur la première règle nous écrirons le nom de notre conteneur, 'php'.
À 'build' nous écrirons le nom de l'image que nous utiliserons. Nous souhaitons utiliser une nouvelle image basée sur le Dockerfile que nous venons de créer.
Nous écrirons 'php'. Il s'agit du dossier où se trouve le Dockerfile qui sera utilisé pour l'image.
Dans 'ports' nous définirons le mappage des ports. Pour notre serveur web, nous souhaitons rendre disponibles les ports 80 et 443. Nous allons lier les ports du conteneur à ceux de l'hôte, par exemple "host port:container port".
Un exemple : si le pare-feu autorise le trafic sur le port 80 pour le serveur cloud, le port hôte sera "80" et vous pouvez le mapper sur votre port de conteneur 80.
Dans une dernière étape - mais importante - nous mapperons un volume sur le conteneur.
La ligne './php/www:/var/www/html' signifie que nous allons lier le dossier "/php/www" sur l'hôte au dossier "/var/www/html" dans notre conteneur. Sans cela, TOUTES vos données seront perdues ou le conteneur Docker redémarrerait, car pour le conteneur Docker, il n'y aurait aucun emplacement défini en dehors du conteneur et aucun moyen de sauvegarder les données physiquement en dehors du conteneur, sur l'hôte. C'est donc CRUCIAL !
Si nous exécutons maintenant la commande docker-compose up, l'image sera construite et exécutée. Si nous utilisons ensuite un navigateur Web pour surfer sur l'adresse IP du serveur cloud Kinamo avec le moteur docker, nous verrons la page phpinfo.
db:
image: mysql:5.7
volumes:
- /var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=hunter2
- MYSQL_DATABASE=database
Avec le conteneur MySQL, nous lions également un volume pour les données MySQL. Au lieu de lier un dossier au conteneur, nous utilisons maintenant un volume Docker. Les performances de celui-ci sont meilleures.Pour s'assurer que le conteneur PHP et le conteneur MySQL peuvent communiquer, nous allons les lier ensemble.
Nous faisons cela avec un petit ajustement à docker-compose.yml.
version: '2'
services:
php:
build: php
ports:
- "80:80"
- "443:443"
volumes:
- ./php/www:/var/www/html
links:
- db
db:
image: mysql:5.7
volumes:
- /var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=hunter2
- MYSQL_DATABASE=database
Lors de la configuration du conteneur PHP, nous ajoutons le composant 'links'.<?php
mysqli_connect("db", "root", "hunter2") or die(mysqli_error());
echo "Connected to MySQL
";
?>
Si nous exécutons maintenant docker-compose up, les deux conteneurs seront démarrés et liés ensemble. Lorsque nous surfons maintenant sur le serveur Web, nous voyons le message "Connecté à MySQL".Vous pouvez maintenant commencer avec l'environnement de développement.
Vous pouvez développer une application en ajoutant du code dans le dossier 'www'. Le mappage de volume garantit que ces données sont également stockées sur l'hôte dans le répertoire "/php/www".
Grâce à Docker Compose, votre environnement de travail peut facilement être mis en place sur d'autres machines et éventuellement aussi dans un environnement de production... Et comme l'environnement est construit à partir de conteneurs isolés, il n'y a plus de problèmes dus à des différences de configuration ou de versions logicielles !
Vous n'avez pas obtenu de réponse à toutes vos questions?
Ne vous inquiétez pas, faites une demande d'assistance!