J’effectue régulièrement des missions en tant que freelance durant lesquelles j’interviens sur différentes stacks techniques. Comme je n’ai pas toujours le choix (en fait quasiment jamais) des versions des outils, frameworks ou langages utilisés, installer tout le nécessaire sur mon laptop pour chaque mission serait rapidement chronophage. Sans compter les difficultés voire les incompatibilités pour faire cohabiter plusieurs versions sur une même machine.

D’une manière générale, préparer son environnement de développement est souvent une étape fastidieuse pendant laquelle il faut télécharger les bons outils dans des versions spécifiques, puis les configurer. Le pire c’est lorsqu’un client me rappelle. Certes c’est plutôt bon signe pour mon business, mais comme entre temps j’ai travaillé sur autre chose, j’ai également configuré mon environnement de travail différemment… Il faut donc recommencer.

Certes, une fois qu’on connait un environnement, on connait déjà les pièges qu’il contient et on passe moins de temps à le préparer les fois suivantes. Mais j’avoue que ce n’est pas ce qui m’intéresse le plus, d’autant plus que je ne suis pas payé pour faire ça.

Heureusement il y a Docker !

En fait, il y a surtout Docker-Compose. J’expliquerai si besoin la différence entre Docker et Docker Compose dans un autre article ultérieurement. A ce stade, gardez en tête que Docker-Compose a besoin de Docker engine pour fonctionner.

Grâce à Docker-Compose, je peux décrire l’environnement dont j’ai besoin dans un fichier YAML. Je lance le build de mon environnement et en partageant les dossiers qui contiennent le code source avec ma machine hôte, je peux les éditer dans mon IDE sur mon laptop. L’autre avantage, c’est que je peux conserver le fichier de description de mon environnement pour le réutiliser ultérieurement si besoin.

Un exemple avec WordPress

Dans cet exemple, j’ai besoin de la dernière version de WordPress avec une base de données MySQL 5.7 pour modifier un thème. Il me faut donc un accès au répertoire qui contient le code source du site.

Je pars du principe que Docker et Docker-Compose sont déjà installés sur votre machine. Dans mon cas, j’utilise un Macbook.

La première étape consiste à créer un répertoire dans lequel nous allons travailler et écrire le fichier docker-compose.yml dans ce répertoire.

# Créer le répertoire de travail : 
$ mkdir /home/arnaud/dev/wordpress-test

# Se placer dans le dossier créé : 
$ cd /home/arnaud/dev/wordpress-test

# Créer le fichier docker-compose.yml :
$ touch docker-compose.yml

# Ecrire le fichier : 
$ vim docker-compose.yml

# Voici le contenu de l'exemple :
web:
 image: wordpress
 links:
  - mysql
 environment:
  - WORDPRESS_DB_PASSWORD=password
 ports:
  - "8880:80"
 volumes:
      - "./wordpress:/var/www/html"
mysql:
 image: mysql:5.7
 environment:
  - MYSQL_ROOT_PASSWORD=password
  - MYSQL_DATABASE=my-wpdb

Après avoir sauvegardé et quitté vim, il faut demander à Docker de récupérer les images nécessaires au fonctionnement du système que je veux utiliser et le lancer :

# Toujours dans le répertoire /home/arnaud/dev/wordpress-test :

$ docker-compose up -d

L’argument « -d » permet ici de lancer docker-compose en mode « daemon » c’est à dire en tâche de fond (je pourrai récupérer la main dans la console quand toutes les tâches seront terminées).

En me rendant dans le répertoire « /home/arnaud/dev/wordpress-test/wordpress » de mon laptop, le code source de mon site WordPress est accessible. Je peux l’ouvrir avec mon IDE.

Je peux accéder à mon site WordPress en saisissant l’URL « http://localhost:8880 » dans mon navigateur.

Quelques explications

Je reprends le fichier docker-compose.yml écrit plus haut en ajoutant des commentaires :

web:
 image: wordpress # => image officielle de wordpress disponible sur le Docker-Hub 
 links:
  - mysql #=> dépendance avec mysql décrit plus bas
 environment:
  - WORDPRESS_DB_PASSWORD=password #=> variable issue de la doc sur Docker-Hub
 ports:
  - "8880:80" #=> Mapping du port hôte 8880 avec le port 80 du container 
 volumes:
      - "./wordpress:/var/www/html" #=> Montage du répertoire /var/www/html du container dans le répertoire /home/arnaud/dev/wordpress-test/wordpress
mysql:
 image: mysql:5.7
 environment:
  - MYSQL_ROOT_PASSWORD=password #=> variable issue de la doc sur Docker-Hub
  - MYSQL_DATABASE=my-wpdb #=> idem

Vous trouverez le détail de toutes les options de configuration des images « wordpress » et « mysql » sur le Docker-Hub.

Voici les liens vers les images Docker-Hub officielles que j’ai utilisé :