Docker Engine : Guide Complet

Afin d’expliquer le docker engine, nous allons dans un premier temps expliquer brièvement les notions de container et de docker ainsi que leur utilisation. Puis nous entrerons, dans une seconde phase, dans l’utilisation de Docker compose, du Docker Swarm et enfin de Docker Stack.

Container

Un container est un élément contenant une structure voire un service léger et pouvant s’exécuter simplement par l’intermédiaire d’un docker.

Docker

Docker est un système permettant de gérer et d’exécuter les services présent au sein d’un container de manière légère grace à une sous couche jouant un rôle d’intermédiaire entre l’Operating System (OS) et le ou les containers avec si besoin une certaine opacité entre les services désirés si nécessaire.

Docker permet de gérer et de résoudre les problèmes de dépendances. En particulier de versions de machines ou d’OS.

Ainsi une multitude d’images docker peuvent s’exécuter sur une même machine grâce à un même noyau en utilisant les ressources nécessaires de manière plus légère qu’une solution avec différents systèmes d’exploitations complets dans différentes machines virtuelles s’exécutant sur une seul machine physique hôte beaucoup plus gourmande en ressource pour un même résultat recherché. Mais l’intérêt principal demeure dans le fait de permettre un déploiement rapide multiplateforme et surtout entre les machines de test et ceux de déploiement.

Le système docker nécessite la creation d’un compte afin d’avoir accès à l’ensemble des images disponibles.

Mon premier Docker

Afin de pouvoir lancer et utiliser notre premier Docker nous allons procéder à sa configuration. Cette configuration se fait via le fichier Dockerfile.

C’est grâce à ce dernier que la compilation peut être effectuée via la commande build.

Le fichier Dockerfile s’écrit à l’aide de balises de la manière suivante:

  • FROM nom de l’image:version (ou « scratch » si propre image interne)
  • USER nom utilisateur effectuant les commandes
  • RUN lancement de tout type de commandes tel que l’ajout de package supplémentaires, compilation de code nécessaire, etc.
  • ADD ou COPY pour copier un élément dans le docker nécessaire à son fonctionnement. Cela peut par exemple être un script ou une image téléchargée hors ligne.
  • ENV pour définir des variables d’environnement nécessaires.
  • CMD commande lancer à chaque démarrage de l’image.
Exemple de Dockerfile simple
Exemple de Dockerfile plus élaboré

La compilation de l’image a lieu via :

docker build -t image_name .
# ou image_name est le nom de l image et . le repertoire courant

Commande pour lister l’ensemble des images :

docker images

Commande pour lister les images qui sont en cours d’exécution :

docker ps
Exemple d’utilisation de la commande docker images

Le lancement de l’image se fait via la commande :

docker run id_image ou --name nom_souhaite -P -d nom_image
Lancement de Nginx

 L’arrêt du container se fait via la commande :

docker stop id_image ou nom image

Suppression de l’image 

docker rm id_image

Accéder à la console du container du docker pour écrire une commande

docker exec -d image_du_container commande arguments[]

Docker Compose

Docker Compose est un système permettant d’exécuter en synergie si besoin est plusieurs containers simultanément avec un possible communication entre les services selon la configuration.

Description du processus d’utilisation de Docker Compose

Pour configurer le compose il faut écrire un fichier docker-compose.yml ou .yaml de la manière suivante :

Le fichier yml s’écrit sous la forme

docker-compose.yml d’un site nopcomerce avec site web relié à sa base de donnée

Pour lancer le compose la commande :

docker-compose up

lance le démarrage du compose pré-configuré effectué dans le répertoire courant ou alors il y a nécessité de préciser la localisation du yml via l’argument -f si nom spécifique et ou le cardinal de nombre de fichiers de configuration supérieur à 1.

Pour lister les docker-compose en cours d’execution la commande :

docker-compose ps

liste l’ensemble des compositions.

L’arrêt du compose spécifique se fait dans le répertoire du yaml via la commande :

docker-compose stop

La suppression de tous les containers d’un compose peut-être obtenue par :

docker-compose rm

Docker Hub

DockerHub est la manière la plus aisée de créer, gérer, partager et livrer aux équipes de développement des applications basées sur les conteneurs.

Il est assimilable à une sorte de github pour les images Docker.

Il est possible, soit de concevoir ses propres images privées, soit d’avoir accès à des images (certifiées ou non) dans lesquelles certains conteneurs sont déjà prêts à l’emploi.

Docker Swarm

Docker Swarm est l’orchestrateur de Docker, il s’active via la commande :

 docker swarm init

