SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
Les conteneurs
François Travais
2021/01/11
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 2
● Un peu d’histoire
● Un conteneur en bref
● Les standards
○ Open Container Initiative - Image Spec
○ Open Container Initiative - Runtime Spec
● Docker et les container engines
● Les runtimes
○ Native runtimes
○ Sandbox runtimes
○ Virtualized runtimes
○ Windows runtime
● Les builders
● Kubernetes Container Runtime Interface
● Les OS optimisés pour les conteneurs
● Les autres outils
● Articles
Sommaire
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 3
● 2000 : FreeBSD jails
○ Première initiative de conteneurisation d’une application
● 2001 : naissance du projet Linux-VServer
○ Isolation au niveau du Kernel
● 2005 : Solaris Zones
○ Environnement OS virtualisé
● 2007 : introduction des cgroups dans le kernel linux
○ Initialement développé par Google
○ Limitations des ressources CPU, RAM…
● 2008 : naissance de LXC, outillage bas-niveau pour conteneurs
○ Combine les différents outils bas niveau pour faciliter la création de conteneurs
● 2013 : naissance de Docker
○ Nommé dotCloud à cette époque
○ Au début, outillage autour de LXC pour le rendre plus user-friendly
● 2015 : Docker et les autres acteurs majeurs fondent l’OCI
○ Open Container Initiative, hébergé par la Linux Foundation
○ Docker donne libcontainer et runc
○ Pose les base des futurs standards
Un peu d’histoire
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 4
Qu’est-ce qu’un conteneur ?
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 5
Le principe : une application packager et isolée
Comment : une composition de fonctionnalités du kernel Linux :
● Les namespaces : isolation des PIDs, mounts, interfaces réseaux…
● Les cgroups : isolation des ressources CPU et RAM
● Les Linux Security Modules comme seccomp, SELinux, AppArmor...
Les bénéfices :
● Reproductibilité
● Portabilité
● Facilité d’utilisation et de partage
● Flexibilité et facilité d’administration
Un conteneur applicatif
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 6
Les standards de l’Open Container Initiative
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 7
● Une OCI Image est composée de:
○ Un système de fichiers disposés en couche
○ Un manifest d’image (compatibilité OS, référence au filesystem...)
○ Une configuration d’image (arguments de l’application, variables d’environnements...)
● Cette image est construite par un builder
OCI - Image spec
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 8
● L’OCI image est décompressée en un OCI Filesystem Bundle
● l’OCI Filesystem Bundle est alors exécuté par l’OCI Runtime
Exemple d’utilisation de runc, le runtime officiel d’OCI :
OCI - Runtime spec
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 9
Docker et les autres container engines
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 10
Des outils en ligne de commande pour gérer toutes les étapes des standards de l’OCI
● Docker
○ L’incontournable by Moby
○ Utilise Containerd en interne
○ Utilise son propre manifest d’image (docker image v2.2)
● Podman
○ Le challenger by Red Hat
○ Daemonless et rootless
○ Docker CLI compatible
● Containerd
○ Donné à la CNCF par Docker
○ OCI et CRI compliant
○ Hébergé par la CNCF
● PouchContainer
○ By Alibaba
○ OCI et CRI compliant
○ Utilise containerd et BuildKit en interne
● LXD
○ Surcouche de LXC by Canonical
○ Se concentre sur les conteneurs systèmes, pas applicatifs
Container Engines
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 11
Containerd
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 12
Les runtimes
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 13
Les natives runtimes font tourner des OCI Filesystem Bundle en ré-utilisant le kernel de
l’OS hôte
● runc
○ L’implémentation de référence de l’OCI
○ Donnée par Docker à la création de l’OCI
○ Écrit en Go
○ Utilisé par défaut par Containerd et CRI-O, et donc par Docker et PouchContainer par extension
● crun
○ Le challenger by Red Hat
○ Écrit en C
○ Plus performant que runc
○ Supporte cgroups v2
○ Runtime par défaut sous RHEL 8
○ Runtime par défaut de podman sur les système supportant les cgroups v2
● lxc
○ L’historique by Canonical
○ Se concentre sur les conteneurs systèmes, pas applicatifs
Native runtimes
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 14
Les sandbox runtimes font tourner des OCI Filesystem Bundle en utilisant la technique du
kernel proxy layer
Le but est d’isoler un peu plus la machine hôte des containers pour des raisons de
sécurité en limitant les appels au kernel et en ajoutant une couche d’interface
Induit une perte de performance mais malgré tout plus efficace qu’un hyperviseur
classique
● gVisor
○ Implémente un grande partie des interfaces d’un kernel Linux
○ Combine l’approche de la VM avec celle d’un SELinux ou AppArmor (rule-based security policies)
○ L’OCI runtime est appelé runsc
● Nabla containers
○ N’implémente que 7 appels système du kernel linux
○ L’OCI runtime est appelé runnc
Sandbox runtimes
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 15
Les virtualized runtimes font tourner des OCI Filesystem Bundle dans une micro VM
La micro VM tourne directement sur l’hyperviseur et dispose de son propre kernel.
Induit une perte de performance mais malgré tout plus efficace qu’un hyperviseur
classique
● Kata containers
○ Compatible CRI
○ Fusion d’Intel Clear Containers et d’Hyper.sh RunV
○ Hébergé par l’Open Infrastructure Foundation, anciennement OpenStack Foundation
○ Utilisé en prod par les géants chinois (Alibaba, Huawei, Baidu, Tencent...); Intel, Apple et Red Hat
impliqués
● OSv
○ N’est pas compatible avec les spécifications OCI
○ Financé par l’Union Européenne et lancé en 2015
● Firecracker
○ VMM dédié au MicroVMs, utilise KVM, alternative à QEMU
○ Supporte entre autres containerd, Kata containers, OSv
○ Par AWS et utilisé dans Fargate et Lambda
○ Focalisé sur la rapidité : 125ms pour déployer une app, 150 microVM / s / VM hôte
○ Écrit en Rust
Virtualized runtimes
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 16
Hcsshim by Microsoft…
voilà, je n’ai pas envie de gratter plus que ça
Windows runtime
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 17
Les builders
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 18
Un builder permet de créer une OCI Image à partir d’un Dockerfile/Containerfile, ou pas
● BuildKit
○ Le builder de Docker Engine
○ Composé d’un daemon et d’un client
Les builders rootless et daemonless :
● umoci
○ Implémentation de référence de l’OCI
○ Très bas niveau, n’utilise pas le format containerfile/Dockerfile
● Buildah
○ Permet de créer des images en utilisant les commandes de la machine hôte (bash, dnf...)
○ Le builder de Podman par Red Hat
● Kaniko
○ Le container de build par Google
● img
○ Build stages en parallèle
○ Utilise une partie de BuildKit
● Jib
○ Plugin maven pour build des containers
○ Par Google
● Bazel
○ Via docker_rules
Les Builders
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 19
Kubernetes Container Runtime Interface
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 20
L’interface entre Kubernetes et un OCI Runtime. CRI pour les intimes.
● dockershim
○ La première implémentation
○ Couche d’abstraction sur docker
○ Déprécié à partir de Kubernetes v1.20
● Containerd
○ Permet d’utiliser beaucoup d’autres runtime comme runc (par défaut), Firecracker, gVisor, Kata...
● Cri-o
○ Implémentation légère de CRI by Red Hat
○ Utilise crun sur les OS supportant cgroups v2, sinon runc
○ CNCF Incubating
● Kata container
○ Via Kata Shim v2
● PouchContainer
○ Support natif à CRI, CSI, CNI...
● Frakti
○ Officieusement déprécié en faveur de Containerd et Kata containers
Kubernetes Container Runtime Interface
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 21
Les OS optimisés pour les conteneurs
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 22
OS optimisés pour les conteneurs, c’est à dire :
● Avec des mécanismes de mise à jour automatique
● Les mises à jours sont atomiques et réversibles
● L’OS est immutable
Les principaux acteurs :
● Fedora CoreOS et RHEL CoreOS
○ Fusion de CoreOS Container Linux et d’Atomic Host
○ CoreOS Container Linux était la référence avant le rachat par Red Hat
● OpenSUSE MicroOS et Kubic
○ Similaire à CoreOS, mais par SUSE
● VMWare Photon OS
○ Optimisé pour VSphere
○ Semble un peu vieillissant
● Rancher OS
○ Tout est basé sur Docker
○ Ne semble plus trop mis en avant par Rancher
Les OS optimisés pour les conteneurs
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 23
Les autres outils
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 24
Pour la manipulation des images Docker et OCI
● Skopeo
○ by Red Hat
○ Permet entre autres de convertir des manifests d’images docker en OCI
Pour l’introspection des images Docker et OCI
● Dive
○ Inspection du conteneur d’une image OCI ou Docker couche par couche
Les autres outils
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 25
Conclusion
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 26
Docker n’est maintenant qu’un outils parmi tant d’autres dans un écosystème très riche.
l’OCI a posé des bases saines pour une diversification des outils
Kubernetes est aussi omniprésent que l’étais Docker à ses débuts.
Conclusion
Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 27
Présentations globales de l’écosystème des conteneurs
● A Comprehensive Container Runtime Comparison by Capital One
○ A Comprehensive Container Runtime Comparison
● Demystifying Containers by Suse
○ Demystifying Containers - Part I: Kernel Space | SUSE Communities
○ Demystifying Containers – Part II: Container Runtimes | SUSE Communities
○ Demystifying Containers – Part III: Container Images | SUSE Communities
○ Demystifying Containers – Part IV: Container Security | SUSE Communities
● Build containers the hard way
○ Build Containers the Hard Way (WIP) - Build Containers the Hard Way
● Tuto podman, buildah et Kaniko
○ Docker Images Without Docker - A Practical Guide
Les articles
François Travais
Architecte technique

