Vous êtes sur la page 1sur 13

63-13.

2 - Infrastructures informatiques Olivier Mouttet

63-13.2 - Infrastructures informatiques

Conteneurisation d’application
Rapport noté

Mouttet Olivier
20/01/2022

Vicques, le vendredi 4 février 2022 0/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Table des matières


Introduction............................................................................................................................................. 2
Qu’est-ce qu’un conteneur ?................................................................................................................... 2
Les machines virtuelles........................................................................................................................ 2
Les conteneurs .................................................................................................................................... 3
Comparaison VMs et conteneurs ........................................................................................................ 4
Les avantages et inconvénients de la conteneurisation ..................................................................... 5
Pourquoi utiliser des conteneurs ?.......................................................................................................... 5
Comment et où utiliser des conteneurs ? ............................................................................................... 6
Linux .................................................................................................................................................... 6
Windows .............................................................................................................................................. 7
Cloud.................................................................................................................................................... 7
AWS ................................................................................................................................................. 7
Azure................................................................................................................................................ 7
Google Cloud ................................................................................................................................... 8
Comment conteneuriser une application ?............................................................................................. 8
Installer LXC sur Linux.......................................................................................................................... 8
Créer un conteneur ............................................................................................................................. 9
Déployer une application dans un conteneur ..................................................................................... 9
Conclusion ............................................................................................................................................. 11
Sources .................................................................................................................................................. 12

Vicques, le vendredi 4 février 2022 1/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Introduction
Ce rapport a été rédigé dans le cadre du cours 63-13.2 - Infrastructures informatiques de la HE-Arc, en
filière d’Informatique de gestion. Il compte pour ¼ de la note d’examen validant le module. Le thème
global du rapport porte sur la conteneurisation d’application. Nous aborderons différents sujets,
notamment :

- Qu’est-ce qu’un conteneur ?


- Comment se différencie-t-il d’une machine virtuelle traditionnelle ?
- Pourquoi cette technologie est-elle aussi globalement utilisée de nos jours ?
- Quels sont ses avantages et ses inconvénients ?
- Comment et où utiliser des conteneurs ?
- Comment pouvons-nous conteneuriser une application ?

Qu’est-ce qu’un conteneur ?


Les machines virtuelles
Afin de mieux comprendre le reste de ce rapport et comment la conteneurisation fonctionne et
comment elle affecte le monde informatique, il est nécessaire de revenir brièvement sur ce qu’est un
conteneur et comment il se différencie d’une machine virtuelle traditionnelle.

Figure 1i : illustration d’une VM

La virtualisation, que nous appelons machine virtuelle (VM), consiste à créer un second ordinateur,
appelé traditionnellement « guest/invité » sur un ordinateur physique, appelé « host/hôte ». Une VM
ne se comporte pas différemment d’une machine traditionnelle. Elle possède toutes les
caractéristiques d’un ordinateur (processeur, mémoire, disque dur, etc.) qu’elle « emprunte » à son
hôte. Cet hôte peut être l’ordinateur physique sur lequel vous travaillez ou le serveur d’un fournisseur
de service Cloud. En terme plus technique, c’est un fichier informatique appelé « image » qui s’exécute
dans une fenêtre, souvent dans le but d’exécuter un système d’exploitation différent de celui de l’hôte.

Une VM peut également se comporter comme expérience informatique complète de l’utilisateur, ce


qui est d’ailleurs souvent le cas des ordinateurs professionnels. Une VM est dite « isolée », c’est-à-dire

Vicques, le vendredi 4 février 2022 2/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

que tout ce qui est installé sur sa partition de disque ne peut pas interférer avec le système
d’exploitation de l’hôte.

Il est ainsi possible de faire des économies d’échelle, puisqu’une seule unité de calcul (ordinateur,
server, etc.) peut faire fonctionner plusieurs VMs. De plus, une fois une première VM configurée, il est
assez facile de la déployer à distance sur plusieurs postes de travail, ce qui est beaucoup plus simple
que de configurer à chaque fois un nouveau poste de travail physique.ii

Il est à noter que la virtualisation constitue la base de nombreux services utilisés désormais
globalement, comme les services Cloud (hébergements, stockage de données, etc.).

Les conteneurs
Maintenant que nous avons vu comment se comporte une VM en virtualisant la partie matériel,
penchons-nous sur ce qu’est un conteneur dans le monde informatique.

L’image du conteneur de transport qui nous vient en tête n’est pas anodine. En effet, c’est bien cette
idée de compartimenter, de blocs individuels empilables, déplaçables et supprimables qu’il faut garder
en tête.

Plutôt de d’éumuler la couche « hardware », la technologie des conteneurs (containers en anglais)


virtualise quant à elle la partie système d’exploitation (operating system en anglais, abrégé OS).

