Le Touilleur Express

  • Accueil
  • A propos de l’auteur
  • A propos du Touilleur Express
Next Previous

Installer Docker

5 mai, 2014

Voici la suite de mon retour sur Docker, après une présentation du projet publié hier.

Pour ma part, j’en ai entendu parler en janvier 2014, lors de l’appel aux conférenciers de Devoxx France 2014. Nous avons reçu plus d’une dizaine de propositions de sujets sur Docker. Docker est un phénomène à lui tout seul. C’est l’un des projets open-source de 2013 qui a fait le plus de buzz. J’ai ensuite lu et testé grâce aux articles de David Gageot sur son blog « Java Bien« .

Docker peut s’installer aujourd’hui sur Linux, mais aussi sur Mac OS X et Microsoft Windows, grâce au projet boot2docker, qui vous propose une petite image avec 1Gb de mémoire, souvent suffisante pour des petites applications.

Voyons comment installer Docker et boot2docker sur Mac. Pour cela, il faudra installer XCode, homebrew, virtualbox et enfin boot2docker. Bonne nouvelle : tout cela ne prend pas plus de 10mn.

Installer XCode

Installez XCode via l’AppStore. Ceci vous permettra d’avoir la partie Command Tools avec entre autre, make et gcc, dont nous aurons besoin tout à l’heure. L’installation de XCode est différente selon les versions de Mac OS X.

Installer Homebrew

Homebrew est un gestionnaire de paquets pour Mac OS. Il vous permet d’installer rapidement les outils les plus populaires comme git ou curl par exemple. Pour l’installation, il faudra cependant vous assurer que ruby est installé, ce qui est le cas sur les dernières versions de Mac OS X par défaut.

Ouvrez un terminal et exécutez cette commande :

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Une fois que brew est installé, vous pouvez alors vérifier son fonctionnement

brew 

Vérifiez au passage si votre système est prêt à recevoir les formules, en utilisant la commande doctor

brew doctor
...
...
Run `brew missing` for more details.

Si vous souhaitez mettre à jour votre version de brew, vous pouvez aussi utiliser la commande update :

brew update

Installer boot2docker avec Homebrew

Je vous le déconseille (juillet 2014). La version de boot2docker proposée par défaut via Homebrew est la version 1.1.1, qui sera incompatible avec votre installation de docker.

Vous allez vous retrouver avec un client (la commande docker sur votre mac) qui sera plus récente que le serveur (docker sur votre VM, dans boot2docker).

nicolas@macbook :~> docker version
Client version: 1.1.1
Client API version: 1.13
Go version (client): go1.3
Git commit (client): dc62f3c
2014/07/14 17:15:31 Error response from daemon: client and server don't have same version (client : 1.13, server: 1.10)

Si vous êtes dans cette situation, il faut alors mettre à jour soit le client, soit boot2docker.

Mettre à jour boot2docker

La commande « download » permet de récupérer la dernière version de boot2docker :

nicolas@macbook :~> boot2docker download
2014/07/14 17:21:05 Downloading boot2docker ISO image...
2014/07/14 17:21:06 Latest release is v1.1.1
2014/07/14 17:23:28 Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.1.1/boot2docker.iso
	to /Users/nicolas/.boot2docker/boot2docker.iso
nicolas@macbook :~> boot2docker version
Client version: v1.1.1
Git commit: 8dd1935

Attention, lorsque vous mettez à jour boot2docker, il faut aussi effacer et recréer votre image sur VirtualBox. Si vous ne faites pas cela, vous aurez ce type de message d’erreur:

nicolas@macbook :~> docker run -d -p 43000:80 tutum/wordpress
2014/07/14 19:53:49 Post http://localhost:4243/v1.13/containers/create: EOF

Il faut donc effacer et réinitialiser votre image :

