Vous êtes sur la page 1sur 9

Cloud d’entreprises : docker

I CONTEXTE

Vous vous lancez dans le Cloud. Vous décidez dans un premier temps de proposer comme service
l’hébergement de sites web statiques à vos clients. Pour répondre rapidement à leurs attentes, vous
décidez d’utiliser docker. Grace à docker vous aurez une image docker jessie_apache2 que vous allez
construire et que vous lancerez dans un nouveau container docker pour chaque client. Les clients eux
déposeront grâce à un service ftp leur site web statique dans leur répertoire personnel créé sur la
machine physique hébergeant les containers.
Tout ceci peut être représenté de la manière suivante :

II INSTALLATION DE DOCKER ET RECHERCHE D'IMAGES DOCKER

Avec docker les processus sont isolés dans des containers. Un container embarque l’application et ses
dépendances, l’utilisation de l’espace de disque hébergeant les containers est donc optimale. Il n’y a
pas d’émulation, l’exécution des processus est donc aussi rapide que si l’application était installée
directement sur le system hôte. Vous allez quand même utiliser l’émulation puisque notre machine
hébergeant les containers docker sera une machine virtuelle Lubuntu 20.04 LTS.

II.1 INSTALLATION DE DOCKER

Installation : sudo apt-get install docker.io


Ajout de votre user au groupe docker : sudo addgroup votre-login docker
Déconnectez-vous et reconnectez-vous sous votre compte.

1 Marie-pascale Delamare d’après Linux Pratique n°91


II.2 TÉLÉCHARGEMENT D’UNE IMAGE DEBIAN VIDE DE TOUTE APPLICATION

Docker télécharge ses images sur un dépôt https://registry.hub.docker.com (site officiel).


Connectez-vous à ce site, en vous créant un compte et vérifiez que l’image debian : jessie existe.

En local, pour chercher si une image existe vous utilisez la commande search : exemple docker
search wordPress (pour une image WordPress), docker search debian (pour une image debian).
Vérifiez l’existence des images debian :

2 Marie-pascale Delamare d’après Linux Pratique n°91


Stars : indique la popularité de l’image, Official indique si l’image a été produite par une source
officielle reconnue, Automated indique si l’image a été créée automatiquement depuis un dépôt
GilHUB ou BitBucket.
Pour télécharger une image : docker pull nom_image :tag_image.
Exemple pour télécharger une image debian, jessie : docker pull debian :jessie.
Télécharger une image debian : jessie