Contenu connexe

Tendances

Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec Docker
Luis Lopez
 

Tendances (20)

Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
 
Open Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarqueOpen Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarque
 
Tadx - Présentation Conteneurisation
Tadx -  Présentation ConteneurisationTadx -  Présentation Conteneurisation
Tadx - Présentation Conteneurisation
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016
Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016
Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016
 
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
 
Intro docker
Intro dockerIntro docker
Intro docker
 
Introduction à Docker et Gaudi
Introduction à Docker et GaudiIntroduction à Docker et Gaudi
Introduction à Docker et Gaudi
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 
Docker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiqueDocker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatique
 
Docker - YaJUG
Docker  - YaJUGDocker  - YaJUG
Docker - YaJUG
 
Gdg lille-intro-to-kubernetes
Gdg lille-intro-to-kubernetesGdg lille-intro-to-kubernetes
Gdg lille-intro-to-kubernetes
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ?
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
A la découverte de docker
A la découverte de dockerA la découverte de docker
A la découverte de docker
 
Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec Docker
 
Docker du mythe à la réalité
Docker du mythe à la réalitéDocker du mythe à la réalité
Docker du mythe à la réalité
 

Similaire à Introduction aux conteneurs - Agaetis

Similaire à Introduction aux conteneurs - Agaetis (20)

