Comme vous avez pu le supposer avec mon dernier billet, je me suis mis sérieusement à Docker. Travaillant sous Windows (oui, oui… chacun son fardeau !), nous devons utiliser boot2docker pour construire des images et déployer des containers. Boot2docker est une VM GNU/Linux très petite (environ 20Mo) pour VirtualBox qui contient le serveur et le client Docker pour construire des images et manipuler des containers.

6394678

Quand on commence à jouer avec Docker, on récupère des images sur les dépôts distants. On tente la création de Dockerfile. Tout ce passe dans la VM de boot2docker. Ce qui pose rapidement 2 soucis :

  • stocker/archiver les tests : on peut passer par un SCM distant (comme GitHub)
  • utiliser les outils de développement de la machine host : certains utilisent un éditeur avec un mode FTP ou un partage samba (mais il faut avouer que ce n’est pas pratique)

En cherchant rapidement, il est possible de trouver des articles qui proposent de monter un partage entre la machine host (Windows ou Mac) et la machine guest (VM boot2docker). Comme la procédure ne fonctionne pas du premier coup, voici deux méthodes différentes pour arriver à nos fins.

Objectif

L’ojectif est de pouvoir éditer sur Windows des fichiers Dockerfile et autres ressources pour la construction d’une image Docker et de pouvoir construire l’image sans devoir transférer les fichiers entre Windows et boot2docker.

Boot2docker avec VirtualBox guest additions

La première solution consiste à modifier la VM de boot2docker. Pour celà, il faut télécharger une version de la VM qui supporte les options de VirtualBox (connues sous le nom de “VirtualBox guest additions”).

Ensuite, il faut remplacer l’image officielle qui se trouve dans c:\Users\[Votre login]\.boot2docker\boot2docker.iso par la non-officielle tout juste téléchargée.

Avant de configurer la VM, il faut s’assurer qu’elle est arrêtée avec la commande suivante :

boot2docker stop

Maintenant, nous pouvons demander à VirtualBox de faire pointer le répertoire monté sur le répertoire de la machine host avec la commande suivante :

C:\Program Files\Oracle\VirtualBox\VBoxManage.exe sharedfolder add boot2docker-vm -name home -hostpath C:\[Votre répertoire]

Enfin, vous pouvez démarrer boot2docker et vous y connecter :

boot2docker up
boot2docker ssh

Pour information, votre répertoire partagé est monté dans le répertoire /Users.

Si jamais le répertoire est vide, arrêtez votre VM puis lancer la commande suivante :

C:\Program Files\Oracle\VirtualBox\VBoxManage.exe sharedfolder remove boot2docker-vm -name c/Users

Vous pouvez à nouveau tester l’accès à votre répertoire. Si malgré tout vous n’arrivez pas à accéder à votre répertoire Windows dans la VM de boot2docker, n’hésitez pas à redémarrer votre OS host. Vérifiez également que vous utilisez la dernière version de VirtualBox (4.3.18 lors l’écriture de cet article).

Votre boot2docker vous résiste ? Avant de tout lancer par la fenêtre, je vais vous proposer une solution plus simple qui fonctionne très bien.

Boot2docker avec Vagrant

Par défaut Vagrant partage le répertoire courant du host dans le répertoire /vagrant de la VM. Alors pourquoi ne pas lancer boot2docker avec Vagrant ? Rien de plus simple avec les commandes suivantes :

# l'image d'origine avec docker 1.2.0
$ vagrant init mitchellh/boot2docker
$ vagrant up
$ vagrant ssh

# l'image modifiée avec docker 1.3.0
$ vagrant init yungsang/boot2docker
$ vagrant up
$ vagrant ssh

Mission accomplie !

Je n’aurais rien de mieux à ajouter que :

                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 1.3.0

A très bientôt au milieu de tous ces containers !