Docker

Introduction aux conteneurs applicatifs


21/02/2017

Au programme



  • Qu'est-ce que Docker et pourquoi l'utiliser ?

  • Comment ça marche ?

  • Démo

Problématique

Monde de l'IT


Résultat = " The Matrix From Hell "


PROBLÉMATIQUE

Transport de marchandises avant 1960

Résultat : " Also a Matrix from hell " !


Solution : 

le conteneur de transport


Docker = Conteneur de transport d'application


Beaucoup plus simple !!


Définition

Afficher l'image d'origine


         " Docker est une solution permettant de standardiser le packaging et l'exécution de logiciels dans des environnements séparés (conteneurspouvant communiquer entre eux. "







PackagerTransporter et Démarrer des applications

Any App, Anywhere

OBJECTIF

Minimiser le temps et les infrastructures entre le développement, les tests, le déploiement et l'utilisation en production.

Les conteneurs... c'est pas nouveau ! (LXC, OpenVZ...) 

MAIS

Propriétés Clés de DOCKER

  • Légèreté
  • Portabilité ("Build once, Run everywhere")
  • Jetabilité ("Cattle Vs Pet" )
  • Versionning des images (~GIT), héritage
  • Social (open source, repo public d'images...)
  • API REST
  • Ecosystème complet (outils, plateforme)


=> standard qui ouvre le monde du conteneur à tous


Origines





  • Licence : open-source
  • Première version : 13 mars 2013
  • Langage : GO
  • Créateur : Solomon Hykes

Pour quoi faire ?


  • Plate-forme de développement souple
  • Test rapide d'application
  • DevOps
  • Intégration continue
  • Déploiement automatisé




=> Simplifie la vie du développeur... mais pas que !

"Le Saint-Graal du DevOps"

Quand un adminsys met un logiciel en production...

Afficher l'image d'origine

Par sa nature Docker assure que le conteneur utilisé en développement fonctionnera de la même manière en production.


Avant

Afficher l'image d'origine

MAINTENANT

Même unité de livraison


DEVs                     OPS*


*exploitant d'application/admin système

Comment ça marche ?

"VIRTUALISATION LIGHT "




Concepts différents : on virtualise des "services" plutôt que des "OS"
(sous le capot : namespaces + cgroups + UFS)

CONTENEUR

Analogie




Source : https://blog.docker.com/2016/03/containers-are-not-vms/

  VM

InstaLL Linux : Natif

  • Package manager (yum, apt-get...)
  • Distrib dédiée (CoreOS, RH Atomic, RancherOS...)

 

Afficher l'image d'origine
Afficher l'image d'origine
boot2docker = VM légère
(size ~ 27M / boot ~ 5s)
 

  Toolbox

Install  Windows/MAC


Architecture


 

EN PRATIQUE

VOCABULAIRE

image  ? (~classe)
Fichier statique représentant un environnement
Ensemble de layers superposés

Read-only !



container  ? (~objet)
Exécution dynamique (processus)
"Instanciation" d'une image

READ-WRITE !

MULTI-LAYER

Union File System

  • Chaque 'layer' (couche) du FS est monté sur les layers précédents (héritage)

  • Le premier 'layer' est l'image de base (debian, ubuntu, busybox, fedora, centos, etc )

  • Chaque layer 'read-only' est une image (un layer n'est qu'un ensemble de fichiers et répertoires !)

  • La couche la plus haute est la seule en 'read-write' : c'est le conteneur !

MULTI-LAYER


Les images

  • "docker search" sur un registry
  • "docker build" à partir d'un Dockerfile
  • "docker commit" sur un conteneur modifié
  • "docker import" d'une arbo de base :
    cat centos6-base.tar | docker import - centos6-base

Dockerfile : Description d'une image

FROM BASEIMAGE:VERSION
ENV MYVAR="VALUE"
RUN YUM INSTALL PKGS1 , PKGS2 -Y
RUN MKDIR -P /WORKDIR/LOG
COPY ./CONF/APPLICATION.CONF /WORKDIR/APP.CONF
ADD WWW.ARCHIVE.COM/MYARCHIVE.TAR.GZ /WORKDIR/
EXPOSE 9000
VOLUME ["/WORKDIR/LOG"]
WORKDIR ["/WORKDIR"]
USER MYUSER
ENTRYPOINT ["/BIN/BASH"]
CMD ["ECHO” , "HELLO WORLD”] 


En pratique

Ecriture d'un dockerfile








Exécution d'un conteneur :

FROM tomcat:8.0.32-jre8 # héritage d'une image de base# Ajout de fichiers dans l'image
COPY server.xml /usr/local/tomcat/conf/COPY target/webapp.war /usr/local/tomcat/webapps/# Commande par défaut qui sera lancée à l'exécution
CMD ["service","tomcat","start"]
Build de l'image : 

$> docker build -t montomcatamoi -f /path/to/Dockerfile


 $> docker run [options] montomcatamoi


Docker :

Un ECOSYSTEME COMPLET


Docker Swarm



What's new ?

  • Swarm embarqué dans Engine => orchestration native

  • Création ultra-simple d'un cluster !

BIenvenue aux "Services" !


  • Avant : "je démarre 1 conteneur" = TRANSACTIONNEL
 
docker run ... <image>
  • Après : "je décris l'état désiré d'1 service" : DECLARATIF !!
docker service create --replicas=N <image>
  • Le système garantit le respect de l'état désiré
  • Si problème : le système corrige tout seul !

    Docker Compose

    $ docker-compose up -d 

    docker-compose.yaml



    Docker compose


    Docker MAchine

    Docker Machine

    PAUSE !


    Démo


    Docker : "Containers everywhere !"

    By guillaumedupin

    Docker : "Containers everywhere !"

    Docker

    • 1,515