Your browser doesn't support the features required by impress.js, so you
are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome, Safari, or Firefox 10.
Le plan
- Un peu d'Histoire
- Les concepts fondateurs
- Une adoption unanime
- Les paradigmes promus par Docker
- De nouvelles problématiques
- Un déballage de la Toolbox
- La stratégie Docker Inc
- L'écosystème Docker
- Quelques perspectives
Un peu d'Histoire : le synopsis
- Bio Solomon Hykes
- Origine du projet
- La start-up qui aurait du être française
- Choix du Go
- Evolution éclair de l'adoption
- Un soupçon de stats
Un peu d'Histoire : l'ère dotCloud
- 2006 - Solomon Hykes diplômé de l'Epitech
- 2008 - création de dotCloud avec Sébastien Pahl
- Aucun finacement trouvé parmi les business angels français
- Le 1er virage : un changement géographique
- 2010 - Incubation au sein de Y Combinator
- Les start-up de Y Combinator comme early adopters
- "Go, c'est un peu la Suisse des langages modernes"
- 2011 - implantation dans la Silicon Valley
- Demandes récurrentes d'accès à des briques légo du socle dotCloud
Un peu d'Histoire : l'ère Docker
- Le 2ème virage : un changement stratégique
- Modularisation des services internes du PaaS doCloud
- 2013 - ouverture de Docker à l'open source
- Mars 2013 - lancement de Docker Hub
- Septembre 2013 - Red Hat l'intègre à OpenShift
- Fin 2014 - Adoption par Microsoft, Google, Amazon, IBM
- Septembre 2015 - 40% des usages en production
- Novembre 2015 - 1.2 milliards de pulls
- Février 2016 - 2 milliards de pulls / 7000 par min
- Democratisation des PaaS et Caas privés
Le plan
- Un peu d'Histoire
- Les concepts fondateurs
- Une adoption unanime
- Les paradigmes promus par Docker
- De nouvelles problématiques
- Un déballage de la Toolbox
- La stratégie Docker Inc
- L'écosystème Docker
- Quelques perspectives
Les concepts fondateurs
- L'allégorie du container
- Le slogan devOPS
- Le container linux LXC
- En résumé
Concepts fondateurs : L'allégorie du container
Concepts fondateurs : L'allégorie du container
Concepts fondateurs : L'allégorie du container
Concepts fondateurs : L'allégorie du container
Concepts fondateurs : L'allégorie du container
Concepts fondateurs : L'allégorie du container
Concepts fondateurs : L'allégorie du container
Double abstraction du container
Concepts fondateurs : L'allégorie du container
Double abstraction du container Docker
Concepts fondateurs : Le slogan devOPS
"Build, Ship, Run, Any App Anywhere"
Concepts fondateurs : Le slogan devOPS
"Build, Ship, Run, Any App Anywhere"
Concepts fondateurs : Le container linux LXC
Container vs VM
- Une technologie Linux-only
- Le kernel linux de l'hôte partagé avec les containers
- Un container = un processus linux isolé sur un hôte linux
Concepts fondateurs : En résumé
- Un mode de virtualisation léger et rapide
- Initialement basé sur les containers linux LXC
- Une execution isolée
- Avec maitrise des flux (port, montage disque, réseau)
- Un mécanisme de gestion de configuration
- Avec des scripts d'installation versionnés
- Un outil de déploiement sur étagère simple et intégré
- Avec un dépôt central des images à installer
Le plan
- Un peu d'Histoire
- Les concepts fondateurs
- Une adoption unanime
- Les paradigmes promus par Docker
- De nouvelles problématiques
- Un déballage de la Toolbox
- La stratégie Docker Inc
- L'écosystème Docker
- Quelques perspectives
Une adoption unanime : l'ecosystème partenaire
Une adoption unanime : Docker en chiffres
Evolution du nombre de pulls sur le Docker Hub
Une adoption unanime : Docker en chiffres
Les bénéfices quantifiés
Une adoption unanime : Les leviers d'adoption
Les raisons stratégiques d'adoption par les entreprises
- Evolution des applications vers l'architecture Microservices
- Réduction du Time To Marker
- Optimisation des ressources et du nombre de VMs
- Amélioration de la gestion de l'environement opérationnel
- Alignement DevOps
- Portabilité applicative
- Passage au cloud
- Modernisation d'applications lecacy
Le plan
- Un peu d'Histoire
- Les concepts fondateurs
- Une adoption unanime
- Les paradigmes promus par Docker
- De nouvelles problématiques
- Un déballage de la Toolbox
- La stratégie Docker Inc
- L'écosystème Docker
- Quelques perspectives
Les paradigmes promus par Docker
- Les Microservices / Architecture WOA
- Polyglot Programming / Polyglot Persistence
- devOPS
- Infrastructure as code
- Immutable infrastructure
- Continuous Deployment
- Pets vs Cows
- Phoenix servers
- Self healing
- Dynamic partionning
- Scale cube
Les paradigmes promus : Les Microservices
Une définition de James Lewis et Martin Fowler
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.
Les paradigmes promus : Les Microservices
Martin Fowler, "Common characteristics of this new architectural style"
- Componentization via Services
- Organized around Business Capabilities
- Products not Projects
- Smart endpoints and dumb pipes
- Decentralized Governance
- Decentralized Data Management
- Infrastructure Automation
- Design for failure
- Evolutionary Design
Les paradigmes promus : Les Microservices
Un changement d'architecture qui implique de s'adapter
- Vers une augmentation croissante du nombre de services
- du nombre de déploiements
- et donc de la charge d'activité sur les OPS
Les paradigmes promus : Les Microservices
Les compromis à trouver
Les paradigmes promus : Les Microservices
Les défits à relever
- Comment gérer l'explosion du nombre de services, de déploiements, de versions ?
- Comment faciliter les nombreux déploiements ?
- Quelle startégie de versionning applicatif ?
- Comment adminsitrer pléthore de technologies et bases de données ?
Les paradigmes promus : L'esprit Polyglotte
Polyglot Persistence and Programming : The right tool for the job
- Un langage de programmation adapté à chaque situation
- Un type de base approprié à l'usage de la donnée
Le plan
- Un peu d'Histoire
- Les concepts fondateurs
- Une adoption unanime
- Les paradigmes promus par Docker
- De nouvelles problématiques
- Un déballage de la Toolbox
- La stratégie Docker Inc
- L'écosystème Docker
- Quelques perspectives
De nouvelles problématiques
- Discovery backend
- Serice discovery
- Leader election
- Data volume container
- Volume des images
- ...
Le plan
- Un peu d'Histoire
- Les concepts fondateurs
- Une adoption unanime
- Les paradigmes promus par Docker
- De nouvelles problématiques
- Un déballage de la Toolbox
- La stratégie Docker Inc
- L'écosystème Docker
- Quelques perspectives
La Toolbox
- Une présentation
- La Registry comme écrin
- L'Engine au cœur de l'écosystème
- Un Dockerfile a son image
- Le Compose pour la palette
- Le Swarm pour orhcestrer l'essaim
- La Machine
- Le Kitematic
La Toolbox : Une présentation
- Briques Open Source sous licence Apache V2
- Développées en Go ou python pour les plus anciennes
- Basées sur des API REST JSON
- le mantra Docker: “batteries included but swappable"
La Toolbox : Une présentation
Un lexique
Container : instance runtime d'une image
Image : template de container basé sur l'union de couches de filesystems
Registry : dépôt d'images Docker accessibles par l'API Registry
Dockerfile : fichier d'instructions pour la construction d'une image
Docker host : VM basée sur un OS Docker-ready
Docker client : CLI permet d'exécuter des commandes Docker
Docker daemon : process exécutant les commandes Docker
Compose : outil de configuration d'une architecture multi-containers à partir d'un fichier yaml
Swarm : outil de gestion d'un cluster de Docker Hosts comme un seul Docker host virtuel
Machine : outil de création de Docker hosts en local, sur un data center ou sur un cloud provider
La Toolbox : Une présentation
L'environnement d'execution Linux
La Toolbox : Une présentation
Le cycle de vie
La Toolbox : La Registry comme écrin
- Une présentation
- La Registry comme écrin
- L'Engine au cœur de l'écosystème
- Un Dockerfile a son image
- Le Compose pour la palette
- Le Swarm
- La Machine
- Le Kitematic
La Toolbox : La Registry comme écrin
Qu'est-ce que la Registry ?
- Projet Open source Distribution sous licence Apache V2
- Développée en Go
- Un lieu central ou stocker et distribuer des images Docker
- Stocke les différentes couches d'une image
- Stocke la description permettant de construire une image
- Expose l'API Registry aux clients Docker
- En V2 emet des notifications webhook (autoredeploy )
- Docker Hub: registry SaaS (images publiques gratuites )
- Docker Trusted Registry: version on-premise de Docker Hub
La Toolbox : La Registry comme écrin
Quelques astuces pour bien choisir son image
- Vérifier soigneusement le contenu du Dockerfile
- Eviter les images sans github associé
- Préférer une image légère : voir l'onglet tag pour la taille
- Plébiscitée: stars/downloads/forks de DockerHub/GitHub
- Maintenue: repository automated et dates des tags
- Privilégier les images officielles (après portage sur Alpine)
- Embauche de Natanael Copa créateur d'Alpine
- Février 2016 : Hykes annonce le portage des images officielles sur Alpine
La Toolbox : L'Engine au cœur de l'écosystème
- Une présentation
- La Registry comme écrin
- L'Engine au cœur de l'écosystème
- Un Dockerfile a son image
- Le Compose pour la palette
- Le Swarm
- La Machine
- Le Kitematic
La Toolbox : L'Engine au cœur de l'écosystème
Qu'est-ce que l'Engine ?
- Projet Open source Docker sous licence Apache V2
- Développé en Go
- Composé d'un client CLI pour exécuter des commandes
- Au travers de l'API REST Engine
- Exécutées par le daemon du Host
- Les commandes permettent de
- Gérer des images
- Gérer des containers
La Toolbox : L'Engine au cœur de l'écosystème
Le workflow des commandes de base
La Toolbox : L'Engine au cœur de l'écosystème
La Toolbox : L'Engine au cœur de l'écosystème
La Toolbox : L'Engine au cœur de l'écosystème
La Toolbox : L'Engine au cœur de l'écosystème
La Toolbox : L'Engine au cœur de l'écosystème
Quelques astuces pour se simplifier la vie
docker build -t myImage . : nommer/tagger ses images
docker rmi $(docker images -aq) : supprimer toutes les images
docker run --name myName myImage : nommer ses containers
docker ps -a : afficher tous les containers
docker rm -f myName : arrêter et supprimer son container en une fois
docker rm $(docker ps -aqf status=exited) : supprimer les containers arrêtés
docker exec -it myName /bin/bash : entrer dans un container démarré
docker logs -tf myName : afficher les logs d'un container
La Toolbox : Un Dockerfile à son Image
- Une présentation
- La Registry comme écrin
- L'Engine au cœur de l'écosystème
- Un Dockerfile a son image
- Le Compose pour la palette
- Le Swarm
- La Machine
- Le Kitematic
La Toolbox : Un Dockerfile à son Image
Qu'est-ce qu'une image ?
- Un ensemble de commandes d'installation
- Identifié par un tag organisation/nom:tag
- Un empilement de couches de filesystems
- Se configure avec un fichier Dockerfile
- Qui peut utiliser le contenu du répertoire du Dockerfile
- Qui doit se trouver dans un répo git
La Toolbox : Un Dockerfile à son Image
Syntaxe d'un Dockerfile
FROM <image> : image utilisée comme base de la future image
MAINTAINER <name> : auteur de l'image
ENV <key> <value> : variable d'environnement
RUN <command> : exécute la commande d'installation sur l'image
COPY <src> <dest> : ajoute un fichier local dans l'image
VOLUME ["/<dir>"] : répertoire externe monté au démarrage
EXPOSE <port>] : port réseau exposé par le conteneur
CMD ["executable", "param1",...] : commande lancée au démarrage
WORKDIR ["/<dir>"] : devient le répertoire interne courrant
USER <user> : utilisateur Linux utilisé lors du démarrage
ONBUILD <command> : commande executée dans l'image fille
ARG <name>[=<default value>] : argument utilisé lors du build (http_proxy)
LABEL <key>=<value> : étiquette associée à l'image
La Toolbox : Un Dockerfile à son Image
Un example de Dockerfile
# Se base sur l'image ubuntu version 14.04
FROM docker-registry.valid.appli-gestion.nc/ubuntu:14.04
MAINTAINER DTSI-Infras
COPY config/proxy-dtsi /etc/apt/apt.conf.d/
RUN apt-get update & \
apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
VOLUME ["/usr/share/nginx/html/"]
EXPOSE 80
CMD ["nginx"]
La Toolbox : Un Dockerfile à son Image
Quelques astuces pour bien constuire son Dockerfile
- Préciser la version de l'image de base
- Choisir une image de base légère (Alpine)
- Supprimer les caches d'installation
- N'installer que le strict nécessaire
- Placer en haut les instructions les plus longues
- Placer en bas les instructions qui changent le plus
- Regrouper les instructions cohérentes
- En séparant les instructions sur plusieurs lignes
- Utiliser un .dockerignore
- Ne lancer qu'un process par container
La Toolbox : Le Compose pour la palette
- Une présentation
- La Registry comme écrin
- L'Engine au cœur de l'écosystème
- Un Dockerfile a son image
- Le Compose pour la palette
- Le Swarm
- La Machine
- Le Kitematic
La Toolbox : Le Compose pour la palette
- Projet Open source Compose sous licence Apache V2
- Développée en Python
- Anciennement Fig développé par Orchard
- Juillet 2014 Orchard acquis par Docker
- Facilite le lancement des containers
- Nous épargne les docker run sans fin
- Permet de composer plusieurs containers
- Se configure avec un fichier yaml
La Toolbox : Le Compose pour la palette
La Toolbox : Le Compose pour la palette
Syntaxe d'un docker-compose.yml
image: <image> : image utilisée pour lancer le container
build: /<dir> : pour construire l'image au préalable
dockerfile: <Dockerfile-alternate> : nom alternatif de Dockerfile
links: -<linkName> : liens vers d'autre containers
ports: -<host:container> : mapping de ports entre host et container
volumes: -<host:container> : volumes montés entre host et container
command: <command> : commande lancée au démarrage
La Toolbox : Le Compose pour la palette
Un example de docker-compose.yml
hello-world:
build: .
volumes:
- ~/tuto-docker/webapp/:/usr/share/nginx/html/
ports:
- 8080:80
Laissons voguer nos containers vers le soleil couchant
Merci à tous, suite au prochain épisode
La Toolbox : Le Swarm
- Une présentation
- La Registry comme écrin
- L'Engine au cœur de l'écosystème
- Un Dockerfile a son image
- Le Compose pour la palette
- Le Swarm
- La Machine
- Le Kitematic
La Toolbox : La Machine
- Une présentation
- La Registry comme écrin
- L'Engine au cœur de l'écosystème
- Un Dockerfile a son image
- Le Compose pour la palette
- Le Swarm
- La Machine
- Le Kitematic
La Toolbox : Le Kitematic
- Une présentation
- La Registry comme écrin
- L'Engine au cœur de l'écosystème
- Un Dockerfile a son image
- Le Compose pour la palette
- Le Swarm
- La Machine
- Le Kitematic
La Toolbox: Execution Plateform
La stratégie commerciale et la standardisation
- Offre commerciale
- Plumbing
- Open Std.
L'écosystème Docker
- Discovery backend : Etcd, Zookeeper, Consul
- Service discovery : Registrator
- Plugins volume : Flocker
- Plugins network : Flannel, Weave
- Log : Logspoud
- Cluster : Mesos
- Orchestration : Kubernetes, Tutum/Docker cloud, Shippyard, Tsuru; Rancher
- Hosts : CoreOS, Atomic, Boot2Docker
Quelques perspectives
- Unikernels
- Docker Beta for Mac and for Windows