Plutôt que d’isoler une VM complète avec un OS indépendant, nous exécutons les application dans des
environnements virtuels isolés, que nous appelons conteneurs. Ces derniers fonctionnent sur le même
système d’exploitation.

Figure 2: illustration d'un conteneuriii

Les conteneurs sont considérés comme des applications. Cela signifie que pour l’installer, il faut
charger le conteneur correspondant avec toutes les dépendances nécessaires à l’exécution. Tout
comme pour une VM, un conteneur est une image.

Vicques, le vendredi 4 février 2022 3/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Comparaison VMs et conteneurs


Pour cette comparaison, nous allons nous appuyer sur le travail effectué par Microsoft, dont la source
se trouve citée en annexe.iv

Ainsi, selon eux : « Un conteneur est un silo léger et isolé qui permet l’exécution d’une application sur
le système d’exploitation hôte. Les conteneurs s’appuient sur le noyau du système d’exploitation hôte
(qui peut être considéré comme la plomberie enfouie du système d’exploitation), Contrairement aux
conteneurs, les machines virtuelles exécutent un système d’exploitation complet, y compris son propre
noyau. »

Le schéma suivant illustre cette différence :

Figure 3: comparaison VM/containerv

En ce qui concerne l’isolation, une VM est complètement isolée de l’OS hôte. C’est particulièrement
utile lorsque la sécurité est très importante. Un conteneur, quant à lui, fournit une isolation plus légère
et met moins l’accent sur la sécurité.

Comme nous l’avons également déjà mentionné, une VM virtualise le matériel alors qu’un conteneur
virtualise l’OS.

En d’autres termes, une VM exécute un OS complet, ce qui requiert plus de ressources (CPU, GPU,
RAM, HDD, etc.). De plus, une VM peut exécuter n’importe quel OS. Un conteneur quant à lui peut être
personnaliser pour ne contenir que les services nécessaires à l’application. Il s’exécute sur la même
version de l’OS que l’hôte. Il est de ce fait moins gourmand en ressource.

Ainsi, un conteneur est de manière générale plus léger et facile à déployer qu’une VM. Il est facile à
installer, indépendant de la plateforme, a un temps de réponse beaucoup plus court au démarrage et
fonctionne indépendamment des autres logiciels, ce qui évite les risques de conflit.

Vicques, le vendredi 4 février 2022 4/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Les avantages et inconvénients de la conteneurisation


En ce qui ce qui concerne les avantages, nous pouvons relever encore une fois la légèreté, la rapidité
et l’isolement de l’infrastructure. Et puisqu’un conteneur est généralement léger, il peut être stocké,
sauvegardé et restauré rapidement.

Puisque l’application et toutes ses dépendances (librairies, fichiers binaires et de configuration, etc.)
forme un seul bloc, il est facile de la migrer.

Comme mentionné précédemment, cette technologie permet également de limiter les coûts de
l’infrastructure informatique d’une entreprise.

De plus, il est très facile d’automatiser des tâches et les outils comme Kubernetes permettent de gérer
les conteneurs individuellement ou en cluster, ce qui met leur développement et déploiement plus
facile.

Toutefois, il n’y a pas que des avantages à utiliser cette technologie. Pour commencer, si cela
fonctionne particulièrement bien avec des OS Linux, l’environnement Windows n’est pas autant
supporté.

En termes de sécurité également, puisque l’OS et le conteneur partage le même noyeu, si celui-ci est
compromis alors le conteneur est compromis.

Ensuite, puisque la conteneurisation est traditionnellement utilisée pour créer des infrastructures à
plusieurs couches avec une application ou un micro-service par conteneur, il y a plus de choses à gérer
comparé à une VM qui ferait tourner toutes les applications.

De plus, le stockage des données devient plus complexe. Pour uns stockage persistant, il faut migrer
les datas hors du conteneur.

Mis côte à côte, les avantages apportés par cette technologie contrebalancent largement leurs
inconvénients, pour autant que la conteneurisation apporte un réel gain à l’application.

Pourquoi utiliser des conteneurs ?


Durant longtemps, les applications traditionnelles ont été développées avec une architecture dite
« monolithique », dans laquelle toutes les fonctions et composants sont concentrés dans une seule
instance. Puisque les infrastructures informatiques étaient statiques, les applications étaient
développées pour correspondre aux spécificités imposées par le matériel.

Puis est arrivé la révolution Cloud. Les infrastructures sont devenues agiles, rapide et facile à déployer
et bon marché. Dans un monde de plus en plus connecté, il est devenu inacceptable pour certains
services (bancaires, par exemple) d’être indisponibles.

C’est ainsi que l’architecture en micro-services s’est développée. Elle se montre beaucoup plus agile et
rapide, c’est pourquoi elle est de plus en plus utilisée. Une architecture en micro-service casse ces
applications en plusieurs parties, comme illustré dans le schéma ci-dessous :

