docker compose – tutoriel Docker

tutorial docker compose
tutorial docker compose

Si vous avez loupé les deux articles précédents, je vous propose d’aller les lire avant de vous lancer dans ce tutoriel docker 3 où nous allons apprendre à gérer plusieurs conteneurs ensemble avec l’aide du docker compose.

Article 1 : Premiers pas avec Docker
Article 2 : Maitrisez les Dockerfile

Ce tutoriel sur docker compose est indépendant des deux précédents mais il est fort utile d’avoir quelques connaissances en Docker pour bien comprendre la puissance de docker compose.

Vous pouvez regarder la vidéo de la minute agile sur qu’est-ce que docker :

Qu’est-ce que docker compose

Docker compose est un outil très intéressant de gestion de package docker. Cet outil va lancer vos conteneurs et leurs éventuels liens à partir d’un fichier de configuration écrit en yaml. Nous pourrions comparer cet outil à apt-get ou composer mais dans le but de packager des conteneurs docker. Cet outil vient simplifier la vie aux utilisateurs de docker.

Installation de docker compose

« Sous Ubuntu configuré de base, il vous faudra mettre sudo devant vos commandes ou revoir la configuration de vos utilisateurs »

Nous allons devoir installer ce nouvel outil docker compose qui ne fait pas parti des outils de base lors de l’installation de Docker.

sudo curl -o /usr/local/bin/docker-compose -L "https://github.com/docker/compose/releases/download/1.8.1/docker-compose-$(uname -s)-$(uname -m)"
sudo chmod +x /usr/local/bin/docker-compose

Nous allons pouvoir vérifier que l’installation de docker compose a bien fonctionné en testant une fonction très simple de docker-compose qui permet d’afficher le numéro de version de l’outil installé :

docker-compose -v

Préparation de nos images

Pour utiliser notre docker compose nous allons utiliser deux images docker : une que nous allons créer avec un Dockerfile et l’autre que nous allons récupérer sur Docker Hub

Image créée à partir d’un Dockerfile

Nous allons créer notre première image qui sera un serveur apache avec du php qui aura la capacité de se connecter à un serveur MySql extérieur.

Commençons par créer un dossier docker/ et y mettre un fichier index.php comme ceci :

<?php
 
 $dbh = new PDO('mysql:host=db;dbname=mysql', 'root', 'passe');
 
 foreach($dbh->query('SHOW DATABASES') as $row) {
   echo $row[0]. '<br/>';
 }

Nous allons également faire un fichier docker/host.conf :

<VirtualHost *:80>
     ServerAdmin webmaster@localhost
     DocumentRoot /var/www/test
 </VirtualHost>

Nous allons à présent écrire notre Dockerfile qui va utiliser ces deux fichiers lors du build de l’image :

FROM ubuntu:16.04
 MAINTAINER Judicael paquet
 
RUN apt-get update && \
     apt-get install -y apache2 php libapache2-mod-php mysql-client php7.0-mysql
 
 RUN sed -i 's/;extension=php_mysqli.dll/extension=php_mysqli.dll/' /etc/php/7.0/apache2/php.ini
 RUN sed -i 's/;extension=php_pdo_mysql.dll/extension=php_pdo_mysql.dll/' /etc/php/7.0/apache2/php.ini
 
 ADD docker/host.conf /etc/apache2/sites-enabled/000-default.conf
 ADD docker/index.php /var/www/test/index.php
 
 ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Tout est prêt pour builder notre image :

docker build -t monapache .

Image récupérée sur Docker Hub

Pour notre deuxième image nous allons utiliser une autre méthode : docker hub. Nous allons récupérer une image du Docker Hub en local grâce à la commande suivante :

docker pull mysql/mysql-server:5.7

Docker compose : création du fichier docker-compose.yml

Docker compose comme je le disais plus haut propose de gérer plusieurs conteneurs en même temps avec la possibilité de les faire communiquer entre eux grâce à un seul fichier : le docker-compose.yml.

Je vous propose de créer le notre :

db:
     image: mysql/mysql-server:5.7
     ports:
       - "3306:3306"
     environment:
       - "MYSQL_ROOT_PASSWORD=passe"
       - "MYSQL_USER=your_user"
       - "MYSQL_PASSWORD=your_user_password"
       - "MYSQL_DATABASE=your_database_name"