What is Docker
What is Docker What is Docker
What is Docker
 
DevOps 3 - Docker.pdf
DevOps 3 - Docker.pdfDevOps 3 - Docker.pdf
DevOps 3 - Docker.pdf
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx
709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx
709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
Prise en main de Docker
Prise en main de DockerPrise en main de Docker
Prise en main de Docker
 
Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?
 
Vulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers DockerVulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers Docker
 
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et DerueGab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
 
Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...
Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...
Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
 
docker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyugdocker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyug
 
Open Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarquesOpen Wide : Les outils pour le développement des systemes embarques
Open Wide : Les outils pour le développement des systemes embarques
 
Gab2015 Jean-Marie Crommen Docker sur Azure
Gab2015 Jean-Marie Crommen Docker sur AzureGab2015 Jean-Marie Crommen Docker sur Azure
Gab2015 Jean-Marie Crommen Docker sur Azure
 
SUSE Expert Days Paris 2018 – CaaSP
SUSE Expert Days Paris 2018 – CaaSPSUSE Expert Days Paris 2018 – CaaSP
SUSE Expert Days Paris 2018 – CaaSP
 
Architecture android
Architecture androidArchitecture android
Architecture android
 
OpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse FaureOpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse Faure
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & Kubernetes
 
Afterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et DockerAfterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et Docker
 

