DockerLinux

Présentation – TP DOCKER (pour débutant)

Voici un petit tutoriel – TP vous permettant de découvrir le fabuleux monde de la conteneurisation via Docker.

En suivant cet article vous apprendrez :

– Qu’est-ce que DOCKER?
– Les définition des outils important dans le produit Docker
– La différence entre conteneurs et machines virtuelles
– L’installation de Docker sous Debian
– Un glossaire de commandes utiles
– Et nous terminerons par un petit TP simple mais sympathique

Vous pouvez télécharger le PDF ici

 

Qu’est-ce que DOCKER ?

Docker est un logiciel libre qui automatise le déploiement d’applications dans des conteneurs logiciels.

C’est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n’importe quelle machine.

Contrairement aux machines virtuelles traditionnelles, un conteneur Docker n’inclut pas de système d’exploitation fournies par l’infrastructure sous-jacente il va simplement utiliser un noyau Linux.

La technologie de conteneur de Docker peut être utilisée pour étendre des systèmes distribués de façon à ce qu’ils s’exécutent de manière autonome depuis une seule machine physique ou une seule instance par nœud.

 

Vue d’ensemble de l’application DOCKER :

Docker permet la mise en œuvre de conteneurs s’exécutant en isolation, via une API (interface utilisateur). Construit sur des capacités du noyau Linux (surtout les cgroups et espaces de nommage), un conteneur Docker, contrairement machines virtuelles traditionnelles, ne requiert aucun système d’exploitation séparé et n’en fournit aucun. Il s’appuie plutôt sur les fonctionnalités du noyau et utilise l’isolation de ressources (comme le processeur, la mémoire, les entrées et sorties et les connexions réseau) ainsi que des espaces de noms séparés pour isoler le système d’exploitation tel que vu par l’application. Docker accède aux capacités de virtualisation du noyau Linux, soit directement à travers la bibliothèque runc (disponible depuis Docker 0.9), soit indirectement via libcrt, LXC (Linux Containers) ou systemd-nspawn. Le systemd-nspawn est comme la commande chroot sur Linux mais en plus puissante. Il peut être utilisé pour rentrer une commande ou un OS dans un espace léger tel un conteneur. Il peut complètement virtualiser la hiérarchie des fichiers systèmes, comme l’arborescence des processus.)

Utiliser Docker pour créer et gérer des conteneurs peut simplifier la mise en œuvre de systèmes distribués en permettant à de multiples applications, tâches de fond et autres processus de s’exécuter de façon autonome sur une seule machine physique ou à travers de multiples machines isolées. Ceci permet de déployer des nœuds en tant que ressources sur besoin, fournissant ainsi une plateforme de déploiement de style PaaS :

 

Définitions importantes :

Conteneurs : Comme dit précédemment, un conteneur Docker n’a besoin d’aucun système d’exploitation séparé. Il se sert de fonctionnalités du noyau du système d’exploitation. Ainsi il utilise l’isolation de ressources. (CPU, mémoire, I/O, connexions réseau etc…).

Images : Une image Docker représente le système de fichiers sans les processus. Cette image contient ce que vous avez décidé d’installer (tel qu’une base de donnée (MySQL), Java, PHP, un script, etc…) mais en étant inactif. Elles sont créées à partir de fichiers de configuration « Dockerfiles ». Dockerfiles décrie exactement ce qui doit être installé sur le système, le conteneur est l’exécution d’une image.