Vicques, le vendredi 4 février 2022 5/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Figure 4 : monolithic vs microservicesvi

Cette architecture permet de séparer l’application en plusieurs services qui exécutent chacun leurs
propres fonctions et qui font partie de l’ensemble « application ». Cette architecture a été créée pour
résoudre les problèmes causés par ce développement monolithique.

Se pose donc la question du stockage de ces micro-services, et c’est là qu’intervient la


conteneurisation.

Grace à cette technologie, les développeurs travaillent sur des bouts de code beaucoup plus petit, ce
qui leur permet de les comprendre beaucoup plus facilement. La compilation et l’exécution du code
est, du même coup, plus rapide.

De plus, la responsabilité et la distribution des tâches à différentes équipes de développement est plus
claire et structurée. Il est possible, par exemple, d’attribuer un micro-service à une équipe. La relecture
du code et le déploiement peut ainsi se faire beaucoup plus rapidement.

Autre avantage, l’application n’est plus restreinte à une seule technologie. Elle ne dépend plus d’un
seul langage de programmation. Les équipes de développement peuvent utiliser le langage le plus
adapté à chaque micro-service intégré.

Il est également possible d’ajouter des services « on the go », puisqu’il n’est plus nécessaire de
redéployer toute l’application pour apporter des modifications. Les mises à jour et corrections de bug
peuvent se faire beaucoup plus rapidement, sans impacter l’ensemble des services et utilisateurs. Cet
isolement, apporté par les conteneurs, permet d’éviter que tout le service tombe en cas d’erreur.

Comment et où utiliser des conteneurs ?


Linux
Il est tout à fait possible de créer et gérer ses conteneurs dans un écosystème Linux sans devoir payer
quoi que ce soit.

Asad Javed, de l’Université de Aalto, en Finlande, a d’ailleurs publié « How to use Linux Containers
(LXC)vii », une marche à suivre complète permettant à tout le monde d’installer LXC. LXC est un
gestionnaire de conteneurs et de VMs. LXC est un logiciel libre et son code est disponible sur GitHubviii.

Vicques, le vendredi 4 février 2022 6/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Kubernetes est également disponible sur Linux. Il s’agit aussi d’un logiciel libre, qui peut être
télécharger depuis GitHub.

Docker est également disponible sur Linux.

Windows
Sous Windows, nous n’avons pas trouvé d’alternative gratuite à Docker et LXC n’est évidemment pas
supporté. Docker propose toutefois une version gratuite pour un usage personnel. Le prix est de
5$/mois pour une utilisation pro et individuelle.

Figure 5 : Docker pricingix

Ensuite, le prix de la licence grimpe et dépend du nombre d’utilisateurs, de requêtes par jour et des
services supplémentaires que l’utilisateur souhaite (audits logs, image access management, etc.).

Cloud
Evidemment, tous les grands fournisseurs de services Cloud proposent de la conteneurisation. Pour ce
rapport, nous allons nous concentrer sur les 3 acteurs majeurs, à savoir Amazon avec AWS, Microsoft
avec Azure et Google avec Google Cloud.

AWS
Le service proposé par AWS s’appelle AWS Elastic Container Service (ECS). Il supporte Docker ainsi que
Fargate, une technologie propriétaire d’AWS. Il est possible d’y faire fonctionner des applications sur
le long terme, des micro-services, des batch jobs ainsi que des applications de machine learning. L’offre
d’AWS intègre une quantité d’autres services, notamment Elastic Container Service for Kubernetes. Il
s’agit du leader incontesté du marché du Cloud avec 41.5% de part de marché. La tarification n’est pas
clairement affichée sur le site Internet d’AWS.

Azure
Azure propose Azure Kubernetes Services (AKS). Tout comme AWS, Azure propose une vaste quantité
de services supplémentaires, comme Azure Ressources Manager et Terraform. Azure est le second
acteur, avec une part de marché de près de 30%. Bien que la tarification ne soit pas clairement
accessible, Azure propose un calculateur en ligne :

Vicques, le vendredi 4 février 2022 7/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

https://azure.microsoft.com/en-us/pricing/calculator/?service=kubernetes-service

Google Cloud
Google Cloud propose, quant à lui Google Kubernetes Engie, qui fonctionne avec également Docker.
De tous les prestataires Cloud dans le domaine de la conteneurisation, c’est le fournisseur qui semble
le plus agile.

C’est également le seul à proposer une grille de tarification claire, à l’heure ou mensuel, comme illustré
ci-dessous :

Comment conteneuriser une application ?


Marche à suivre LXC
Nous allons maintenant vous donner une marche à suivre afin de créer votre premier conteneur.

Installer LXC sur Linux


