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
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
EN PRATIQUE
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
Les 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
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>
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