TrAsKiN.net, geek since 1337

Note #2 : Utiliser Docker sous Windows 26/01/2017

Depuis mon article sur la création d'un environnement de développement avec Docker sous Windows 10, j'ai testé d'autres méthodes afin de parvenir à un environnement plus pratique à mettre en place. Je pense être enfin parvenu à mon but ! Je vais donc partir du principe que le poste de travail est sous Windows 10 Pro 64bit avec la virtualisation d'activé (Gestionnaire des tâches > Performance > Processeur pour vérifier) sans aucun logiciel dédié à éxecuter/interpréter et délivrer du code PHP (comme WampServer).

J'utilise Windows PowerShell lorsque j'exécute des commandes de type console, j'ai donc remplacé, dans les paramètres accessibles par clique droit sur la barre des tâches, Invite de commandes par PowerShell.

Installation

A partir de maintenant, il va falloir installer Docker pour Windows. Je vous conseille de prendre la version stable, de l'installer et de la lancer pour qu'elle active, si besoin, le module Hyper-V (qui sert à la virtualisation) de Windows. Lorsque que Docker est prêt, je vous conseille d'aller tout de suite dans les Settings, clique droit sur l'icône de Docker dans la barre des tâches. Dans le premier onglet, faites comme bon vous semble, toutefois je conseille de garder la mise à jour automatique de Docker. C'est dans l'onglet Shared Drives que nous devons impérativement partager le disque sur lequel se trouvent vos fichiers. Validez puis Docker vous demandera le mot de passe de l'utilisateur qui devra être impérativement non vide. Dans l'onglet Advanced, vous pouvez choisir les ressources allouées à Docker. Normalement, nous n'aurons pas besoin de toucher aux autres paramètres situés dans les autres onglets. Sachez toutefois, que dans l'onglet Reset vous pourrez redémarrer Docker et/ou le réinitialiser avec ses paramètres d'usine.

C'est parti !

Nous avons maintenant Docker fonctionnel sur notre poste de travail, nous allons pouvoir véritablement passer aux choses sérieuses. Ouvrons PowerShell pour commencer la configuration de notre environnement.

Réseau virtuel

Pour faciliter la liaison de tous nos conteneurs, j'ai décidé de créer un réseau virtuel dédié. Pour cela, rien de très compliqué, il suffit d'une petite commande :

docker network create local.dev

Ici, local.dev est le nom de notre réseau virtuel. Il nous faudra ensuite connecter les conteneurs à ce réseau pour qu'ils puissent communiquer ensemble.

Conteneur de base de données

Nous allons maintenant créer notre premier conteneur qui sera le gestionnaire de base de données. J'ai choisi de, mon côté, d'utiliser MariaDB mais vous pouvez le remplacer par MySQL qui est identique.

docker run --name mariadb --network=local.dev -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mariadb

Il s'agit ici d'un conteneur pour une utilisation en locale uniquement. Avec cette commande nous avons créé et lancé un conteneur nommé mariadb, connecté à notre réseau virtuel local.dev, avec l'autorisation de laisser le mot de passe de root à vide, détaché de la console et utilisant l'image mariadb. Vous pouvez remplacer mariadb par mysql car leur fonctionnement est identique.

Conteneur d'application

Il est temps de créer notre conteneur d'application. J'ai choisi de pouvoir le paramètrer avec un fichier que nous placerons à la racine de notre projet. Il s'agit ici d'un projet Symfony et l'image sur laquelle nous baserons notre conteneur est donc configurée pour ce framework. Créez un fichier docker-compose.yml avec :

version: '2'

services:
    web:
        container_name: nom-du-conteneur
        image: traskin/docker-symfony
        volumes:
            - .:/var/www/html
        external_links:
            - mariadb:db
        ports:
            - "80:80"

networks:
    default:
        external:
            name: local.dev

Nous ne définissons ici qu'un seul service pour notre application. Si vous avez opté pour mysql, remplacez simplement mariadb par mysql. Créons le conteneur avec la commande :

docker-compose up

Au bout d'un temps, le conteneur est lancé et est fonctionnel. Arrêtez-le avec la combinaison Ctrl+C. Notre environnement de travail est prêt ! Vous pouvez le démarrer de deux manières différentes :

  • docker start <nom-du-conteneur>
  • docker-compose start

Pour pouvoir y accéder, vous devrez ajouter à votre fichier hosts (situé C:\Windows\System32\drivers\etc\hosts), avec les droits Administrateur, la ligne suivante :

127.0.0.1    local.dev

Après un rapide redémarrage de votre poste de travail pour prendre en compte cet alias, vous pourrez accéder à votre application à l'url : http://local.dev/app_dev.php/ lorsque ce conteneur sera démarré.

PHPMyAdmin

Si vous souhaitez visualiser votre base de données, je vous propose la création d'un conteneur avec PHPMyAdmin :

docker run --name phpmyadmin -p 8080:80 -e MYSQL_ROOT_PASSWORD= --network=local.dev --link mariadb:db -d phpmyadmin/phpmyadmin

Comme à chaque fois, vous pouvez remplacer mariadb par mysql. PHPMyAdmin est désormais accessible à l'url : http://localhost:8080/.

Quelques commandes utiles

  • Lister les conteneurs lancés : docker ps
  • Lister tous les conteneurs : docker ps -a
  • Arrêter un conteneur : docker stop <nom du conteneur>
  • Démarrer un conteneur : docker start <nom du conteneur>
  • Démarrer un conteneur via docker-compose : docker-compose start
  • Arrêter tous les conteneurs : docker stop $(docker ps -q)

Commentaire

  • TrAsKiN

    TrAsKiN

    Pour ceux qui souhaiterais utiliser la console de Symfony, voici un exemple de la commande à utiliser :

    • docker exec -ti <nom du conteneur> php bin/console <commande>


Ecrire un commentaire