meta données pour cette page
Une infrastructure de conteneurs (Docker-compose)
Pour comprendre la méthode de déploiement de conteneurs, j'exprime ici une situation où l'on va créer une application web écrite en PHP qui stockera ses données dans une base de donnée MySQL. Pour ne pas se compliquer la tâche, on se basera sur les images eboraas/apache-php et mysql:5.7.
Voici techniquement le schéma représentant ce que nous allons reproduire:
Cette topologie réseau permettra à l'application web d'être accessible en local via un navigateur web à l'adresse http://127.0.0.1/
Pré-requis
Avant de poursuivre le tutoriel, installons les bon outils :
sudo curl -sSL get.docker.com |sh sudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
On définit l'utilisateur qui aura le droit de les utiliser :
sudo usermod -aG docker mon_utilisateur
Créer notre infrastructure
Tout au long de ce tutoriel on restera dans le dossier de l'utilisateur courant. Le code source se situe dans le chemin relatif suivant :
mkdir ~/code nano ~/code/index.php
- index.php
<?php // Information sur le conteneur : echo gethostname(); echo "<h1>tout fonctionne bien!<h1>"; // Test d'une connexion à la base de donnée : try { $bdd = new PDO("mysql:host=bdd;dbname=mysql","root","mysql"); echo '<p>Connecté à la Base de donnée</p>'; echo "<p>Simple requête : </p>"; foreach ($bdd->query('SELECT * from user') as $row) { echo '<pre>'.var_dump($row).'</pre>';} } catch(PDOException $e) { echo $e->getMessage(); } ?>
Rédigeons notre plan de travail sur lequel on défini la composition des conteneurs :
nano ~/docker-compose.yml
- docker-compose.yml
version: '2' services: site: image: eboraas/apache-php ports: - "80:80" volumes: - ./code:/var/www/html links: - bdd bdd: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: mysql MYSQL_DATABASE: mysql
Pour ajouter d'autres directives, elles sont disponible dans la documentation de Docker.
Ci-dessus j'indique dans un premier temps que le conteneur site se basera sur l'image apache-php de l'utilisateur eboraas. Il aura le port 80 “natté” sur la machine hôte et il aura connaissance du conteneur bdd grâce à la fonction “links”. Pour utiliser le code source de l'application, on créer un point de montage dans le conteneur à l'emplacement /var/www/html.
Concernant la base de donnée, je me base sur la version 5.7 de l'image officiel Mysql dont j'ai renseigné via des variables de post-configuration, le nom de la BDD et le mot de passe administrateur
On peut maintenant lancer la création des conteneurs :
docker-compose up -d
Creating network "projet_app" with driver "bridge" Creating projet_bdd_1 Creating projet_site_1
Ainsi on peut voir que les conteneurs fonctionnent bien :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 386f3519cf4a eboraas/apache-php "/usr/sbin/apache2ctl" 46 seconds ago Up 45 seconds 0.0.0.0:80->80/tcp, 443/tcp projet_site_1 362e1be8dd76 mysql:5.7 "docker-entrypoint.sh" 46 seconds ago Up 45 seconds 3306/tcp projet_bdd_1
Voici la belle réponse de notre conteneur site !
Détruire le projet
Sa destruction est encore plus simple que sa construction car elle se faut en une seule ligne :
docker-compose down