Docker

Introduction aux conteneurs applicatifs



Au programme



  • Introduction théorique sur les conteneurs Docker

  • Hands-on self-paced workshop
    • Basics : Conteneurs et images
    • Intermediate : Stack pour le développement
    • Advanced : Orchestration

  • Bonus tips

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



         " 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...


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


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


 

EN PRATIQUE

PAUSE !


Hands-on !


Environnement


  • Interactive classroom
    • environnements d'apprentissage  dans le navigateur
    • "self-paced" learning
    • "labs" et "tutorials" 

  • DockerHub
    • Registre public d'images ("github" des images Docker)

  • PWD (Play-With-Docker)
    • Docker playground 
    • Jusqu'à 5 "noeuds" gratuits pendant 4h !

Pré-requis





Part 1 : Basics









Docker volumes
Docker images

Docker containers

Résumé : conteneurs


Conteneurs : Commandes

  • "docker create : crée un conteneur
  • "docker run"         : crée et démarre un conteneur
  • "docker stop"       : arrête un conteneur
  • "docker start"      : démarre un conteneur
  • "docker restart" : redémarre un conteneur
  • "docker rm"           : supprime un conteneur
  • "docker kill"           : envoie un SIGKILL au conteneur
  • "docker attach"  : se connecte à un conteneur en exécution 
  • "docker exec"       : exécute une cmd dans un conteneur
  • Conteneurs : OPtions

    • -d, --detach                Run container in background and print ID
    • -e, --env=[]                  Set environment variables
    • -i, --interactive         Keep STDIN open even if not attached
    • -p, --publish=[]         Publish a container's port(s) to the host
    • --rm                                 Automatically rm container when it exits
    • -t, --tty                           Allocate a pseudo-TTY
    • -v, --volume=[]         Bind mount a volume
    • -w, --workdir             Working directory inside the container

    RÉSUMÉ : 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
    
    

    Hands-On part 2 : Intermediate




    Docker Compose : Orchestration for Development

    Docker :

    Un ECOSYSTEME COMPLET


    Docker Compose

    $ docker-compose up -d 

    docker-compose.yaml



    Docker compose


    Hands-On Part 3 : Advanced


    Containers Orchestration


    Docker Swarm



    What's new ?

    • Swarm embarqué dans Engine => orchestration native

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

    'SWARM CLASSIC'  VS 'Swarm mode'


    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 Stacks


    Docker Compose V3 : 'deploy'


    Docker Compose V3 : exemple

    Bonus Demo


    Bonus Tools






    Interactive Learning and Training Platform

    Simple UI for Docker management

    More ? 

    Workshopshttp://container.training/

    https://training.play-with-docker.com

    Networkinghttps://success.docker.com/article/docker-reference-architecture-designing-scalable-portable-docker-container-networks

    Kubernetes : http://play-with-kubernetes.com

    Moby http://play-with-moby.com

    The End










    Contact : gdupin@gmail.com

    Docker Workshop

    By guillaumedupin

    Docker Workshop

    Docker introduction workshop for students

    • 2,339