class: center, middle, inverse # Docker: briques légos pour infrastructures ## Haïkel Guémar - @hguemar --- class: center, middle ![](img/docker-logo.png) --- ## Qui suis-je ? .right-column[ ![](img/me.jpeg) ] .left-column[ + RDO Engineering @ Red Hat + Développeur fedoraproject.org (TC, Cloud WG, etc.) + Développeur CentOS (Cloud SIG) + Speaker (Cloud Computing, Logiciels Libres, Software Craftmanship) ] --- class: center, middle, inverse # Le besoin --- class: center, middle ## Parlons de cargo et de conteneurs
--- class: middle ## Un peu d'histoire * Inventé par Malcolm McLean, un transporteur routier. * Premier cargo porte-conteneur: Ideal-X en 1956 (58 conteneur de 35 pieds) * Coût de déchargement d'un bateau: $5.86/t * Coût de déchargement d'un porte-conteneur: 16c .footnote[35 pieds est la norme US des camions] --- class: center, middle ## L'enfer du déploiement ![](img/the_challenge.jpeg) --- class: middle ## Une jeune boite française à San Francisco
--- class: center, middle ## Docker la solution ![](img/docker_container.jpeg) Un conteneur est __agnostique__ par rapport à: * son contenu * son transporteur Ses points forts sont __isolation__ et __automatisation__ --- class: middle ## Mais qu'est-ce ? Docker est une plateforme permettant d'industrialiser le déploiement d'applications distribués sous forme de conteneurs légers, portables et auto-suffisants. --- class: middle ## Avertissement préalable __.red[Docker n'est pas un environnement de virtualisation !]__
--- class: middle ## Cas d'utilisation * PaaS * déploiment d'applications scalables * Tests automatisés & CI --- class: middle ## Projet jeune * 18/01/2013 : 1er commit (DotCloud) * 21/03/2013 : 1ere démo à Pycon US * 23/03/2013 : Version 0.1 * 26/03/2013 : Ouverture du dépôt GitHub * 25/06/2013 : Rejoint la fondation Linux * 29/10/2013 : Société renommée en Docker * 09/06/2014 : Version 1.0 (production-ready) --- class: middle ## Communauté forte * GitHub * 2498 watches * 28946 étoiles * 8075 forks * 9203 tickets ouverts * 11476 pull requests * 22464 commits * 131 releases * Plus de 1312 contributeurs * en moyenne 13 commits / jour * 92% sont externes --- class: middle ## Pré-requis * Kernel Linux 3.10 * Git 1.7 * 64 bits http://docs.docker.io/en/latest/installation/ --- class: center, middle, inverse # Docker Platform --- class: middle ## Docker Engine * Service Docker * Client Docker --- class: middle ## Service Docker * Génération des images * Gestion des conteneurs * API REST --- class: middle ## Client Docker ```bash docker pull docker push docker run docker ps docker stop docker start docker rm docker rmi ``` --- class: middle ## Architecture Docker Engine
--- class: middle ## Docker Hub * Dépôt d'images Docker * Gratuit pour les images publiques * Builds automatisés --- class: middle, center, inverse # Comment empaqueter son application Docker --- class: middle ## Image * Image: système de fichiers racine d'un conteneur * Une image peut être lié à une image parente * Une image sans parents est une image de **base** * Plusieurs conteneurs peuvent partager une même image
--- class: middle ## Dockerfile Automatisation de la création de l'image ```bash FROM fedora MAINTAINER hguemar
RUN yum -y update RUN yum -y install mongodb-server RUN yum clean all RUN mkdir -p /data/db EXPOSE 27017 ENTRYPOINT ["/usr/bin/mongod"] ``` Puis ```bash docker build . ``` --- class: center, middle, inverse # Ecosystème --- class: middle ## Docker Compose * Décrire et exécuter des applications multi-conteneurs * Format YAML * Possibilité d'utiliser des variables et d'étendre un modèle ```yaml db: image: postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" links: - db ``` --- class: middle ## Docker Swarm * Gestion du clustering native * Offre la même API que le service Docker * Backends de découverte: etcd, consul, zookeeper * Fonctionne sur Azure, AWS EC2, CoreOS, Project Atomic, etc.
--- class: middle ## Docker Machine * Permet d'utiliser Docker sous enviromment non-Linux via une VM dédiée * Utilise Boot2docker * Hyperviseurs: VirtualBox, Hyper-V, VMWare, Generic (VM existante accessible via SSH * Cloud: AWS, Azure, Digital Ocean, GCE, OpenStack * Configure l'environnement pour vous ```bash $ docker-machine create -d azure --azure-subscription-id="SUB_ID" --azure-subscription-cert="mycert.pem" MARCEL $ eval `docker-machine env marcel` ``` --- class: middle ## Qui utilise Docker ? * IaaS: Azure, AWS, Google Compute Engine, OpenStack * PaaS: OpenShift (RedHat), Yandex , Deis * gestion de Cluster: Twitter * CI: ebay, mailgun (Rackspace) * Développement: Spotify --- class: center, middle, inverse # Docker ♥ Azure --- class: middle ## Docker pour Windows * Conteneurs natifs * Windows à l'intérieur * Même expérience utilisateur * Ne permet pas d'exécuter les images Linux * Requiert Windows Server 2016 --- class: middle ## Comment fut-ce possible? * Silo: extension de l'objet Windows Job + gestion d'un ensemble de ressources + gestion des contraintes de ressources + namespaces * namespaces + registry + Process IDs, sessions + file system --- class: middle ## Conteneurs * Conteneurs Windows Server * Conteneurs Hyper-V + ajoute une couche d'isolation supplémentaire sur les conteneurs Windows Server + VM stateless et légére + invisible à l'utilisateur `docker run --isolation=hyperv` * Exécute Nano Server OS * Utilisation de SMB pour les volumes et les couches
--- class: middle ## Microsoft mets le paquet * 319 pull requests * `#4` contributeur en nombre de PR * `#5` contributeur en lignes de code --- class: middle ## L'avenir? * images multi-architectures `docker pull mariadb` + OS + architectures (ARM?) * https://github.com/docker/distribution/pull/1068 --- class: middle ## Docker on Azure * Azure Container Service * Pas de conteneurs Hyper-V * Orchestration: Docker Swarm/Compose, Mesos/Marathon
--- class: middle ## Et des cachalots en légo!
--- class: middle, center, inverse # Q/A