Vous êtes sur la page 1sur 8

Année Universitaire: 2023/2024

TP6 Section: LGLSI3


Matière: Virtualisation & Cloud Computing
Enseignantes : Leila GHORBEL, Syrine NEFFATI

Objectifs :
Se familiariser avec la conteneurisation en utilisant Docker, une forme de virtualisation au
niveau du noyau.
• Installation de Docker
• Utilisation de la commande Docker
• Test des images Docker
• Gestion des conteneurs Docker
• Transférer les modifications d'un conteneur vers une image Docker
• Pushing des images Docker vers le Docker Hub
• Construction des images à l’aide de Dockerfile
Outils :
• Oracle VM VirtualBox: https://www.virtualbox.org/wiki/Downloads
• Machine virtuelle Ubuntu desktop: https://ubuntu.com/download/desktop
Ou
• Docker desktop: https://docs.docker.com/desktop/install/windows-install/
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 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 aucune conscience d'être virtualisée.
Pour les conteneurs c'est différent, on n'installe pas d'OS à proprement parler, mais un rootfs
(root filesystem) 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.

1
Les machines virtuelles et les 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. 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.

Docker : Cas d’utilisation possibles


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
Le package d'installation de Docker disponible dans le dépôt officiel d'Ubuntu peut ne
pas être la dernière version. Pour être sûr d'obtenir la dernière version, nous allons installer
Docker à partir du dépôt officiel de Docker. Pour ce faire, nous allons ajouter une nouvelle
source de paquetage, ajouter la clé GPG de Docker pour nous assurer que les téléchargements
sont valides, puis installer le package.
1. Tout d'abord, mettez à jour votre liste de packages existante :
sudo apt update

2. Ensuite, installez quelques packages prérequis qui permettent à apt d'utiliser les packages
via HTTPS :
sudo apt install apt-transport-https ca-certificates curl software-
properties-common

2
3. Ajoutez ensuite la clé GPG du dépôt officiel de Docker à votre système :
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --
dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
4. Ajouter le dépôt Docker aux sources APT :
echo "deb [arch=$(dpkg --print-architecture) signed-
by=/usr/share/keyrings/docker-archive-keyring.gpg]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. Mettez à nouveau à jour votre liste de paquets existante pour que l'ajout soit reconnu :
sudo apt update

6. Assurez-vous que vous êtes sur le point d'installer à partir du repo Docker au lieu du repo
Ubuntu par défaut :
apt-cache policy docker-ce
7. Finalement, installez Docker:
sudo apt install docker-ce
La sortie devrait être similaire à la suivante, montrant que le service est actif et fonctionne

En installant Docker, vous disposez non seulement du service Docker (daemon), mais
aussi de l'utilitaire de ligne de commande Docker, ou client Docker.
II. Exécuter la commande Docker sans Sudo (optionnel)
Par défaut, la commande Docker ne peut être exécutée que par l'utilisateur root ou par
un utilisateur du groupe Docker, qui est automatiquement créé lors du processus d'installation
de Docker. Si vous essayez d'exécuter la commande docker sans la préfixer avec sudo ou sans
être dans le groupe docker, vous obtiendrez une sortie comme celle-ci :

Si vous voulez éviter de taper sudo à chaque fois que vous exécutez la commande docker,
ajoutez votre nom d'utilisateur au groupe docker :
sudo usermod -aG docker ${USER}
Pour appliquer la nouvelle appartenance à un groupe, déconnectez-vous du serveur et
reconnectez-vous, ou tapez ce qui suit :
su - ${USER}
Vous serez invité à saisir le mot de passe de votre utilisateur pour continuer.
Confirmez que votre utilisateur est maintenant ajouté au groupe docker en tapant :
groups
Si vous avez besoin d'ajouter un utilisateur au groupe Docker pour lequel vous n'êtes pas
connecté, déclarez ce nom d'utilisateur explicitement en utilisant :
sudo usermod -aG docker username

III. Utilisation de la commande Docker


L’objectif de cette étape est de présenter la commande Docker.

3
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]
• Pour voir toutes les sous-commandes possibles, tapez la commande : $docker
• Pour voir les options disponibles pour une commande spécifique, tapez :
$docker docker-subcommand –help
• Pour voir les informations sur Docker à l'échelle du système, utilisez : $docker info
IV. 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 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 :

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 :
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 :

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
4. Exécutez la commande suivante pour télécharger l'image officielle d’ubuntu
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 :
docker run -it ubuntu

La valeur fff7704cfa56 est l'identifiant du conteneur. 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.
Vous pouvez maintenant exécuter n'importe quelle commande à l'intérieur du
conteneur. Par exemple, mettons à jour la base de données des paquets à l'intérieur du
conteneur. Vous n'avez pas besoin de préfixer les commandes avec sudo, car vous
opérez à l'intérieur du conteneur en tant qu'utilisateur root :

