2. Plan
I. Docker, c’est quoi ?
II. Conteneur vs Machine virtuelle
III. Ecosystème
IV. Sécurité
V. Conclusion
2
3. Docker, c’est quoi ?
• Fournit une enveloppe uniforme autour
d’un logiciel : «Build, Ship and Run Any
App, Anywhere» [www.docker.com]
• Docker est un outil qui peut empaqueter une application et ses
dépendances dans un conteneur isolé, qui pourra être exécuté sur
n'importe quel serveur [Wikipedia]
3
4. Docker, c’est quoi ?
• Repose sur LXC (Linux Containers) de Linux (équivalent Windows :
Windows Server Container).
• Repose sur 2 fonctionnalités du noyau linux
• Cgroup : control groups: limiter/délimiter l'utilisation des ressources
• Namespace : Cloisonnement des espaces de nommage : un group ne peux
accéder aux ressources des autres groupes
• « Une VM » extrêmement légère : on peut faire ssh, installer des
packet, avoir acces root, config des lib ..
4
8. Pourquoi utiliser docker
• Le déploiement
• Fiable, rapide et consistant : Un conteneur qui fonctionne sur une machine avec
une distribution X, fonctionnera sur une autre machine avec une distribution Y.
• Pas de gestion de version de package, lib, compilateur etc..
• Force les bonnes pratiques (microservice, documentation ..)
• Le développement
• Avoir le même env de dev qu'en prod, si ça marche quelque part, ça marchera
partout.
• Tester avec plusieurs versions d'un même logiciel sur la même machine ..
• Compilation/Exécution multi-[os—jvm—tools—...]
• Installer des applications
• Facile et rapide grâce à la multitude d'outils proposés par Docker 8
9. Pourquoi utiliser docker
Faciliter les tests
• Tests unitaires avec une BDD unique (vérifier le user…) :
si un test ne marche pas les suivants aussi
-> Solution :
• Mettre la BDD dans un conteneur puis lancer plusieurs instances
(FIG)
• Utilisation de conteneurs préchargés avec des data pour les tests
-> Une architecture de test plus agile : chaque container peut
intégrer une brique de l'application
9
10. Pourquoi utiliser docker
Isolation
• Isoler un processus et ses dépendances :
• Réseau (IP, routage, firewall unique par conteneur)
• Filesystem
• Utilisateurs/groupes
• Contrôle et limitation de la consommation de ressources (CPU, RAM ..)
• Diminution de la surface d’attaque (sécurité accrue)
• Gestion de vulnérabilité : mise à jour d’une des couches, test, ...
10
11. • La VM a sa propre infrastructure
• Beaucoup de composants pas
forcement indispensables :
Garage, jardin, piscine …
11
Conteneur != VM
• Les appartements se partagent
la même infrastructure
• Plusieurs variétés selon le besoin
: Studio, T2..
13. 13
Conteneur != VM
VM Docker
Un OS complet avec ses lib, pilotes..
Indiquer la ram à utiliser, le nombre de
CPU, disque dur virtuel ...
Le minimum nécessaire, pas d’OS, mais un
rootfs (le /) qui contient les bibliothèques
et les binaires nécessaires.
Migration relativement lente Plus facile à migrer, à sauvegarder..
VM provisionnée en secondes/minutes Se lance en millisecondes
Beaucoup de couches : perte de
performance : entre natif et virtualisé,
même si hyperviseur performant (xen..)
Densité plus élevé que les VM : Possibilité
d’héberger beaucoup plus de conteneurs
15. Dois je me débarrasser des VM ?
• Non , ou pas encore
• Pas mal d'application pour lesquelles ça n’a pas de sens d'utiliser des
conteneurs : contraintes de sécurité, d'isolation..
• Utiliser des Dockers si le gain de performance est justifiable et
important, (si 10k VM avec 5% )
• Docker n'est pas cross-platform. On lance des conteneurs Linux sous
Linux, des conteneurs Windows sous Windows.
15
17. Docker Engine
• Gestion de l’interaction des conteneurs avec l’OS
• Gestion des privilèges et des ressources : Plusieurs niveaux
d’imbrication : lancer docker-in-docker voire VM-in-docker…
• Hyperviseur de conteneurs
• Local host ou serveur distant
• Construire des images de conteneurs et les partager grâce a la
repository (run commit)
17
18. Docker Engine
• Scalabilité
• L’accessibilité des conteneurs par les API
• La portabilité : migration à chaud ou à froid
• Simulation d’OS différents de l’OS hôte
• Serveur X dans conteneur : desktop complet dans conteneur
18
19. Docker Hub
• Ensemble de services sur le cloud
• Registres publiques/privés d’images Docker
• Si on choisi Debian : il va appeler docker hub : énorme bibliothèque :
télécharger Debian en local
19
20. 20
• Créer une image docker étape par étape : build
• Peut être versionné dans un système tel que Git ou SVN
• Docker Hub peut automatiquement créer des images basées sur des
DockerFiles sur Github.
DockerFile
21. • Une image Docker : le système de fichiers, sans les processus : Un
conteneur dans un état inerte.
• Créées à partir de fichiers de configuration, nommés “Dockerfile”
• Persistance des données
21
Docker Image
24. • Permet de “composer” un ensemble de container sur une seule et
même machine, mais également de “scaler” les containers toujours sur
un même serveur
24
Docker Compose
25. • Comment orchestrer un ensemble de containers non plus sur un seul
serveur, mais répartis sur plusieurs serveurs ?
25
Docker Swarm
27. Sécurité
• La configuration par défaut n’est pas suffisante
• Créer une partition séparée pour Docker :
/var/lib/docker : Une image pourrait volontairement occuper tout
l’espace du système hôte -> Créer une partition logique ou physique
• Interdire les communications entre les containers : Possible par défaut.
Une mauvaise image pourrait donc faire du sniffing sur le sous-réseau
Docker
27
28. Sécurité
• Ne pas utiliser n’importe quel registre
• Ne mapper que les ports utiles
• Ne pas utiliser privileged pour n’importe quel image : Accès
à tous les droits, dont le lancement de nouveaux container
• Créer un utilisateur dans votre Dockerfile pour ne pas utiliser
root
28