Faire le setup d'un environnement de développement avec Docker Compose

Dernière mise à jour sur 6 sept. 2023 à 13:10:54.
Catégorie: Serveurs cloud

Cloud Servers Docker

Docker compose environment kinamo

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 !

Récipient? Ou machine virtuelle ?

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.

Démarrer avec Docker Compose

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.

Le conteneur du serveur Web

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.

Le conteneur de la base de donnéesL

'image de base MySQL que nous utiliserons à partir du Docker Hub ne nécessite aucune configuration supplémentaire. Nous n'avons pas besoin de créer une nouvelle image. Il suffit d'ajouter les paramètres suivants à docker-compose.yml. Ajoutez les règles suivantes après la définition du conteneur php.
 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 créer un volume Docker, nous fournissons uniquement le dossier du conteneur pour lequel le volume doit être créé.
En langage humain : le répertoire "/var/lib/mysql" dans le conteneur sera lié à un répertoire par défaut que docker mappera sur l'hôte.
Vous pouvez localiser le volume sur l'hôte à l'aide de la commande docker inspect.

Les paramètres spécifiés dans "environnement" dépendent de l'image. Dans ce cas, certaines variables déterminent la valeur transmise au conteneur Docker, par exemple le mot de passe root pour la base de données et le nom de la base de données.

Rassembler le tout

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'.
Nous avons défini qu'une connexion doit être établie avec le conteneur MySQL.

Pour tester la connexion, nous ajustons notre fichier index.php.
<?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".

Si vous souhaitez que l'environnement continue de fonctionner en arrière-plan, exécutez docker-compose up -d.

Prêt pour la vraie chose!

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 !


Articles connexes

Les services gérés sous les feux de la rampe

Nos administrateurs système ont soulevé quelques cargos remplis de conteneurs de travail. (oui, ce jeu de mots était intentionnel, plus...

En savoir plus

Quelles sont les conditions pour enregistrer un nom de domaine .be?

Enregistrer un nom de domaine .be est simple. Toute personne physique ou morale peut enregistrer un nom de domaine .be...

En savoir plus

Apache - Désactiver SSL 2.0, SSL 3.0 et opter pour une configuration SSL moderne et sûre.

Cet article vous montre comment désactiver les protocoles SSL 2.0, SSL 3.0 et les anciennes versions de TLS sur votre...

En savoir plus

Besoin d'aide supplémentaire?

Vous n'avez pas obtenu de réponse à toutes vos questions?
Ne vous inquiétez pas, faites une demande d'assistance!

Kinamo

Sélectionnez votre langue

Toutes les langues: