Docker : Build, Run &Compose (Partie 1)

docker-jenkins-artifactory-sonarqube

 

Dans cette série d'articles, nous allons démystifier docker (v 1.10.3 retenue et testée en particulier sous Windows). En attendant le support natif de docker dans Windows, nous présentons ici docker sous Windows reposant sur VirtualBox.

Nous nous attardons pas sur les concepts car, il me semble, que l'on en trouve suffisamment à ce propos sur le net. Ce que l'on trouve moins, c'est un tutoriel clair et complet sur docker pour Windows qui présente toutes les étapes nécessaires à la prise en main sans connaissance préalable.

Nous avons donc tenté de rassembler, dans cette série d'articles, l'ensemble des commandes utiles pour appréhender le monde docker.

Docker c'est quoi?

Docker est un container ou isolateur reposant sur des systèmes LXC afin de limiter et cloisonner l'utilisation des ressources (proc,mémoire, disque..). Docker est une plateforme composée de deux éléments essentiels: l'Engine et le Hub.

  • L'engine sert à faire tourner les conteneurs (isolateurs).
  • Le Hub offre plein de services dont principalement l'hébergement des images docker (voir plus loin).

Docker pourquoi?

Le but de docker est de permettre de déployer absolument tout (phrase extraite et adaptée la conférence de  J. Petazzoni) de manière fiable et consistante.

Absolument tout (webapps, backends, bdd,..) peut être déployé dans un container docker.

Tout! N'importe où (tout ce qui est possible de déployer sur un serveur linux. Pour Windows ce n'est pas encore du natif pour le moment).

SOMMAIRE

Dans la première partie, nous commençons par chercher une image docker, la récupérer (pull) puis exécuter le container docker.

Dans la seconde partie nous attaquons les commandes avancées de docker : Entre autres, interagir avec un container docker, créer notre propre image pour la pousser (push) dans le hub.docker public.

Nous enchaînons, dans la troisième partie, par démystifier la commande docker-compose permettant, comme son nom le laisse deviner, de composer plusieurs images.

Nous poursuivons par la réalisation d'un docker-compose pour l'intégration continue avec Jenkins, Sonar, Nexus, Selenium!

Beau programme, non?

Pré-requis:

a) Installer GIT: https://git-scm.com/. On désignera par [GIT_HOME] son répertoire d'instal.
b) Installer Docker Toolbox: https://www.docker.com/products/docker-toolbox pour Windows. On note le répertoire d'instal [DOCKERTOOLBOX_HOME]

c) Ajouter dans le path la commande bash.exe dans [Git_HOME]\bin.

Nous adoptons ces règles pour faciliter le suivi de cette présentation.
Lorsqu’une commande est pour linux, elle est précédée de $ (ou # si autre shell ou shell fils).

 

COMMANDES WINDOWS

Une fois Docker Toolbox installé, un raccourci nommé "Docker Quickstart Terminal" s'affiche sur le bureau. Si ce n'est pas le cas, ouvrez une console DOS (oui console DOS!) et tapez la commande suivante :

cd [DOCKERTOOLBOX_HOME] && bash.exe --login -i start.sh

Attention c'est bien start.sh (ne me demandez pas pourquoi:-))

L'écran qui s'affiche est une nouvelle console docker. Commençons simplement par taper la cmd:

$ pwd

pour voir le chemin qui pointe sur un montage du disque Windows.

NOTE. Il existe un outil graphique nommé Kitematic (en version alpha) permettant de faire pas mal de choses sans saisir les commandes.

POUR MIEUX APPRÉHENDER LES NOTIONS DOCKER, nous terminons cette première partie avec ce scénario qui consiste à :

  • Procurer une première image depuis le hub docker (au passage, nous prenons une image bien notée! La mienne pourquoi pas?),
  • Lancer le container docker,
  • Monter un disque au lancement du container,
  • Interagir avec le container afin d'exécuter notre application java,
  • Configurer le container pour qu'il exécute automatiquement notre application au lancement,
  • Ouvrir à l'écoute (avec mapping) un port spécifique du container pour notre application web,
  • Saisir dans le browser de la machine hôte l'url de notre application web.

Mais avant cela, commençons simplement.

PREMIERS PAS AVEC DOCKER

Vérifions l'installation de docker avec cette commande à saisir dans la console docker via "Docker Quickstart terminal" ou via la console comme indiqué précédemment.

Docker run (first one)

 

$ docker run hello-world

 

Docker info

Un aperçu global de l'état de docker (nb images, nb containers lancés, stoppés,...) peut être obtenu grâce à la cmd :

 

$ docker info

 

Lister les images docker

La commande suivante liste les images docker sur la machine hôte:
$ docker images

Elle affiche, par exemple, ceci :

REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
achine/jenkins              v1.0.0              834022f2f85c        2 hours ago         729.9 MB
hello-world                 latest              690ed74de00f        5 months ago        960 B
java                        openjdk-8u45-jdk    6c8bf95a6d6c        8 months ago        816.4 MB

En principe à ce stade, vous ne devrez pas avoir d'images!

Nous allons faire récupérer (pull) notre première image docker et faire le "build" dans les sections ci-dessous.
Pour se faire, nous partons du hub docker (public):  https://hub.docker.com/

Une première image docker

Nous procédons en deux étapes: rechercher une image bien notée puis la récupérer.

  1. Recherche$ docker search --stars 1 achine/testLa cmd affiche ceci :NAME                   DESCRIPTION                                                                  STARS     OFFICIAL   AUTOMATED
    odarriba/timemachine   Lastest Netatalk with configurable user/pa...   15                                      [OK]
    achine/test            image docker with spring-boot & java 8 app...              1
    Vous pouvez découvrir les détails de cette commande en tapant : docker search --help
  2. Pull image$ docker pull achine/testLa commande récupère l'image (ou simplement les layers nécessaires pour construire l'image).

Vous pouvez lancer la cmd suivante pour inspecter l'image docker.
$ docker inspect achine/test

RUN DOCKER (premier pas)

Voici la commande pour lancer le container docker à partir de l'image 'achine/test'

$ docker run achine/test

Elle affiche cette capture:

docker_achineTEST_run

Afficher les id des containers lancés

$ docker ps

Elle affiche cette capture :

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                NAMES
61ac3d7ff5c6        achine/test:latest                       ....                                                                                                                                 focused_snyder

NOTE. Vous pouvez également utiliser l'option -a comme suit:

$ docker ps -a

Le container_id affiché peut être également utilisé avec docker stop.

Arrêter un container docker

$ docker stop [container_id]

Par exemple,

$ docker stop 61ac3d7ff5c6

 

Pour toute la suite, le focus est mis sur comment créer notre propre image docker, l'exécuter, l'enrichir en interagissant avec.
Et aussi comment ajouter notre programme java qui sera exécuté au lancement du container docker.

Attachez vos ceintures ça va vibrer [docker]!

La clé de compréhension de la création de notre propre image est le fichier Dockerfile (attention D majuscule).

Nous aborderons cette notion dans la prochaine partie bientôt.

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.