nicolas@macbook :~> boot2docker delete
nicolas@macbook :~> boot2docker init
2014/07/14 19:56:25 Creating VM boot2docker-vm...
2014/07/14 19:56:26 Apply interim patch to VM boot2docker-vm (https://www.virtualbox.org/ticket/12748)
2014/07/14 19:56:26 Setting NIC #1 to use NAT network...
2014/07/14 19:56:26 Port forwarding [ssh] tcp://127.0.0.1:2022 --> :22
2014/07/14 19:56:26 Port forwarding [docker] tcp://127.0.0.1:2375 --> :2375
2014/07/14 19:56:26 Setting NIC #2 to use host-only network "vboxnet0"...
2014/07/14 19:56:26 Setting VM storage...
2014/07/14 19:56:31 Done. Type `boot2docker up` to start the VM.
nicolas@macbook :~> boot2docker up
2014/07/14 19:56:36 Waiting for VM to be started...
..........
2014/07/14 19:57:06 Started.
2014/07/14 19:57:06 To connect the Docker client to the Docker daemon, please set:
2014/07/14 19:57:06     export DOCKER_HOST=tcp://192.168.59.103:2375

Enfin pour vérifier que client comme serveur sont à jour :

nicolas@macbook :~> export DOCKER_HOST=tcp://192.168.59.103:2375
nicolas@macbook :~> docker version
Client version: 1.1.1
Client API version: 1.13
Go version (client): go1.3
Git commit (client): dc62f3c
Server version: 1.1.1
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): bd609d2

Installer docmac (alternatif si l’installation via Homebrew ne fonctionne pas)

Note : ce qui suit ci-dessous a été écrit avant qu’il n’existe une formule homebrew pour boot2docker

Je fais le choix de passer par l’installation de docker via le projet docmac. Celui-ci va installer VirtualBox, une VM pour avoir un linux, puis boot2docker, un linux très léger pour faire fonctionner ensuite le conteneur Docker. Vos conteneurs dockers tourneront donc sur Linux, dans une VM, sur votre Mac 🙂

Ouvrez un terminal puis exécutez la commande suivante :

curl -L https://raw.github.com/thlorenz/docmac/master/bin/docmac.sh | sh

Si curl n’est pas installé, vous pouvez l’installer avec « brew install curl »

Une fois l’installation terminée, vous verrez ceci dans votre terminal :

...
Forwarding default docker ports (49000..49900) on boot2docker-vm (this may take a while, so be patient) 
...
Add "export DOCKER_HOST=tcp://localhost:4243" to your ~/.bashrc"
Run "boot2docker up" to start docker vm
Run "boot2docker" to see all commands
Read boot2docker docs at https://github.com/boot2docker/boot2docker for more information
...

Terminez votre installation en exécutant boot2docker init, afin de créer une VM sur VirtualBox

nicolas@macbook :~> boot2docker init
...

Utilisation de docker

Tout d’abord, démarrons boot2docker :

nicolas@macbook :~> boot2docker up
[2014-05-05 15:53:09] Starting boot2docker-vm...
[2014-05-05 15:53:29] Started.

Nous pouvons maintenant lancer une commande dans notre conteneur, par exemple un bash. J’exécute la commande docker en mode interactif (-i) en demandant un terminal tty (-t), la commande bash sera l’interpréteur demandé. Pour mon test, j’utilise un conteneur ubuntu. Si Docker n’a pas en local ce conteneur, il va alors le télécharger et l’installer automatiquement :

nicolas@macbook :~> docker run -i -t ubuntu /bin/bash
root@40979a94d8d9:/# exit
exit
nicolas@macbook :~> 
...

Ok, et si je veux un Linux avec Apache+PHP+MySQL (LAMP) en 2mn, top chrono ?

Pour vous montrer le principe de docker, prenons un cas simple : vous avez besoin d’un serveur LAMP (Linux + Apache2 + PHP5 + MySQL) correctement configuré, afin d’y installer un blog WordPress. Notez qu’il existe des conteneurs WordPress, mais pour l’instant, nous allons voir comment faire avec un conteneur prêt à l’emploi.

Je vais utiliser le conteneur créé par Tutum. En quelques mots, Tutum est une jeune startup, récemment relocalisée à New-York, qui propose de l’hébergement et du déploiement de conteneurs Docker dans le Cloud. C’est ni du PaaS, ni de l’IaaS… c’est du CaaS (Container as a Service). Stop virtualizing, start containerizing…

