Avant l’annonce de Docker 1.8, les utilisateurs MacOS X et MS Windows avaient à leur disponibilité un outil pour faire du Docker : boot2docker. C’était une VM légère avec Docker pré-installé et quelques fonctionnalités pratiques au jour le jour. Il était également possible d’utiliser sa propre VM GNU/Linux (via Vagrant par exemple) pour créer sa propre distribution Docker. Ce temps est révolu !

Pour rappel, Docker est un démon tournant sous GNU/Linux et fonctionnant sur un modèle client/serveur. Le démon expose une API permettant de manipuler des conteneurs. Le client en ligne de commande permet de commander le démon via cette API. Jusqu’à présent, les non-linuxiens devaient utiliser tous ces outils dans une VM GNU/Linux. Mais ça, c’était avant !

linux_docker_host

En effet, la disponibilité du client docker et plus particulièrement docker-machine sur MacOS X et MS Windows permet d’utiliser ces outils en natif sur ces systèmes d’exploitation.

win_docker_host

La nouvelle suite d’outils, Docker Toolbox, propose donc de créer et manipuler une VM GNU/Linux “Docker ready” avec VirtualBox via les commandes suivantes :

# création de la VM
$ docker-machine create -d virtualbox docker-test
Creating CA: C:\Users\pnom\.docker\machine\certs\ca.pem
Creating client certificate: C:\Users\pnom\.docker\machine\certs\cert.pem
Image cache does not exist, creating it at C:\Users\pnom\.docker\machine\cache...
No default boot2docker iso found locally, downloading the latest release...
Downloading https://github.com/boot2docker/boot2docker/releases/download/v1.8.3/boot2docker.iso to C:\Users\pnom\.docker\machine\cache\boot2docker.iso...
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: C:\Program Files\Docker Toolbox\docker-machine.exe env docker-test

# démarrage de la VM
$ docker-machine start docker-test
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

# arrêt de la VM
$ docker-machine stop docker-test

# utiliser la VM par défaut pour les commande docker*
$ eval "$(docker-machine env docker-test)"

# se connecter en SSH à la VM (même si ce n'est pas nécessaire)
$ docker-machine ssh docker-test

Après avoir créé et démarré la VM via docker-machine, il faut configurer le shell pour que le client docker l’utilise par défaut sinon il retourne une erreur de ce type :

# test du client Docker
$ docker run hello-world
Post http://127.0.0.1:2375/v1.20/containers/create: dial tcp 127.0.0.1:2375: ConnectEx tcp: Aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée..
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?

# récupération des informations de connexion à la VM (optionnel)
$ docker-machine env docker-test
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="C:\Users\pnom\.docker\machine\machines\docker-test"
export DOCKER_MACHINE_NAME="docker-test"
# Run this command to configure your shell:
# eval "$(C:\Program Files\Docker Toolbox\docker-machine.exe env docker-test)"

# configuration du shell
$ eval "$(docker-machine.exe env docker-test)"

# test du client Docker avec la VM par défaut
$ docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

A ce stade, Docker Toolbox a permis d’obtenir une VM VirtualBox contenant un démon Docker et son client en ligne de commande. Ce qui est assez équivalent à ce que proposait précédemment boot2docker. Les contraintes étant de travailler dans une VM et de partager un espace de travail entre le host et la VM.

Cependant, un client natif a également été configuré pour communiquer avec le serveur Docker se trouvant dans la VM. Il n’est donc plus nécessaire de se connecter en SSH à la VM. Il est enfin possible de travailler directement sur le host !

Une étape importante du développement avec Docker sur MacOS X ou MS Windows vient d’être franchie. L’utilisation de Docker sur ces OS devrait être plus fluide.