6. Pour quitter un conteneur, il suffit de taper : $exit


V. 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

5
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 "1c08a7a0d0e4"
docker start 1c08a7a0d0e4

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 "dazzling_taussig"
docker stop dazzling_taussig

5. 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,
à savoir dazzling_taussig.
docker stop dazzling_taussig

6. 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 supprimez le.
docker rm adoring_kowalevski

VI. Transférer les modifications d'un conteneur vers une image Docker
Lorsque vous démarrez une image Docker, vous pouvez créer, modifier et supprimer
des fichiers comme vous le feriez avec une machine virtuelle. Les modifications que vous
apportez ne s'appliquent qu'à ce conteneur. Vous pouvez le démarrer et l'arrêter, mais une fois
que vous l'aurez détruit avec la commande docker rm, les modifications seront définitivement
perdues.
Cette section vous montre comment sauvegarder l'état d'un conteneur en tant que nouvelle
image Docker.

Après avoir installé Node.js dans le conteneur Ubuntu, vous avez maintenant un conteneur
fonctionnant à partir d'une image, mais le conteneur est différent de l'image que vous avez
utilisée pour le créer. Mais vous pourriez vouloir réutiliser ce conteneur Node.js comme base
pour de nouvelles images plus tard.

6
Ensuite, vous validez les modifications dans une nouvelle instance d'image Docker à l'aide de
la commande suivante.
docker commit -m "added Node.js" -a "username" d9b100f2f636
username/ubuntu-nodejs

Lorsque vous livrez une image, la nouvelle image est enregistrée localement sur votre
ordinateur. Plus loin dans ce tutoriel, vous apprendrez comment pousser une image vers un
registre Docker comme Docker Hub afin que d'autres puissent y accéder.

En listant à nouveau les images Docker, vous verrez la nouvelle image, ainsi que l'ancienne
image dont elle est dérivée :
docker images

VII. Transférer (pushing) des images Docker vers un référentiel Docker


La prochaine étape logique après la création d'une nouvelle image à partir d'une image
existante est de la partager avec certains de vos amis, le monde entier sur Docker Hub, ou tout
autre registre Docker auquel vous avez accès. Pour pousser une image sur Docker Hub ou tout
autre registre Docker, vous devez y avoir un compte.

Pour pousser votre image, connectez-vous d'abord à Docker Hub.


Rq: Si vous n'avez pas un compte sur Docker Hub, le créez sur https://hub.docker.com/

docker login -u docker-registry-username


Si votre nom d'utilisateur pour le registre Docker est différent du nom d'utilisateur local que
vous avez utilisé pour créer l'image, vous devrez marquer votre image avec votre nom
d'utilisateur pour le registre. Pour l'exemple donné dans la dernière étape, vous devez taper:
docker tag username/ubuntu-nodejs docker-registry-username/ubuntu-
nodejs
Vous pouvez ensuite pousser votre propre image en l'utilisant :
docker push docker-registry-username/ubuntu-nodejs

Après avoir transféré une image dans un registre, celle-ci devrait apparaître dans le tableau de
bord de votre compte, comme dans l'image ci-dessous.

VIII. Construction d’image: exécuter apache via Dockerfile

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.
Créez le répertoire apache
mkadir apache && cd apache

Dans le répertoire, créez ou copiez les fichiers que vous souhaitez inclure dans l'image.

Par exemple, incluez une nouvelle page web en créant un fichier index.html dans un
éditeur de texte :

7
nano index.html

écrire ce que vous voulez dans cette page par exemple:


<h1>Test</h1> <p>This is a test page for the Apache deployment
in Docker</p>

Ensuite, créez le fichier Dockerfile pour la nouvelle image. Dockerfile contient toutes les
instructions nécessaires à Docker pour assembler une image spécifique.

1. Utilisez un éditeur de texte pour créer le fichier.


nano Dockerfile

2. Ecrire la configuration de l'image


FROM httpd:latest
COPY index.html /usr/local/apache2/htdocs
EXPOSE 80
L'exemple ci-dessus utilise la dernière image httpd comme modèle et la modifie
en copiant index.html du répertoire local vers le répertoire /usr/local/apache2/htdocs
de l'image. En outre, le port de conteneur 80 est exposé afin qu'il puisse être associé à
un port hôte.

3. Utilisez docker build pour créerl'image de Dockerfile


docker build -t apache:v1 .

4. Exécuter Apache Dockerfile en tant que conteneur


docker run -d --name apache -p 80:80 apache:v1

5. Vérifier si Apache fonctionne


https://[server-public-ip-address]

Vous aimerez peut-être aussi