Deux téléchargements ont eu lieu, car les images sont gérées par version (dans la succession des
versions seules les différences sont retenues, la mise en place de la version finale demandant le
rétablissement de toutes les différences depuis la version initiale.
Pour vérifier que l’image est maintenant sur votre poste : docker images

3 Marie-pascale Delamare d’après Linux Pratique n°91


Une image est un fichier en lecture seule, contenant lui-même un système de fichiers avec tout le
nécessaire pour faire fonctionner de préférence une seule application. Le container est le processus qui
utilise l’image pour faire tourner l’application.

III UTILISATION DES CONTAINERS

Pour lancer votre image debian : jessie dans un container


docker run –-name apache –i –t debian :jessie /bin/bash (--name sera le nom de notre container, -i
–t permettent d’avoir un shell accessible dans le container, debian :jessie est le nom de l’image à
lancer, /bin/bash est le nom de la commande à lancer dans le container ce qui nous permet d’avoir un
shell au sein du container.

4 Marie-pascale Delamare d’après Linux Pratique n°91


Le prompt a changé vous êtes maintenant dans votre container. Il faut maintenant installer apache2 et
le lancer. Je vous laisse faire.
Laissez cette console ouverte, lancez en une deuxième et tapez la commande docker ps –a (cette
commande vous donne la liste de tous les containers en cours d’exécution).

Il faut maintenant enregistrer les modifications faites à notre nouvelle image que nous appellerons
jessie_apache2. Pour cela dans la deuxième console, il faut sauvegarder les changements de notre
image par la commande « docker commit »
docker commit –m « TP cloud avec docker » -a « votreNom » apache jessie_apache2 :v1

5 Marie-pascale Delamare d’après Linux Pratique n°91


-m pour mettre un commentaire, -a pour indiquer l’auteur, apache est le nom du container et
jessie_apache2 :v1 est le nom de la nouvelle image.

Vérifiez avec la commande permettant de voir les images disponibles en local :

Sauvegardez votre image pour pouvoir éventuellement l’utiliser sur une autre machine
docker save jessie_apache2 > jessie_apache2.tar (pour la réutiliser ailleurs vous utiliserez docker
load < jessie_apache2.tar)

6 Marie-pascale Delamare d’après Linux Pratique n°91


Sortez maintenant de votre container apache avec la commande exit (à lancer dans la première
console, celle encore active sur le container). Lancez une commande docker ps –a pour vérifier qu’il
est toujours présent. Détruisez-le avec la commande docker rm apache après l’avoir tué avec la
commande docker kill apache si nécessaire.
Relancez-le avec la commande suivante :
docker run -d --name client2 -p 50000 :80 jessie_apache2 :v1 /usr/sbin/apache2ctl -
DFOREGROUND (-d lance le container en arrière plan donc sans console, –p map le port 50000 vu
de l’internaute vers le port 80 du container, /usr/sbin/apache2ctl est la commande à lancer dans le
container avec le paramètre DFOREGROUNG pour démarrer apache dans le container en premier
plan).

7 Marie-pascale Delamare d’après Linux Pratique n°91


Vérifiez avec un navigateur.

IV PUBLICATION DES SITES WEB DES CLIENTS

Pour ne pas modifier notre image et la laisser générique, il faut déposer les pages des clients dans des
répertoires du serveur hôte. Il faut donc créer ces utilisateurs sur le serveur hôte, installer un serveur
ftp sur le serveur hôte, « chrooter » les répertoires racines des utilisateurs ftp pour les placer dans leurs
répertoires personnels, puis lancer un container par client en mappant le répertoire /var/www/html du
container vers le répertoire du client sur le serveur hôte.

IV.1 INSTALLATION D’UN SERVEUR FTP SUR LE SERVEUR HÔTE

apt-get install proftpd-basic


Utilisez ce lien pour limiter les utilisateurs à leur répertoire personnel (chrooter la racine) :
https://forum.ubuntu-fr.org/viewtopic.php?id=289227
Démarrez le service ftp avec la commande sudo service proftpd restart et testez en local avec la
commande ftp.

IV.2 CRÉER UN COMPTE POUR CHAQUE CLIENT

Par l’interface graphique ou en mode commande à vous de choisir, créez un compte pour le client1,
pour le client2 et enfin pour le client3 sur votre linux Lubuntu.

IV.3 DÉPOSER DES PAGES WEB DANS LES RÉPERTOIRES DES CLIENTS

Récupérez une page index.html, copiez la trois fois et changez le titre pour les différentier (client1,
client2, client3) puis déposez-les avec un client ftp dans chacun des répertoires des clients
(utilisateurs) sur votre serveur hôte.

IV.4 PUBLIER LES PAGES WEB DES CLIENTS DE VOTRE CLOUD

Il reste pour cela à lancer trois containers en les faisant pointer vers les répertoires de vos clients. Pour
cela on va faire un mappage de répertoires entre les répertoires du serveur hôte et les répertoires des
containers par la commande :

8 Marie-pascale Delamare d’après Linux Pratique n°91


docker run –d –-name client1 –p 49999 :80 –v /home/client1:/var/www/html jessie_apache2 :v1 /
usr/sbin/apache2ctl –DFOREGROUND

docker run –d –-name client2 –p 50000 :80 –v /home/client2:/var/www/html jessie_apache2 :v1 /


usr/sbin/apache2ctl –DFOREGROUND

docker run –d –-name client3 –p 50001 :80 –v /home/client3:/var/www/html jessie_apache2 :v1 /


usr/sbin/apache2ctl –DFOREGROUND

Testez avec un navigateur.


Voilà votre Cloud est prêt.

A FAIRE APRES QUE NOUS AYONS FAIT HAPROXY


Il faudrait ensuite intégrer cela dans Haproxy pour rediriger en fonction de l’URL demandée vers le
serveur hôte sur un port précis (backend vers le serveur hôte et le port redirigé lui permettrait de
trouver le bon container au sein de ce serveur hôte).
Comme cela vos clients interrogeraient leur site sur le port 80 mais avec leur nom de domaine et
Haproxy renverrait vers le backend adéquate en fonction de l’URL demandée.
Haproxy serait donc ici paramétré en reverse proxy.
Exemple de configuration de Haproxy dans ce sens :

Ne pas oublier de mettre à jour votre serveur


DNS disponible sur votre AD.

Annexe 1 : Quelques commandes bien utiles


GESTION DES IMAGES :

Détruire une image : docker rmi nom_image :tag


Publier une image sur le dépôt : docker login : se connecter avec son compte au dépôt
docker push nom_image

GESTION DES CONTAINERS :

Reprendre la main sur un container quitté par exit : docker restart nom_container
docker attach nom_container

9 Marie-pascale Delamare d’après Linux Pratique n°91

Vous aimerez peut-être aussi