Introduction : Défis rencontrés par les développeurs et admins
Créer les
applications prêtes
pour la production
Distribuer et tester
les applications à
la demande
Exécuter les
applications avec
un service optimal
Docker – de quoi s’agit-il ?
DOCKER EST UNE PLATEFORME DE LOGICIELS CONTENEURISÉS
La vision de la plateforme Docker
http://docker.com/Enterprise
Qu'est ce qu'un conteneur?
machines virtuelles traditionnelles = virtualisation hardware
VM VM VM
Qu'est ce qu'un conteneur?
machines virtuelles traditionnelles = virtualisation hardware
VM VM VM
Qu'est ce qu'un conteneur?
VM VM VM
machines virtuelles traditionnelles = virtualisation hardware
Qu'est ce qu'un conteneur?
VM VM VM
conteneurs = virtualisation système d'exploitation (OS)
Applications
Kernel
machines virtuelles traditionnelles = virtualisation hardware
Qu'est ce qu'un conteneur?
VM VM VM
conteneurs = virtualisation système d'exploitation (OS)
Applications
Kernel
machines virtuelles traditionnelles = virtualisation hardware
CONTAINER CONTAINER CONTAINER
Qu'est ce qu'un conteneur?
VM VM VM
conteneurs = virtualisation système d'exploitation (OS)
Applications
Kernel
machines virtuelles traditionnelles = virtualisation hardware
CONTAINER CONTAINER CONTAINER
Qu'est ce qu'un conteneur?
VM VM VM
conteneurs = virtualisation système d'exploitation (OS)
Applications
Kernel
machines virtuelles traditionnelles = virtualisation hardware
CONTAINER CONTAINER CONTAINER
Windows Server Containers
vitesse et densité maximales
CONTAINER CONTAINER CONTAINER
Qu'est ce qu'un conteneur?
VM VM VM
conteneurs = virtualisation système d'exploitation (OS)
Applications
Kernel
machines virtuelles traditionnelles = virtualisation hardware
CONTAINER CONTAINER CONTAINER
Windows Server Containers
vitesse et densité maximales
CONTAINER CONTAINER CONTAINER
Hyper-V Containers
Isolation et performance
Kernel
CONTAINER
Kernel
CONTAINER
Kernel
CONTAINER
Un peu de vocabulaire sur les conteneurs
Docker Image
La base d’un conteneur Docker. Représente une application complète.
Docker Container
L’unité standard dans laquelle l’application réside et s’exécute.
Docker Engine
Créer, livrer et exécuter les conteneurs Docker sur un hôte physique ou virtuel.
Docker
Ensemble de projets open source pour créer, gérer et distribuer les conteneurs.
Registry Service (Docker Hub or Docker Trusted Registry)
Cloud ou serveur base du service de stockage et distribution de nos images.
Docker Compose
Fichier de définition et d’exécution d’une application multi-conteneurs.
Docker for
Windows
Docker Engine installé et
configuré automatiquement
pour Windows Desktop
Il existe aussi
Docker for MAC
Docker for Linux
Démo : POC MongoDB et Python
• Contexte : nous avions un accès dégradé à notre base. Son origine était la
lecture d’objets très complexes de transactions
• But : vérifier rapidement l’utilisation d’un cache persisté avec MongoDB
• docker run --name my-mongo -d mongo
• docker run --link my-mongo:mongo -d app-utilisant-mongo
• --link : lien réseau vers un conteneur
Quelques instructions du Dockerfile à la loupe
• FROM : Définit l’image de base
• RUN : Exécute une commande sur l’image de base
• EXPOSE : Définit le(s) port(s) d’écoute du container
• VOLUME : Définit un point de montage sur l’hôte ou sur un autre container
• ENTRYPOINT : Configure un container comme un exécutable
Démo : TODOList API et MongoDB
• L’API enregistre une liste de taches dans la base MongoDB
• L’application Angular permet de les gérer avec une interface graphique
• docker-compose –f ./api/docker-compose.yml up
Les patterns du Continuous Delivery
• Automatiser la chaine de construction, tests et déploiement
◦ Construire une seule fois les paquets
◦ Déployer de la même manière sur tous les environnements
◦ Tester les déploiements avec des tests de fumée
◦ Conserver des environnements similaires
• Limiter le risque par des release incrémentales
• Découpler le déploiement et la version (blue-green deployment, canary
releasing, dark launch, feature toggle)
• Réduire la taille du déploiement
• Optimiser pour la résilience
API DB
Create images
(docker build)
Deploy
containers
WebWeb Web
API
API
DB
Docker Registry
Docker Hub/
Repository
Pull
images
Publish
Web DBAPI
Web
• docker pull
• docker login
• docker push
Un exemple usine logicielle de démo
34
ASP.NET Core
Visual Studio
Docker
VSTS BUILD
Compiler, tester, publier
le site
Créer images ASP.NET
Déclencher
la build
Azure Container Service
Mesos / Marathon
Déployer les
conteneurs
Déclencher
le déploiement
Docker Hub
Tirer les images
(docker build)
Publier les images
(docker publish)
Machines Linux,
Windows, ARM
Créer images
(docker build)
GitHub
punlimitlab
Tirer les
sources
Publier les
changements
VSTS Release
Management
Déclencher
la release
Créer images du site
Démarrer le site
Docker délivre des outils ouverts pour aider les développeurs et administrateurs
Docker enables developers and IT admins to build, ship and run any application, anywhere
Build, Ship, Run
Docker aims to deliver open tools to help developers build applications with open APIs to help sysadmins better manage these applications
http://docker.com/company
principalement le fameux : But It works on my PC ! Mais tentons d’être un peu plus précis
Installer et maintenir son poste de développement
Nombreux outils de développements
Plusieurs versions de ces outils
Certains outils utilisés rarement
Certains complexes à installer
Construire et déboguer l’application sur son poste de développement
Application a des dépendances vers la base de données, d’autres services
Déboguer, c’est à dire, reproduire le bogue sur son poste
Créer un environnement complet pour tester, ou la production
En créer un similaire que ce soit pour les tests d’un BA, de l’utilisateur
Infra As Code, Configuration As Code
Déployer en continue les corrections et nouvelles fonctionnalités
Automatiser la chaine de construction, tests et déploiement
Limiter le risque par des release incrémentales
Découpler le déploiement et la version (blue-green, canary, dark launch, feature toggle)
Réduire la taille du déploiement
Optimiser pour la résilience (dans l’iso 9126 le plus proche semble Fiabilité (Reliability) / La tolérance aux fautes (Fault Tolerance)
Assurer la sécurité des applications
Vulnérabilités,
Surface d’exposition
Surveiller les services et agir rapidement
Le monitoring des machines, infrastructure, des services
Les logs pour comprendre …
Ajuster la capacité des applications aux charges
Gagner en productivité
En automatisant tout ce qui peut l’être pour surtout éviter les erreurs (et un peu de temps)
Utiliser des outils commun
http://docker.com/what-docker
L’idée est bien d’avoir une seule plateforme d’outils pour tout.
-> simplicité
-> standard ouvert
-> plateforme CAAS : Container As A Service
Dès la première annonce partenariat avec Microsoft cette idée de 1 docker est très présente
https://news.microsoft.com/2014/10/15/dockerpr
“Developers and organizations that want to create container applications using Docker will be able to use either Windows Server or Linux with the same growing Docker ecosystem of users, applications and tools.”
Le conteneurs docker enveloppent dans un système de fichier tout les outils, logiciels, code, librairies systèmes nécessaires pour exécuter une application. Ils sont dans un package de binaires : une image. Ces images, on les réutilisent pour en construire une nouvelle.
Cela garantie que le logiciel qui s’éxécute sera toujours le même , quelque soit l’environnement . (pas qu’il va toujours fonctionner)
Le conteneur contient l’application et tous les librairies dépendants. Mais partage le même noyau avec les autres conteneurs. Il s’éxécute dans l’espace utilisateur du système, dans des process isolés. (l’espace utilisateur est surtout une notion Linux mais cette isolation est aussi recrée côté Windows). Ils peuvent s’éxécuter sur un ordinateur et sur toute infra (on reviendra dessus avec les orchestrateurs) peuvent être très petits. Gain en densité et en performance de démarrage par rapport à la VM.
La machine virtuelle inclut l’application, les librairies, et l’intégralité de l’OS. donc des Go
Plus de densité
Plus rapide à démarrer
Presentation à Ignite 2016
Microsoft and the container ecosystem : http://microsoft.com/containers
Windows Container Doc’s : http://aka.ms/windowscontainers
Community Link’s: http://aka.ms/windowscontainers/community
L’installation peut être compliqué, demander des heures de recherche
La gestion des dépendances entre les versions d’outils est parfois compliqué
Docker permet d’installer d’une seule manière, tous les outils
Docker permet de construire sur les outils existants, sur une version spécifique si besoin
foundations (fondamentaux)
comprehensive configuration management
continuous integration
continuous testing
https://continuousdelivery.com/foundations/
les patterns (reusable and proven strategy) :
deployment pipeline
Only build packages once
Deploy the same way to every environment
Smoke test your deployments
Keep your environments similar
Low-risk Releases are Incremental (circuit breaker, release change independently)
Decouple Deployment and Release (blue-green, canary, dark launch,feature toggle)
Focus on Reducing Batch Size
Optimize for Resilience (dans l’iso 9126 le plus proche semble Fiabilité (Reliability) / La tolérance aux fautes (Fault Tolerance)
https://continuousdelivery.com/implementing/patterns
Notre démo principale est de faire tourner le site ASP.NET Core "PartsUnlimited" sur un Raspberry PI 2 au sein d'un conteneur Docker Linux. Du pure Geek, personne n'a encore fait cela à notre connaissance ;)
Le Rasperry PI 2 est un objet connecté. Nous enverrons ces données de télémétrie vers IOT Azure.
Nous allons aussi mettre en place un pipeline de build et déploiement avec VSTS, et pousserons les sources modifiées automatiquement vers GitHub. (et pourquoi pas créer une pull request vers le repo d'origine)
Github Base ASPNET conteneur// appli Build
Exécuter les applications avec un service optimal
Les orchestrateurs peuvent être des
Après le déploiements de l’environnement test
To create a blueprint for describing the (micro)services, connections and dependencies between them, gateways, environment variables or the properties for scaling these services, Vamp provides its own domain-specific language (DSL) in a YAML format.