Comment déployer Docker ?

4 mai 2017/Yahya Al Dhuraibi

La conteneurisation est une technique de virtualisation qui permet à plusieurs processus, appelés conteneurs, de fonctionner sur une machine hôte sans interférences. Les conteneurs partagent un système d'exploitation, ils sont plus légers et démarrent plus rapidement que des machines virtuelles.

Dans ce tutoriel, je vous explique les principes de base pour installer Docker :

  • Les commandes pour gérer le cycle de vie ;
  • les images et leurs processsus de compilation ;
  • le dépannage et les outils de monitoring ;
  • le lancement d'une application avec Docker Compose.

N'hésitez pas à revoir l'article sur Docker & son ecosystème.

#1 La procédure d'installation

  • La première étape consiste à préparer la machine sur laquelle docker va être installé

dockera.png

  • Ensuite, on met à jour le dépot dans la configuration de yum en créant un docker.repo vim /etc/yum.repos.d/docker.repo

update-repository-docker.png

  • Avec la commande yum install docker-engine la dernière version du paquetage Docker est installée

docker2.png

  • Ensuite, nous allons activer et démarrer le Docker Daemon. Pour rappel, il estresponsable de la création, du démarrage et du monitoring des conteneurs, mais aussi de la construction et du stockage des images.

start-docker.png

  •  On procéde aux étapes de vérifications : La commande  systemctl statut docker.service  permet vérifier le statut du service Docker.

verifier-statut-docker-service.png

  • Avec l'option  -v  on vérifie la version d'installation de Docker.

verifier-version-install-docker-3.png

Le Docker Info révèle beaucoup d'informations sur le Docker Engine comme le storage driver, le réseau, Cgroups, les informations sur la machine hôte sur laquelle est démarrée Docker Engine.

Docker supporte beaucoup de storage drivers comme : devicemapper, aufs, btrfs, overlay, etc.

Chacun de ces drivers dispose de sa propre architecture et de caractéristiques spécifiques. Nous aborderons le sujet des Storage driver dans un autre article. 

Voici une copie d'écran du Docker Info :

verifier-version-install-docker-2.png

#2 La manipulation des conteneurs et des images

La commande docker --help permet d'afficher toutes les commandes et informations supportées par la version de Docker. 

Depuis la commande  docker pull , on pousse une image depuis le Docker Hub. Une image peut être aussi poussée depuis un repository privé.

pousser-image-docker-hub.png

La commande docker images permet de lister toutes les images qui sont installées  localement. Elle permet d'afficher le nom, l'id et la taille de chaque image.

liste-image-docker.png

Pour supprimer une image à partir de son nom ou de son id, il suffit d'utiliser la commande  docker rmi suivie du nom de l'image (ici nginx).

supprimer-image-docker.png

Avant de continuer la création de conteneurs, voici un schéma qui illustre son cycle de vie :

cycle-de-vie-docker.png

docker-file3.png

  •  --rm permet de supprimer automatiquement le conteneur quand il existe. Il est important de sauvegarder l'espace et d'effacer les conteneurs recyclés.
  •  --it permet de dire à Docker d'allouer un pseudo tty et de mettre le conteneur dans un mode interactive, c'est pourquoi nous devons rentrer dans le conteneur immédiaement une fois crée.
  •  --name permet de spécifier le nom du conteneur.
  • nginx correspond au nom de l'image du conteneur.
  •  /bin/bash  permet de démarrer depuis le mode interactive et d'accéder au prompt du conteneur.
  •  -p or -publish <host port> : <container port> permet de publier un port du conteneur à l'hôte.

Depuis votre navigateur, vous pouvez vérifier si le conteneur est correctement démarré et accessible depuis l'extérieur. bienvenue-nginx-docker.png

 -Les commandes suivantes permettent de stopper le conteneur et de le supprimer.

vérifier-stop-démarrer-docker.png

Le conteneur peut être démarré en tâche de fond, c'est qu'on appelle le mode détaché,  comme on peut le voir ci-dessous. L'option  -d  autorise le conteneur à tourner dans un mode détaché.

Lorsque le conteneur n'est pas dans ce mode, on dit qu'il tourne au premier plan (foreground mode) : Il s'agit du mode par défaut quand l'option -d n'est pas utilisé.

Dans ce mode, la console qui est utilisée pour executer docker est automatiquement rattachée a standard input, output et error. Ce qui signifie que votre console est liée au process du conteneurs.

attach-docker-process.png

- Docker exec est utilisé pour lancer des commandes dans le conteneur qui tourne en mode détaché.

docker-exe.png

3# Créer et modifier des images

  • Commit : Modifier et créer une nouvelle image à partir d'une autre image de base, c'est le principe utilisé par docker commit. Vous créez un conteneur, vous le modifiez , puis vous appliquez ces changements à une nouvelle image.
  • Dockerfile : L'utilisation de la commande docker commit n'est pas recommandée.  L'utilisation d'un fichier source Dockerfile et le build command sont recommandés pour construire des images. Ainsi, le Dockerfile utilise un nom de domaine spécifique (Domain Specific Language) avec les instructions pour la construction des images Docker. Quelques exemples ci-dessous pour la création et le montage d'images a partir de Dockerfile

dockerfile-1.png

dockerfile-2.png

docker-file3.png

En sortie depuis votre navigateur, voici ce que vous visualisez :

docker-file4'.png

4# Dépannage et monitoring des conteneurs Docker

Quelques commandes basiques et autres outils pour verifier et suivre les conteneurs.

