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

Packager, Transporter et Démarrer des applications
Any App, Anywhere
OBJECTIF
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

MAINTENANT
Même unité de livraison

DEVs OPS*
*exploitant d'application/admin système
Comment ça marche ?
"VIRTUALISATION LIGHT "

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



boot2docker = VM légère
(size ~ 27M / boot ~ 5s)

Install Windows/MAC

Architecture
VOCABULAIRE
image ? (~classe)
Read-only !
container ? (~objet)
READ-WRITE !
MULTI-LAYER
- 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
- Créer un compte : https://hub.docker.com/
- Optionnel :
- compte github pour conserver votre travail
-
https://github.com/
- Avoir la documentation ouverte au cas où
Part 1 : Basics

Docker containers
Résumé : conteneurs

Conteneurs : Commandes
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
- public (DokerHub)
- privé (entreprise)
- "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”]
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"]
$> docker build -t montomcatamoi -f /path/to/Dockerfile
$> docker run [options] montomcatamoi
Hands-On part 2 : Intermediate

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>

Docker Stacks
Docker Compose V3 : 'deploy'
Docker Compose V3 : exemple
Bonus Demo

Bonus Tools

- DockerHub integration
- Any stacks :
example-voting-app
Interactive Learning and Training Platform
More ?
Workshops : http://container.training/
https://training.play-with-docker.com
Kubernetes : http://play-with-kubernetes.com
Moby : http://play-with-moby.com
The End

Docker Workshop
By guillaumedupin
Docker Workshop
Docker introduction workshop for students
- 2,459