Introduction aux conteneurs - Agaetis

  • 2. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 2 ● Un peu d’histoire ● Un conteneur en bref ● Les standards ○ Open Container Initiative - Image Spec ○ Open Container Initiative - Runtime Spec ● Docker et les container engines ● Les runtimes ○ Native runtimes ○ Sandbox runtimes ○ Virtualized runtimes ○ Windows runtime ● Les builders ● Kubernetes Container Runtime Interface ● Les OS optimisés pour les conteneurs ● Les autres outils ● Articles Sommaire
  • 3. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 3 ● 2000 : FreeBSD jails ○ Première initiative de conteneurisation d’une application ● 2001 : naissance du projet Linux-VServer ○ Isolation au niveau du Kernel ● 2005 : Solaris Zones ○ Environnement OS virtualisé ● 2007 : introduction des cgroups dans le kernel linux ○ Initialement développé par Google ○ Limitations des ressources CPU, RAM… ● 2008 : naissance de LXC, outillage bas-niveau pour conteneurs ○ Combine les différents outils bas niveau pour faciliter la création de conteneurs ● 2013 : naissance de Docker ○ Nommé dotCloud à cette époque ○ Au début, outillage autour de LXC pour le rendre plus user-friendly ● 2015 : Docker et les autres acteurs majeurs fondent l’OCI ○ Open Container Initiative, hébergé par la Linux Foundation ○ Docker donne libcontainer et runc ○ Pose les base des futurs standards Un peu d’histoire
  • 4. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 4 Qu’est-ce qu’un conteneur ?
  • 5. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 5 Le principe : une application packager et isolée Comment : une composition de fonctionnalités du kernel Linux : ● Les namespaces : isolation des PIDs, mounts, interfaces réseaux… ● Les cgroups : isolation des ressources CPU et RAM ● Les Linux Security Modules comme seccomp, SELinux, AppArmor... Les bénéfices : ● Reproductibilité ● Portabilité ● Facilité d’utilisation et de partage ● Flexibilité et facilité d’administration Un conteneur applicatif
  • 6. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 6 Les standards de l’Open Container Initiative
  • 7. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 7 ● Une OCI Image est composée de: ○ Un système de fichiers disposés en couche ○ Un manifest d’image (compatibilité OS, référence au filesystem...) ○ Une configuration d’image (arguments de l’application, variables d’environnements...) ● Cette image est construite par un builder OCI - Image spec
  • 8. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 8 ● L’OCI image est décompressée en un OCI Filesystem Bundle ● l’OCI Filesystem Bundle est alors exécuté par l’OCI Runtime Exemple d’utilisation de runc, le runtime officiel d’OCI : OCI - Runtime spec
  • 9. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 9 Docker et les autres container engines
  • 10. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 10 Des outils en ligne de commande pour gérer toutes les étapes des standards de l’OCI ● Docker ○ L’incontournable by Moby ○ Utilise Containerd en interne ○ Utilise son propre manifest d’image (docker image v2.2) ● Podman ○ Le challenger by Red Hat ○ Daemonless et rootless ○ Docker CLI compatible ● Containerd ○ Donné à la CNCF par Docker ○ OCI et CRI compliant ○ Hébergé par la CNCF ● PouchContainer ○ By Alibaba ○ OCI et CRI compliant ○ Utilise containerd et BuildKit en interne ● LXD ○ Surcouche de LXC by Canonical ○ Se concentre sur les conteneurs systèmes, pas applicatifs Container Engines
  • 11. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 11 Containerd
  • 12. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 12 Les runtimes
  • 13. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 13 Les natives runtimes font tourner des OCI Filesystem Bundle en ré-utilisant le kernel de l’OS hôte ● runc ○ L’implémentation de référence de l’OCI ○ Donnée par Docker à la création de l’OCI ○ Écrit en Go ○ Utilisé par défaut par Containerd et CRI-O, et donc par Docker et PouchContainer par extension ● crun ○ Le challenger by Red Hat ○ Écrit en C ○ Plus performant que runc ○ Supporte cgroups v2 ○ Runtime par défaut sous RHEL 8 ○ Runtime par défaut de podman sur les système supportant les cgroups v2 ● lxc ○ L’historique by Canonical ○ Se concentre sur les conteneurs systèmes, pas applicatifs Native runtimes
  • 14. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 14 Les sandbox runtimes font tourner des OCI Filesystem Bundle en utilisant la technique du kernel proxy layer Le but est d’isoler un peu plus la machine hôte des containers pour des raisons de sécurité en limitant les appels au kernel et en ajoutant une couche d’interface Induit une perte de performance mais malgré tout plus efficace qu’un hyperviseur classique ● gVisor ○ Implémente un grande partie des interfaces d’un kernel Linux ○ Combine l’approche de la VM avec celle d’un SELinux ou AppArmor (rule-based security policies) ○ L’OCI runtime est appelé runsc ● Nabla containers ○ N’implémente que 7 appels système du kernel linux ○ L’OCI runtime est appelé runnc Sandbox runtimes
  • 15. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 15 Les virtualized runtimes font tourner des OCI Filesystem Bundle dans une micro VM La micro VM tourne directement sur l’hyperviseur et dispose de son propre kernel. Induit une perte de performance mais malgré tout plus efficace qu’un hyperviseur classique ● Kata containers ○ Compatible CRI ○ Fusion d’Intel Clear Containers et d’Hyper.sh RunV ○ Hébergé par l’Open Infrastructure Foundation, anciennement OpenStack Foundation ○ Utilisé en prod par les géants chinois (Alibaba, Huawei, Baidu, Tencent...); Intel, Apple et Red Hat impliqués ● OSv ○ N’est pas compatible avec les spécifications OCI ○ Financé par l’Union Européenne et lancé en 2015 ● Firecracker ○ VMM dédié au MicroVMs, utilise KVM, alternative à QEMU ○ Supporte entre autres containerd, Kata containers, OSv ○ Par AWS et utilisé dans Fargate et Lambda ○ Focalisé sur la rapidité : 125ms pour déployer une app, 150 microVM / s / VM hôte ○ Écrit en Rust Virtualized runtimes
  • 16. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 16 Hcsshim by Microsoft… voilà, je n’ai pas envie de gratter plus que ça Windows runtime
  • 17. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 17 Les builders
  • 18. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 18 Un builder permet de créer une OCI Image à partir d’un Dockerfile/Containerfile, ou pas ● BuildKit ○ Le builder de Docker Engine ○ Composé d’un daemon et d’un client Les builders rootless et daemonless : ● umoci ○ Implémentation de référence de l’OCI ○ Très bas niveau, n’utilise pas le format containerfile/Dockerfile ● Buildah ○ Permet de créer des images en utilisant les commandes de la machine hôte (bash, dnf...) ○ Le builder de Podman par Red Hat ● Kaniko ○ Le container de build par Google ● img ○ Build stages en parallèle ○ Utilise une partie de BuildKit ● Jib ○ Plugin maven pour build des containers ○ Par Google ● Bazel ○ Via docker_rules Les Builders
  • 19. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 19 Kubernetes Container Runtime Interface
  • 20. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 20 L’interface entre Kubernetes et un OCI Runtime. CRI pour les intimes. ● dockershim ○ La première implémentation ○ Couche d’abstraction sur docker ○ Déprécié à partir de Kubernetes v1.20 ● Containerd ○ Permet d’utiliser beaucoup d’autres runtime comme runc (par défaut), Firecracker, gVisor, Kata... ● Cri-o ○ Implémentation légère de CRI by Red Hat ○ Utilise crun sur les OS supportant cgroups v2, sinon runc ○ CNCF Incubating ● Kata container ○ Via Kata Shim v2 ● PouchContainer ○ Support natif à CRI, CSI, CNI... ● Frakti ○ Officieusement déprécié en faveur de Containerd et Kata containers Kubernetes Container Runtime Interface
  • 21. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 21 Les OS optimisés pour les conteneurs
  • 22. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 22 OS optimisés pour les conteneurs, c’est à dire : ● Avec des mécanismes de mise à jour automatique ● Les mises à jours sont atomiques et réversibles ● L’OS est immutable Les principaux acteurs : ● Fedora CoreOS et RHEL CoreOS ○ Fusion de CoreOS Container Linux et d’Atomic Host ○ CoreOS Container Linux était la référence avant le rachat par Red Hat ● OpenSUSE MicroOS et Kubic ○ Similaire à CoreOS, mais par SUSE ● VMWare Photon OS ○ Optimisé pour VSphere ○ Semble un peu vieillissant ● Rancher OS ○ Tout est basé sur Docker ○ Ne semble plus trop mis en avant par Rancher Les OS optimisés pour les conteneurs
  • 23. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 23 Les autres outils
  • 24. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 24 Pour la manipulation des images Docker et OCI ● Skopeo ○ by Red Hat ○ Permet entre autres de convertir des manifests d’images docker en OCI Pour l’introspection des images Docker et OCI ● Dive ○ Inspection du conteneur d’une image OCI ou Docker couche par couche Les autres outils
  • 25. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 25 Conclusion
  • 26. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 26 Docker n’est maintenant qu’un outils parmi tant d’autres dans un écosystème très riche. l’OCI a posé des bases saines pour une diversification des outils Kubernetes est aussi omniprésent que l’étais Docker à ses débuts. Conclusion
  • 27. Agaetis 2020 © Reproduction et diffusion interdite sans autorisation préalable 27 Présentations globales de l’écosystème des conteneurs ● A Comprehensive Container Runtime Comparison by Capital One ○ A Comprehensive Container Runtime Comparison ● Demystifying Containers by Suse ○ Demystifying Containers - Part I: Kernel Space | SUSE Communities ○ Demystifying Containers – Part II: Container Runtimes | SUSE Communities ○ Demystifying Containers – Part III: Container Images | SUSE Communities ○ Demystifying Containers – Part IV: Container Security | SUSE Communities ● Build containers the hard way ○ Build Containers the Hard Way (WIP) - Build Containers the Hard Way ● Tuto podman, buildah et Kaniko ○ Docker Images Without Docker - A Practical Guide Les articles