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,339