superapachephp:
     build: ./
     ports:
       - "8010:80"
     links:
       - "db:db"
     working_dir: "/home/docker"

Comme vous le voyez, nous avons volontairement mis « passe » en mot de passe « root ». C’est celui qu’on avait déjà mis dans notre fichier PHP. Sachez que le nom « db » est important car  il sera automatiquement le nom de l’host du conteneur ; c’est pour cela qu’on a mis « db » en hostname sur la connexion SQL faites en PHP.

A part la syntaxe qui change, si vous êtes familier avec docker run et les dockerfile, vous ne devriez pas être dérouté avec ce fichier. Le link permet de lier le conteneur à un autre comme avec l’option -v du docker run que nous n’avions pas vu.

A présent nous allons lancer notre docker compose comme ceci :

docker-compose up -d

A présent tentez d’appeler dans votre navigateur l’url http://localhost:8010. Si vous avez une page blanche, il vous faudra faire la manipulation suivante. Elle vous permettra de mettre les bons droits à l’utilisateur Mysql :

docker ps 
# remplacez ubuntu_db_1 par l'id de votre conteneur db
docker exec -it ubuntu_db_1 mysql -uroot -p -e "CREATE USER 'root'@'%' IDENTIFIED BY 'passe';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';FLUSH PRIVILEGES;"

Pour rappel, le mot de passe sera « passe ».

Si tout est ok, vous aurez la liste des bases présentes dans la base de données Mysql sur votre navigateur Internet.

Conclusion docker compose

Vous avez à présent toutes les bases pour être capable de maîtriser rapidement ce composant docker. Ce docker compose est un outil vraiment utile. De plus en plus de projets sur Github proposent d’ailleurs ce fichier docker-compose.yml pour monter rapidement le projet.

[ Article lu 1 fois aujourd'hui ]
A propos Judicaël Paquet 942 Articles
  Paquet Judicaël (expert en transformation et AI) Mes activités en France et en Suisse : - ingénieur prompt - coach AI - architecte de transformation agile - formations agiles personnalisées - sensibilisations et coaching de manager - audits de maturité agile et de situations - coaching agile (équipes, orga, product owner, scrum master, coach agile) Spécialités : scrum, kanban, management 3.0, agilité à l’échelle, lean startup, méthode agile, prompt AI, Intelligence artificielle. [Me contacter]

5 Commentaires

  1. Bonjour et merci pour ce tuto.

    J’ai une erreur :

    ADD failed: stat /var/lib/docker/tmp/docker-builder626723004/docker/host.conf: no such file or directory

  2. Bonjour,
    En premier merci pour le tuto.
    Pour le suivre j’ai fait un copié collé des étape ci-dessus et suis arrivé à la même erreur que « francfort ».
    Le message est le suivnant : Step 6/8 : ADD docker/host.conf /etc/apache2/sites-enabled/000-default.conf
    ADD failed: stat /var/lib/docker/tmp/docker-builder003548896/docker/host.conf: no such file or directory
    D’avance merci pour votre aide,

    • Hello,

      Dès que je peux, je vais regarder cela. C’est en effet curieux, peut-être des changements avec les dernières versions de Docker. Je vais regarder dès que je peux pour comprendre pourquoi vous avez cette erreur.

    • Est-ce que tu lances la commande dans ./docker/ ou bien dans ./ ?
      Car si tu lances la commande dans le dossier ./docker/, il ne peut plus trouver le fichier.

      J’ai restesté de mon côté et ça fonctionne. Du coup, je vois ça comme raison de l’erreur que vous avez

5 Rétroliens / Pings

  1. Tutoriel Docker 2 : Maitrisez les Dockerfile | Blog Myagile Partner
  2. Top 10 des articles de mars 2017 | Blog Myagile Partner
  3. Triforce Agile : Scrum, Devops et Lean Startup | Blog Myagile Partner
  4. Docker 5 ans et toujours plus grand ! | Blog Myagile Partner
  5. Docker Tutorial 3: docker compose for multi-container | Blog Myagile Partner

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*


Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.