- docker ps : Cette commande nous montre les conteneurs qui tournent par défaut. On y retrouve des informations comme le nom, l'identifiant, la date de création, le statut, les ports, etc. On y retrouve aussi tous les conteneurs, incluant ceux qui ne tournent pas actuellement.

docker-ps.png

- docker ps -a nous montre tous les conteneurs, incluant ceux qui ne tournent pas actuellement. Cette commande supporte flitering flag (-f ou --filter).

Les filtres actuellement supportés sont :

  • id (id du conteneur)
  • label (label=<key> ou label=<key>=<value>)
  • nom (nom du conteneur)
  • exited (int - the code of exited conteneurs).

Exemple, docker ps -a --filter 'exited=0'

- docker logs : Cette commande permet de voir les logs de Docker conteneur. Certaines options associées à la commande, telles que --timestamps ou --follow permettent de streamer la sortie depuis le conteneur STDOUT et STDERR.

dockerlogs.png

- docker exec : Il s'agit d'une commande très importante pour éxécuter des commandes sur un conteneur existant. Pour accéder à des conteneurs fonctionnant en mode détaché, exec -it crée une session Bash dans le conteneur pour y accéder. Sachez qu'il est impossible d'accéder à ces conteneurs en utilisant docker attach.

docker-exe.png

- docker stats : Cette commande renvoie des informations streamées en direct (informations sur l'utilisation des ressources) pour les conteneurs actifs. Pour limiter les données sur un ou plusieurs conteneurs spécifiques, il faut indiquer une liste de noms de conteneurs ou d'ID en utilisant l'espace comme séparateur. Il est possible de spécifier des conteneurs à l'arrêt, mais ceux-ci ne renvoient pas de données.

dockerstat1.png

dockerstat2.png

dockerstat3.png

dockerstat4.png

- Google cAdvisor (conteneur Advisor): Fournit aux utilisateurs de conteneurs une bonne compréhension sur l'utilisation des ressources et des performances générales sur les conteneurs en cours d'utilisation. Il s'agit d'un processus daemon qui collecte, aggrege, opère et exporte les informations des conteneurs en cours.

google-cadvisor-1.png

 

Depuis l'interface web, il est possible de suivre l'utilisation des ressources par conteneur. Voici un exemple ci-dessous sur l'utilisation de la ressource (CPU, Mémoire, Réseau et I/O) pour un conteneur nginx

utilisation-ressource-docker.png

- Datadog: est un autre outil de monitoring de conteneur . Il fournit une interface configurable et sophistiquée. Toutefois, ces options avancées de gestion ne sont pas gratuites.

5# Simplifier le lancement d'une application avec Docker Compose

Docker Compose est un outil qui permet de définir et démarrer plusieurs conteneurs qui composent une seule et même application. Ces applications peuvent être précisées dans un fichier YAML où toutes les options utilisées dans Docker run sont maintenant définies.

Docker Compose autorise également à gérer l'application comme une entité à part entière entière plutôt que de gérer les conteneurs de manière individuelle. Cela permet depuis une commande unique de créer et démarrer tous les services depuis votre configuration.

Plusieurs manières d'installer Docker Compose, l'utilisation de pip python pour l'installer :

DockerCompose1.png

DockerCompose2.png

Ci-dessous, un exemple de fichier YAML configuré pour installer l'application GrayLog qui est composée de trois applications :

  • Graylog server pour recevoir et traiter les logs
  • MongoDB pour stocker les metadata
  • ElasticSearch pour stocker les logs

DockerCompose3.png

Ensuite, le fichier de configuration va installer 3 conteneurs :

  • 1 conteneur pour graylog
  • 1 conteneur pour MongoDB
  • 1 conteneur pour ElasticSearch

Ces 3 conteneurs seront gérés depuis une commande unique.

Pour lancer les conteneurs qui constituent cette application, il suffit d'utiliser la commande docker-compose up, l'option -d peut être ajoutée si l'on souhaite que cette application fonctionne en mode détaché.

DockerCompose4.png

La commande Docker-compose ps permet de vérifier les conteneurs en cours.

DockerCompose5.png

Par la suite, vous pouvez vérifier depuis l'interface Web de Graylog, que celui-ci est bien fonctionnel.

DockerCompose6.png

 Pour stopper l'application et le cluster de conteneurs avec docker-compose stop

DockerCompose7.png

Enfin, pour supprimer les conteneurs et vérifier s'ils existent encore avec les commandes docker-compose down et docker-compose ps

DockerCompose8.png

Vous savez à présent déployer des conteneurs Docker.

N'hésitez pas à vous abonner à notre newsletter pour être informés des prochains articles sur Docker.

Découvrez pourquoi iDVROOM a choisi un cloud privé Scalair

Yahya Al Dhuraibi
À propos de Yahya Al Dhuraibi : Yahya est Ingénieur de Recherche, il axe actuellement son travail sur l’élasticité du cloud au sein de Scalair et dans les laboratoires de l’Inria, où il prépare son doctorat. Il a obtenu son Bachelor en Sciences de l’informatique à l’université d’Aden (Yémen), puis un master Architecture de Systèmes en Réseaux à l’université d’Evry (France).

À lire ensuite

L’engagement de disponibilité : un enjeu majeur pour l’entreprise

Le Cloud offre de réelles opportunités de croissance aux entreprises. Mais les interruptions de service peuvent...

7 acronymes à connaître lorsqu'on parle de disponibilité informatique

Lorsqu'on parle de disponibilité, on est souvent confronté à des acronymes dont les significations sont des...

5 paramètres à considérer pour améliorer la disponibilité de votre système d'information

Toutes les entreprises cherchent à améliorer la disponibilité de leur système d'information. Pour en assurer et...