Dockerfiles : C’est votre fichier source qui donne une image une fois qu’il est compilé. Il peut être inclus dans un autre Dockerfile et être à la base de plusieurs images différentes. Vous avez le choix d’utiliser des images officielles ou des images modifiées présentes sur le Docker Hub ( https://hub.docker.com/ ) ou, si vous le souhaitez, de personnaliser vos propres images en écrivant un Dockerfile.

Compose : C’est un outil qui permet de définir et exécuter des applications multi-conteneurs. Les conteneurs sont idéaux pour des applications pour de simple micro services. C’est pour cela qu’il est idéal de faire une interconnexion entre plusieurs conteneurs. L’exemple le plus parlant et celui d’un serveur web contenant les service php, mysql et nginx dans des containers différents.

Volumes : C’est le mécanisme le plus adapté pour la persistance des données qui sont générés et utilisées par les conteneurs de Docker. Les volumes de Docker ont différents avantages tels qu’une simplicité de sauvegarde ou de migration ou encore leurs gestions facilités grâce aux outils et commandes Docker.

Alpine Linux : Alpine Linux est une très simple distribution Linux et d’une faible taille (5MB seulement, un conteneur de 8MB est requis pour l’installation et 130MB de stockage sur votre disque). Cette distribution est fréquemment utilisée par les utilisateurs de Docker.

Swarm Mode : Le mode Swarm indique à Docker que vous exécuterez de nombreux containeurs Docker et que vous souhaitez coordonner les opérations entre eux. Le mode Essaim combine la possibilité de définir non seulement l’architecture de l’application, comme Composer, mais aussi de définir et de maintenir des niveaux de haute disponibilité, la mise à l’échelle, l’équilibrage de charge, etc. Avec toutes ces fonctionnalités, le mode Swarm est plus souvent utilisé dans les environnements de production que Compose.

 

La différence entre conteneurs et machines virtuelles :

Après avoir découvert ce qu’est DOCKER, on peut se demander quelle est la différence entre les conteneurs et les machines virtuelles, car à première vue, cela se ressemble fortement. Les machines virtuelles et les conteneurs diffèrent de plusieurs façons. La principale différence est liée à l’architecture logiciel de ceux-ci. La machine virtuelle, elle est composée d’un OS host sur lequel est exécuter un hyperviseur comme Hyper-V sous Windows ou KVM sous Linux. L’hyperviseur lui va virtualiser le « Gest OS » ou le système d’exploitation invité tout en virtualisant également la matériel et périphérique présent sur une station de travail classique comme par exemple la RAM, le CPU…

Le container lui fonctionne toujours sur un OS host mais utilise le moteur Docker (Docker Engine) pour interagir et utilisé les fonctionnalités du noyau linux, les librairie et bibliothèque sont partager et donc utilisé par les différents containers hébergeant les applications.

Les containers sont donc plus polyvalent et performant que des VMs. Les containers Docker peuvent démarrer en quelques secondes et s’arrêter aussi rapidement.

 

Installation de Docker sous Debian 9 :

Pour installer Docker CE, vous avez besoin de la version 64 bits d’une de ces versions Debian ou Raspbian:

  • Buster 10 (Docker CE 17.11 Edge uniquement)
  • Stretch 9 (stable) / Raspbian Stretch
  • Jessie 8 (LTS) / Raspbian Jessie
  • Wheezy 7.7 (LTS)

Si vous êtes déjà en possession d’une version de Docker (docker ou docker-engine), vous pouvez la désinstaller.

apt-get remove docker docker-engine docker.io

Des paquets sont recuis pour l’installation de Docker.

apt-get install apt-transport-https dirmngr

Une fois fais, il faut modifier le fichier /etc/apt/sources.list pour y aouté les sources qui vont être interroger pour le téléchargement de Docker.

echo ‘deb https://apt.dockerproject.org/repo debian-stretch main’ >> /etc/apt/sources.list

Maintenant il faut obtenir la signature du référentiel du docker et l’index du package mis à jour

apt-key adv –keyserver hkp://p80.pool.sks-keyservers.net:80 –recv-keys 58118E89F3A912897C070ADBF76221572C52609D

On met à jour la liste des dépôts.

apt-get update

On peut maintenant  installer Docker via la commande suivante.

apt-get install docker-ce

 

Si vous rencontrez des problèmes :

  • https could not be found :

The method driver /usr/lib/apt/methods/https could not be found.

Installer le paquet apt-transport-https

apt-get install apt-transport-https
  • gpg: failed to start the dirmngr

gpg: failed to start the dirmngr ‘/usr/bin/dirmngr’: No such file or directory

Installer le paquet suivant

apt-get install dirmngr

 

Les principales commandes utilisées sous Docker :

  • Avoir des informations sur votre configuration de Docker
docker info

Exemple de résultat :

Containers: 1

Running: 0

Paused: 0

Stopped: 1

Images: 1

  • Télécharger une image docker du Docker Hub (Il s’agit d’un annuaire officiel contaminant une liste impressionnante d’image Docker. Téléchargement de l’image Docker hello-world.
docker pull hello-world
  • Démarrer un container et un lancer un shell bash.
docker run -ti nom_de_image bash
  • Voir la liste des images Docker.
docker image ls
  • Supprimer une image
docker rmi id_image
  • Lancer un container :
docker run id_containeur
  • Arrêter un container
docker stop id_containeur
  • Démarrer un container arrêté :
docker start id_containeur
  • Supprimer un container (après l’avoir stoppé bien sûr) :
docker rm id_containeur
  • Liste des containers actifs :
docker ps id_containeur
  • Liste des containers actifs et inactifs et connaitre leur ID :
docker ps -a
  • Arrêter tous les containers
docker stop $(docker  ps -a -q)
  • Démarrer tous les containers
docker start $(docker ps -a -q)

 

Création d’une image Docker Ngnix :

Le but de ce TP sera d’installer le conteneur Nginx et de savoir l’utiliser.

Après avoir installé Docker ainsi que le conteneur de test nommé « hello-world ». Nous allons nous intéresser à l’installation du conteneur de nginx.

Mais NGINX c’est quoi ? :

Nginx est un logiciel open-source de serveur WEB (ou http). Son utilisation principale est de le configurer tel un serveur WEB. Il est disponible sur la majorité des systèmes d’exploitation tel que Unix, Windows ou MacOS.

Installation de NGINX :

Nous allons d’abord voir si l’image NGINX existe. Pour cela, nous allons faire la commande :

docker search nginx

Normalement vous devez avoir la liste des images comportant nginx, il y a une officielle, puis des autres images modifiées présentes sur le DockerHUB.

Maintenant nous allons télécharger l’image officiel de nginx.

docker pull nginx

Ceci fait, il faut passer à l’installation du conteneur.

docker run –name docker-nginx –p 80:80 nginx

Ici nous avons précisé le port d’écoute du conteneur nginx (80).

Maintenant, il faut voir si le conteneur est lancer.

docker ps –a

Cela affiche les conteneurs en cours d’utilisation.

(OPTIONNEL)

Si votre conteneur nginx n’est pas lancé, alors vous pouvez le lancer via la commande :

docker start <id-du-conteneur>

Pour finir allez dans un navigateur web et tapez : « ip_debian:80 » dans la barre d’URL et voilà ! Vous avez votre conteneur Docker Nginx opérationnel !

 

Laisser un commentaire

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