36 1 982KB
TP 2 : Docker
Virtualisation et Cloud TP 2 : Docker
Objectif : L’objectif principal de ce TP est de s’initier à la conteneurisation (virtualisation niveau noyau) et ce via Docker. Pour ce faire, ce TP commence par une présentation de Docker qui inclut une comparaison entre la virtualisation hébergée et la conteneurisation, par la suite vous serez en charge de suivre l’énoncé du TP afin de se familiariser avec Docker. Les étapes primordiales de ce TP sont comme suit : -
Installation de Docker
-
Utilisation de la commande Docker
-
Test des images Docker
-
Gestion des conteneurs Docker ; et
-
Construction des images à l’aide de Dockerfile.
Outils : Les outils qui seront utilisés tout au long de ce TP sont comme suit : −
Oracle VM VirtualBox: Vous pouvez le télécharger depuis le lien suivant : https://www.virtualbox.org/wiki/Downloads
−
Machine virtuelle Ubuntu desktop 20.10 (qui a été installé durant le TP 1)
Docker : Le logiciel Docker est une technologie de conteneurisation qui permet la création et l'utilisation de conteneurs Linux. En particulier, il permet de : -
faire fonctionner plusieurs processus dans un environnement isolé et/ou limité ;
-
installer et de configurer des logiciels dans cet environnement ;
-
gérer différentes images et de les distribuer.
Avec la technologie Docker, les conteneurs peuvent être traités comme des machines virtuelles très légères et modulaires. En outre, ces conteneurs offrent une grande flexibilité. En fait, les conteneurs
1 Enseignante : Nourhene Ellouze
TP 2 : Docker
peuvent être crées, déployés, copiés et déplacés d'un environnement à un autre, ce qui permet d'optimiser les applications pour le cloud. Docker étend le format de conteneur Linux standard avec une API de haut niveau fournissant une solution de virtualisation qui exécute les processus de façon isolée. Contrairement aux machines virtuelles traditionnelles, un conteneur Docker n'inclut pas de système d'exploitation, s'appuyant sur les fonctionnalités du système d’exploitation fournies par l'infrastructure sous-jacente. Attention : Ce n’est pas de la virtualisation au sens général. 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. Cela permet aux nœuds d'être déployés au fur et à mesure que les ressources sont disponibles, offrant un déploiement transparent et similaire aux PaaS pour des systèmes comme Apache Cassandra, Riak ou d'autres systèmes distribués. Conteneurs VS machines virtuelles Pour une machine virtuelle, Il faut lui créer et préciser la RAM à utiliser, le nombre de CPU, un disque dur virtuel pour installer un OS, etc. En fait, une machine virtuelle dispose de ses propres ressources, et n'a aucunement conscience d'être virtualisée. Pour les conteneurs c'est différent, on n'installe pas d'OS à proprement parler, mais un rootfs (le / d'un unix/linux) qui est appelé image, qui contient les librairies et les binaires nécessaires. Le noyau quant à lui, est partagé avec le système hôte. Nous pouvons évidemment limiter les ressources des conteneurs. Machines Virtuelles et Conteneurs ont leurs avantages et bien évidemment leurs inconvénients. Par exemple lancer ou créer un conteneur est vraiment plus rapide que lancer une VM. Mais une VM offre une meilleure isolation. Et ils ne sont pas forcément incompatibles, bien souvent, docker est simplement utilisé dans une VM pour uniformiser une application entre les différents environnements (prod, préprod, intégration, etc). Il arrive même de trouver un conteneur par VM.
Figure 1. Conteneurs VS machines virtuelles
2 Enseignante : Nourhene Ellouze
TP 2 : Docker
Docker : Cas d’utilisation passibles : Docker n'a pas pour vocation à remplacer la virtualisation, voici plusieurs cas d'utilisation possibles : -
Le déploiement : Puisque docker a pour vocation de conteneuriser des applications, il est simple de créer un conteneur pour notre application et la dispatcher. Un conteneur qui fonctionne sur une machine avec une distribution X, fonctionnera sur une autre machine avec une distribution Y.
-
Le développement : Cela permet de facilement avoir le même environnement de développement qu'en production, si ça marche quelque part, ça marchera partout. Cela permet également de pouvoir sur la même machine, tester avec plusieurs versions d'un même logiciel.
-
Installer des applications : Étant donné que docker propose une multitude d'outils, vous allez voir à quel point il est facile et rapide d'installer une application, bien souvent une seule ligne de commande suffit pour avoir par exemple notre owncloud fonctionnel.
Travail Demandé : I. Installation de Docker L’objectif de cette étape est d’installer Docker sous Ubuntu. Pour ce faire, nous allons utiliser dans ce TP la machine virtuelle que nous avons installés durant le premier TP. Pour réussir cette étape, vous devez suivre les étapes décrites tout au long de cette section. Le package d'installation Docker disponible dans le référentiel officiel Ubuntu peut ne pas être la dernière version. Pour être sûr de disposer de la dernière version, nous allons installer Docker à partir du référentiel officiel Docker. Pour ce faire, nous allons ajouter une nouvelle source de paquets, ajouter la clé GPG de Docker pour nous assurer que les téléchargements sont valables, puis nous installerons le paquet. 1. Tout d'abord, il faut commencer par la mise à jour de la liste de packages existante, en tapant la commande suivante : $sudo apt update 2. Ensuite, installez quelques paquets pré-requis qui permettent à apt d'utiliser les paquets sur HTTPS: $sudo apt install apt-transport-https ca-certificates curl software-properties-common 3. Ajoutez la clé GPG du dépôt officiel de Docker à votre système, en utilisant la commande suivante: $curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add 4. Ajoutez le référentiel Docker aux sources APT avec la commande suivante : $sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" 5. Mettez à jour la base de données des paquets avec les paquets Docker à partir du référentiel qui vient d'être ajouté : $sudo apt update
3 Enseignante : Nourhene Ellouze
TP 2 : Docker
6. Assurez-vous que vous êtes sur le point d'installer à partir du dépôt Docker et non du dépôt Ubuntu par défaut : $apt-cache policy docker-ce Vous verrez un résultat comme celui-ci :
7. Enfin, installez Docker, à l’aide de la commande : $sudo apt install docker-ce 8. Docker devrait maintenant être installé, le démon démarré, et le processus autorisé à démarrer au boot. Vérifiez qu'il tourne à l’aide de la commande : $sudo systemctl status docker La sortie devrait être similaire à ce qui suit, montrant que le service est actif et en cours d'exécution :
L'installation de Docker nous donne non seulement le service Docker (démon) mais aussi l'utilitaire en ligne de commande docker, ou le client Docker. Une telle commande va être plus détaillée dans la suite de ce TP.
II. Utilisation de la commande Docker L’objectif de cette étape est de présenter la commande Docker. L'utilisation de la commande docker consiste à lui faire passer une chaîne d'options et de commandes suivie d'arguments. La syntaxe prend cette forme : $docker [option] [command] [arguments] 1. Pour voir toutes les sous-commandes possibles, tapez la commande : $docker 2. Pour
voir
les
options
disponibles
pour
une
commande
spécifique,
tapez
:
$docker docker-subcommand –help 3. Pour voir les informations sur Docker à l'échelle du système, utilisez : $docker info
III. Images Docker L’objectif de cette section est de tester quelques images docker et les faire fonctionner. Commençons d’abord par la présentation des images Docker. Les conteneurs Docker sont construits à partir d'images Docker. Par défaut, Docker tire ces images de Docker Hub, un registre Docker géré par Docker, l'entreprise à l'origine du projet Docker. Tout le monde peut héberger ses images Docker sur Docker
4 Enseignante : Nourhene Ellouze
TP 2 : Docker
Hub, de sorte que la plupart des applications et des distributions Linux dont vous aurez besoin y auront des images hébergées. 1. Pour tester la possibilité d’accès et de téléchargement des images de Docker Hub, tapez : $sudo docker run hello-world Si vous aurez la sortie suivante, alors Docker fonctionne correctement :
Au départ, Docker n'a pas pu trouver l'image hello-world localement. Il a donc téléchargé l'image depuis Docker Hub, qui est le référentiel par défaut. Une fois l'image téléchargée, Docker a créé un conteneur à partir de l'image et l'application dans le conteneur s'est exécutée, affichant le message. 2. Pour lister les images qui ont été téléchargées sur votre ordinateur, tapez : $sudo docker images
3. Pour rechercher des images disponibles sur Docker Hub, on peut utiliser la commande docker avec la sous-commande search. Par exemple, pour rechercher l'image Ubuntu, tapez : $sudo docker search ubuntu Le script va parcourir Docker Hub et retourner une liste de toutes les images dont le nom correspond à la chaîne de recherche. Dans ce cas, la sortie sera similaire à celle-ci :
5 Enseignante : Nourhene Ellouze
TP 2 : Docker
Dans la colonne OFFICIAL, OK indique une image construite et soutenue par l'entreprise à l'origine du projet. Une fois que vous avez identifié l'image que vous souhaitez utiliser, vous pouvez la télécharger sur votre ordinateur à l'aide de la sous-commande pull. 4. Exécutez
la
commande
suivante
pour
télécharger
l'image
officielle
d’ubuntu :
$sudo docker pull ubuntu La sortie ressemblera à ce qui suit :
5. Une fois qu'une image a été téléchargée, nous pouvons alors lancer un conteneur en utilisant l'image téléchargée avec la sous-commande run. Démarrons alors notre premier container ubuntu, à l’aide de la commande suivante : $sudo docker run ubuntu 6. Nous allons maintenant rediriger l'entrée standard du container avec l'option -i et ouvrir un pseudoterminal avec -t : $sudo docker run -ti ubuntu Votre invite de commande devrait changer pour refléter le fait que vous travaillez maintenant à l'intérieur du conteneur et devrait prendre cette forme :
Notez l'identifiant du conteneur dans l'invite de commande. Dans cet exemple, il s'agit de fff7704cfa56. Vous aurez besoin de cet ID de conteneur plus tard pour identifier le conteneur lorsque vous voudrez le supprimer. Maintenant, il est possible d’exécuter n'importe quelle commande à l'intérieur de ce conteneur. Installez n'importe quelle application dans le conteneur. Une telle application ne sera installée que dans ce conteneur. En fait, Les modifications apportées à l'intérieur d’un conteneur ne s'appliquent qu'à ce conteneur. 7. Pour quitter un conteneur, il suffit de taper : $exit
IV. Gestion des conteneurs Docker L’objectif de cette section est d’essayer certaines commandes de gestion des conteneurs Docker. En fait, après avoir utilisé Docker pendant un certain temps, il pourrait y avoir de nombreux conteneurs actifs (en cours d'exécution) et inactifs sur la machine. Pour ce faire, il est primordial de connaitre les commandes de gestion des conteneurs Docker. 1.
Pour lister les conteneurs actifs, utilisez : $sudo docker ps
6 Enseignante : Nourhene Ellouze
TP 2 : Docker
Vous aurez, normalement, une sortie similaire à celle-ci :
Dans ce TP, jusqu’à maintenant, nous avons lancé deux conteneurs ; un à partir de l'image hello-world et un autre à partir de l'image ubuntu. Les deux conteneurs ne sont plus actifs, mais ils existent toujours sur notre machine. 2. Pour lister tous les conteneurs, actifs et inactifs, exécutez docker ps avec le commutateur -a : $sudo docker ps -a Vous aurez, normalement, une sortie similaire à celle-ci :
3. Pour démarrer un conteneur arrêté, utilisez docker start, suivi de l'ID du conteneur ou de son nom. Démarrons le conteneur basé sur Ubuntu avec l'ID de fff7704cfa56 : $sudo docker start fff7704cfa56 Vous pouvez utiliser docker ps pour voir son statut :
4. Pour arrêter un conteneur en cours d'exécution, utilisez docker stop, suivi de l'ID ou du nom du conteneur. Cette fois, nous utiliserons le nom que Docker a attribué au conteneur, qui est eager_poincare : $sudo docker stop eager_poincare Vous pouvez utiliser docker ps pour vérifier son statut :
5. Une fois que vous avez décidé que vous n'avez plus besoin d'un conteneur, retirez-le avec la commande docker rm, en utilisant à nouveau l'ID ou le nom du conteneur. Utilisez la commande docker ps -a pour trouver l'ID ou le nom du conteneur associé à l'image hello-world et supprimezle.
7 Enseignante : Nourhene Ellouze
TP 2 : Docker
6. Utilisez la commande docker ps -a pour trouver l'ID ou le nom du conteneur associé à l'image ubuntu et supprimez-le.
V. Construction d’image L’objectif de cette section est de créer une image à partir d’un fichier de description appelé Dockerfile. Pour atteindre un tel objectif, suivez les étapes détaillées par la suite. 1. Créons une machine Debian : $sudo docker pull Debian 2.
3. Créons maintenant notre propre image qui va nous permettre de lancer un serveur Web apache. Pour cela, il faut définir la méthode de construction du container dans un fichier. $sudo mkdir -p Docker/Apache $sudo Docker/Apache $sudo nano Dockerfile FROM debian:latest MAINTAINER LFI
image de base
RUN apt-get -yqq update && apt-get install -yqq apache2
Installation apache
WORKDIR /var/www/html
Répertoire du travail
ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid ENV APACHE_RUN_DIR /var/run/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2
RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR ENTRYPOINT [ "/usr/sbin/apache2" ]
Variables d’environments
Création du dossier
CMD ["-D", "FOREGROUND"]
Commandes à exécuter
EXPOSE 80
Port exposé
8 Enseignante : Nourhene Ellouze
TP 2 : Docker
4. Compilez le fichier en tapant : $sudo docker build -t="lfi/apache" . #Attention à ne pas oublier le point '.' à la fin de la commande (qui indique que le fichier Dockerfile est dans le répertoire local)
5. Ensuite, démarrez un container lfi/apache en mode démon en exposant le port 80, en tapant la commande : $ sudo docker run -d -p 80 --name=apache lfi/apache
6. Pour trouver quel est le port choisi par Docker, tapez : $sudo docker port apache 80
Port docker 7. Pour ne pas avoir un conflit avec le serveur apache installé durant le premier TP, nous allons désactiver ce service en tapant la commande suivante : $sudo service apache2 stop Par la suite, vérifiez que le service devient inactif en tapant : $ sudo service apache2 status
8. Testez en ouvrant le navigateur et en se connectant sur la machine locale (Hôte) et sur le port docker. (N’oubliez pas de récupérer l’adresse IP de la machine virtuelle à l’aide de la commande ip address show). La sortie devrait être similaire à ce qui suit, montrant qu’Apache est actif et en cours d'exécution.
9 Enseignante : Nourhene Ellouze
TP 2 : Docker
9. Maintenant, nous allons essayer de contrôler le contenu du serveur Web depuis l'hôte. Pour cela, nous allons : a. créer un répertoire website dans le répertoire Apache crée précédemment. $ mkdir website $cd website/ $sudo nano index.html b. mettre dans ce répertoire un fichier index.html avec le contenu suivant :
Cela fonctionne Bien !!