nicolas@macbook :~> docker run -d -p 49000:80 -p 49001:3306 tutum/lamp
Unable to find image 'tutum/lamp' locally
Pulling repository tutum/lamp
433d5cbf42e2: Pulling dependent layers 
511136ea3c5a: Download complete 
ef519c9ee91a: Download complete 
07302703becc: Download complete 
cf8dc907452c: Download complete 
a7cf8ae4e998: Download complete 
be0da5e20357: Download complete 
4f96aeb75db6: Downloading [=============================>                     ] 54.41 MB/92.65 MB 2m9s

Le premier download est un peu long, mais ensuite, une fois que le conteneur est prêt, le démarrage est instantané.
Il est important de bien comprendre aussi la redirection des ports TCP. Par défaut, boot2docker configure automatiquement une redirection des ports 49000 à 49500 vers votre machine hôte (ici mon Mac) afin que les ports utilisées par Docker, soient accessibles sur votre hôte. Vous pouvez aussi faire un tunnel ssh, mais avec beaucoup d’images docker, cela devient trop lourd. Je préfère utiliser cette petite astuce.

Pour mon exemple, Apache écoute par défaut sur le port 80, et MySQL sur le port 3306. Oui, mais ça, c’est dans le conteneur. Il faut donc indiquer à docker que vous souhaitez faire suivre le port 80 du conteneur, vers le port 49000 de votre VM, boot2docker avec VirtualBox. Vu qu’ensuite, boot2docker a déjà configuré la redirection des ports vers votre machine hôte… vous pourrez avoir accès donc au serveur web, à partir du navigateur de votre machine hôte.

Là, vous n’avez rien compris… c’est normal.

Un beau dessin vous résume tout ceci :

Si tout se déroule correctement, vous pourrez alors lancer un navigateur et vérifier que http://localhost:49000/ sur votre Mac, et que la page de bienvenue de Tutum s’affiche.

C’est tout pour aujourd’hui. On parlera ensuite Dockerfile et industrialisation.

Références
– Les graphiques sont dessinés avec LucidChart.
– Documentation sur les redirections de Port avec boot2docker
– Docker, why should I care ?

0 no like

Articles similaires:

Default ThumbnailDocker, un outil simple et génial Environnement de développement ElasticSearch 2.4 avec Docker Default ThumbnailDevoxx 2014 Default ThumbnailLog4J etait capable de recharger un fichier de conf XML automatiquement
  • fabszn 5 mai 2014 at 23 h 42 min

    C’est l’article qui me manquait pour raccrocher les wagons et comprendre les tenants et les aboutissants!!

    Merci Nicolas!

  • ehsavoie 6 mai 2014 at 9 h 59 min

    Installer docker c’est beaucoup plus simple si on utilise un vrai OS libre :o)
    $ sudo apt-get update
    $ sudo apt-get install docker.io
    $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

    To verify that everything has worked as expected:
    $ sudo docker run -i -t ubuntu /bin/bash

    et voilà …
    Mais bon je reconnais qu’il n’y a pas de quoi écrire un article de blog …

    PS : désolé mais je n’ai pas pu attendre vendredi

Derniers articles

  • L’instant T où tu poses ta dém…

    Retour d’expérience sur la démission et le moment où vous devez quitter une entreprise.

    6 likes

    24 octobre, 2024
  • The « Robinson » projection – comprendre son système d’information

    Nous sommes en juillet 2022 chez Doctolib. Je travaille sur un projet

    5 likes

    22 octobre, 2024
  • Réussir son démarrage comme Staff/Principal Engineer dans une nouvelle entreprise

    Je prépare une présentation avec mon collègue Théotime pour la conférence Cloud

    3 likes

    6 octobre, 2024

Mots clés

Apple (32) Architecture (14) Big Data (5) Conference (8) Devoxx (55) Dev Web (37) Doctolib (2) geekevent (1) groovy (2) Innoteria (11) Java (517) Linux (10) Non classé (15) Perso (266) Recrutement (2) Scala (30) scrum (43) Société (3) Staff Engineer (5) Startup (21) Web 2.0 (67)

Le Touilleur Express

Blog par Nicolas Martignole

Contactez-moi : nicolas@touilleur-express.fr

Suivez-moi sur X (Twitter) : @nmartignole

Copyright© 2008 - 2024 Nicolas Martignole | Tous droits réservés
  • A propos de l’auteur
  • A propos du Touilleur Express
  • Reset Password

Le Touilleur Express