Nous allons nous inspirer de la marche à suivre crée par digitaloceanx pour ce qui suit. Tout le crédit
leur revient. Pour installer LXC, commencez par ouvrir un terminal de commande. Ensuite, tapez la
commande suivante : $ sudo snap install lxd

LXC est désormais installé sur votre machine. Tapez ensuite $ sudo lxd init

Vous pourrez ensuite configurer LXD. Dans cet exemple, nous utilisons la configuration par défaut.
Taper « Enter » jusqu’à la fin de la configuration. Votre console devrait ensuite ressembler à l’image
ci-dessous :

Vicques, le vendredi 4 février 2022 8/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Créer un conteneur
Maintenant que vous avez configurer avec succès LXD, vous êtes prêt à créer et gérer votre premier
conteneur. Dans LXD, vous pouvez gérer les conteneurs en utilisant la commande lxc suivie d’une
action, comme list, launch, start, stop et delete.

Tapez la commande suivante pour voir tous les conteneurs disponibles installés : $ lxc list

Votre terminal devrait ressembler à ceci :

Maintenant, vous allez créer un conteneur qui va utiliser Nginx. Pour ce faire, commencez par lancer
la commande lxc launch pour créer et lancer un conteneur nommé webserver sur Ubuntu 18.04 avec
la commande suivante : $ lxc launch ubuntu:20.04 webserver

Créez le conteneur webserver. Le 20.04 est un raccourci pour Ubuntu 20.04 et ubuntu : est l’identifiant
pour le répertoire

Comme vous créez un conteneur pour la première fois, cette commande télécharge l’image du
conteneur depuis Internet et la met en cache.

A la complétion, votre terminal devrait ressembler à ceci :

Voici ce que vous devriez voir si vous réinscrivez la commande $ lxc list

Le serveur DHCP de LXD nous fourni cette adresse IP et, dans la plupart des cas, elle ne change pas
même si le serveur est redémarré.

Déployer une application dans un conteneur


Maintenant, vous allez vous connecter à votre conteneur webserver en utilisant la commande $ lxc
shell webserver

Cette shell, bien qu’exécutée en root, est limitée au conteneur. Tout ce que vous allez exécuter ici
reste dans le conteneur et ne peut pas s’échapper. Maintenant, exécutez les commandes usuelles
$ sudo apt-get update && sudo apt-get upgrade -y pour mettre à jour votre
conteneur.

Vicques, le vendredi 4 février 2022 9/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Tapez ensuite $ apt install nginx pour installer Nginx. Vous allez maintenant éditer votre
page web par défaut Nginx en ajoutant 2 lignes de texte qui vont montrer clairement que ce site est
hébergé dans notre conteneur webserver.

En utilisant votre éditeur de texte favori, ouvrez le fichier /var/www/html/index.nginx-debian.html


Nous avons éditer notre texte pour refléter le lien avec notre rapport, mais vous pouvez le configurer
comme bon vous semble.

Maintenant, vous pouvez quitter votre webserveur en tapant simplement logout

Maintenant, vous allez tester si votre webserver fonctionne en utilisant la commande $ curl
http://adresse_ip_de_votre_conteneur, dans notre cas il s’agit de 10.89.78.73.

Vicques, le vendredi 4 février 2022 10/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Félicitations ! Vous venez de déployer votre première application dans votre premier conteneur !

Conclusion
La conteneurisation des applications se propage rapidement. L’efficacité et la rapidité avec laquelle il
est possible de gérer ses services ainsi que la possibilité d’avoir un uptime de près de 100% du temps
font de cette technologie une réelle révolution dans la manière de penser, de programmer et de
vendre un service.

Vicques, le vendredi 4 février 2022 11/12


63-13.2 - Infrastructures informatiques Olivier Mouttet

Sources
i
Figure 1 : https://azure.microsoft.com/fr-fr/overview/what-is-a-virtual-machine/#overview
ii
Source : https://azure.microsoft.com/fr-fr/overview/what-is-a-virtual-machine/#overview
iii
Figure 2 : https://www.docker.com/sites/default/files/d8/styles/large/public/2018-11/container-what-is-
container.png?itok=vle7kjDj
iv
https://docs.microsoft.com/fr-fr/virtualization/windowscontainers/about/containers-vs-vm
v
Figure 3 : https://blog.kumina.nl/wp-content/uploads/2017/03/Containers_vs_Virtual-Machines-800x520.png
vi
Figure 4 : https://developer.ibm.com/articles/why-should-we-use-microservices-and-containers/
vii
https://www.blackmagicboxes.com/wp-content/uploads/2016/12/How_to_use_Linux_Containers.pdf
viii
https://linuxcontainers.org/lxd/introduction/
ix
Figure 5 : https://www.docker.com/pricing
x
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-lxd-on-ubuntu-20-04

Vicques, le vendredi 4 février 2022 12/12

Vous aimerez peut-être aussi