Ce composant permet entre autre de gérer l’attribution des ressources et le contrôle de clusters pour l’attribution de tâches.Ce mode donne la possibilité de créer des clusters de machines exécutants des conteneurs Docker, qui fonctionnent ensemble comme une seule machine. Ainsi il existe au moins un docker-machine leader et généralement plusieurs docker-machines workers par node qui communiquent entre eux pour que chaque leader puisse leur attribuer des tâches. Un node peut être perçu comme une machine physique ou virtuelle exécutant Docker Engine ou Docker machine.Il existe des nodes workers exécutant des taches et des services transmis par leur node manager, ces derniers sont la deuxième catégorie de nodes garant de la stabilité et de la performance du Swarm ainsi que des services que leur nodes workers exécutent. Swarm a pour intérêt premier l’exécution et la gestion au sein d’un mode distribué via un leader pour la gestion ,ainsi il permet la coordination des containeurs via l’affectation de taches spécifiques à chaque worker. Il permet egalement en plus de la gestion le suivie de l’état de chaque conteneurs au sein d’une grappe de serveurs et en cas de defaillance ou de ressource insuffisante de redistribuer le travail pour assurer la continuité ordonnée de l’ensemble du Docker Swarm dans un cluster.

L’ utilisation de Docker en mode «essaim» se rapproche des usages faits avec Kubernetes au niveau de la gestion de clusters de serveurs, cependant on peut l’assimiler à une version simplifiée du Kubernetes qui permet un déploiement plus rapide car cela nécessite une configuration moins sophistiquée. Ainsi il est possible de gérer un cluster de nœuds Docker de serveurs composés de paires Manager Workers, le tout fonctionnant comme un système virtuel unique. Par ailleurs grace à ce mode les mises à jour sur les applications sur les containers sont controlées par le Swarm.

Docker-Swarm permet donc de coordonner et d’ exploiter collectivement les ressources d’un grand nombre de machines comme par exemple une ferme de serveurs afin d’ exécuter des conteneurs Docker comme une seul et unique machine mais utilisant la synergie de ressources et de performance des différentes machines connectées aux noeuds du Swarm. 

Utilisation pratique de Docker Swarm

Pour commencer, création des dockers machines, les éléments de l’infrastructure. Cela peut être fait en réseau (en general) ou en local(pour les tests). Ci dessous par exemple Y est l’image que l’on souhaite faire tourner voire manager.

docker-machine create --engine-env 'DOCKER_OPTS="X"' --driver Y  leader1
docker-machine create --engine-env 'DOCKER_OPTS="X"' --driver Y worker1
docker-machine create --engine-env 'DOCKER_OPTS="X"' --driver Y worker2

S’informer sur l’adresse ip attribuée à une des machines docker :

docker-machine ip nom_acteur

S’informer sur les acteurs présents :

docker-machine ls

Connexion aux machines dockers fonctionnelles :

docker-machine ssh nom_acteur

Initialisation de l’essaim du docker swarm pour le manager :

docker swarm init
Résultat de docker swarm init

Initialisation pour les nodes travailleurs :

docker swarm init — advertise-addr ip_manager

Ajout d’un travail à un node via un token S fourni par le leader lors de son initialisation. Ainsi afin qu’un manager contrôle son node via plusieurs docker-machine worker, chacune d’entre elles doit se rattacher au leader du swarm via le remplissage du champs token, ce dernier étant généré par le leader lors de l’initialisation :

docker swarm join — token S ip_manager:port

Lister les swarm

docker node ls
Résultat de docker node ls

Quitter un swarm

docker swarm leave #si manager --force 

Docker Stack sur Swarm

Docker Stack permet d’utiliser une pile de conteneurs Docker, sans avoir à utiliser Docker Compose décrit plus haut. Cependant Docker Stack ne permet pas la compilation de nouvelles images depuis la pile de conteneurs contrairement à Docker Compose (ou ce sera dans ce cas un ensemble de services et non une pile).

Afin de configurer Docker Stack, il est nécessaire de:

  • Utiliser et configurer un Dockerfile comme plus haut dans un premier temps
  • Créer le fichier config.yaml de configuration avec une image docker déja existente ou compilé en local. Ci dessous un exemple de fichier yml:
version: 'X.Y'

services:
  nom_services:
    image: image_services
    ports:
      - "RRRR:TTTTT"

À présent nous sommes prêt pour le déploiement de l’application sur le swarm via :

docker stack deploy -c config.yaml nom_app

Pour lister les applications déjà présente dans la pile :

docker service ls

Retrait de l’application du stack:

docker stack rm demo

Laisser un commentaire

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

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