Formation M2i - Comprendre les neurosciences pour développer son leadership
5390997 Support formation : Construire et administrer vos conteneurs avec Docker.ppt
1. Docker : la paravirtualisation simple
et puissante
Mathieu Passenaud
@mathieupassenau
@HumanTalksTlse
http://www.mathieupassenaud.fr
2. Docker, pourquoi en parler ?
Docker a été distribué en tant que projet open source à partir de
mars 2013[3].
Au 18 novembre 2013, le projet a été mis en favoris plus de 7 300
fois sur GitHub (14e projet le plus populaire), avec plus de 900
forks et 200 contributeurs[6].
Au 9 mai 2014, le projet a été mis en favoris plus de 11 769 fois
sur GitHub, avec plus de 1 912 forks et 423 contributeurs[6].
fr.wikipedia.org/wiki/Docker_(Système_de_conteneur_Linux)
2
3. Docker, pourquoi en parler ?
• L'intégration de Docker a été faite avec les outils de gestion
d'infrastructures suivants :
• Chef [7]
• Puppet [8]
• Vagrant [9]
• Jenkins [10]
• OpenStack Nova [11]
• OpenSVC [12]
• Le 19 septembre 2013, Red Hat et Docker ont annoncé une collaboration
concernant Fedora, Red Hat Enterprise Linux et Openshift[13].
fr.wikipedia.org/wiki/Docker_(Système_de_conteneur_Linux)
3
4. C’est quoi ?
• Des containers
• Comme au port, vos
marchandises sont isolées
• Mais sur le même navire !
4
6. « Docker est un système de packaging qui
permet de prendre n’importe quel code
source, n’importe quelle application et de
l’envelopper,
avec toutes ses dépendances, dans un
objet unique, « self-contained », que l’on
peut déplacer et faire tourner sur n’importe
quel serveur, n’importe où sur la planète »
Solomon Hykes
6
7. « A partir du moment où ça tourne
sous un process unix, à partir du
moment où ça écoute sur une socket
TCP, on peut le déployer, on peut le
scaler. »
Solomon Hykes
7
9. Comment ça marche ?
« LxC (Linux Containers), une fonction
d’isolation des process désormais
complètement intégrée au noyau de Linux
depuis sa version 3.8. »
http://www.silicon.fr/open-source-docker-demoder-vm-93411.html
9
15. Je re-lance !
root@server:/home/mathieu# docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello
world; sleep 1; done"
23d69e6697115fa93b90b1e891218bebd9aa7156c853b18092bb05f81f012d26
root@server:/home/mathieu#
15
16. root@server:/home/mathieu# docker ps
CONTAINER ID IMAGE COMMAND
23d69e669711 ubuntu:14.04 "/bin/sh -c 'while t
CREATED STATUS PORTS NAMES
33 seconds ago Up 32 seconds tender_lumiere
root@server:/home/mathieu#
Et j’ai…
Un container en exécution !
16
21. root@server:/# docker ps
CONTAINER ID IMAGE COMMAND
a16a05633b78 ubuntu:14.04 "/bin/bash”
CREATED STATUS PORTS NAMES
20 minutes ago Up 20 minutes dreamy_meitner
root@server:/#
root@server:/# docker commit -m="installed tomcat" -a="Mathieu
Passenaud" a16a05633b78 ubuntu/tomcat
On sauvegarde l’image
21
22. Mon image existe !
root@server:/home/mathieu# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu/tomcat latest e63854b1dca1 3 minutes ago 583.9 MB
ubuntu 14.04 6b4e8a7373fe 10 days ago 194.9 MB
base latest b750fe79269d 18 months ago 175.3 MB
root@server:/home/mathieu#
22
23. Je lance
root@server:/# docker run -p 8080:8080 ubuntu/tomcat /bin/sh -c "/opt/apache-tomcat-
7.0.56/bin/catalina.sh run"
Oct 11, 2014 11:15:39 PM org.apache.catalina.core.AprLifecycleListener
org.apache.catalina.startup.HostConfig deployDirectory
…
Oct 11, 2014 11:15:46 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 5395 ms
23
25. Maintenant on scripte
# This is a comment
FROM ubuntu:14.04
MAINTAINER Mathieu Passenaud <mathieu.passenaud@gmail.com>
RUN apt-get update && apt-get install -y default-jre wget
RUN wget http://mir2.ovh.net/ftp.apache.org/dist/tomcat/tomcat-
7/v7.0.56/bin/apache-tomcat-7.0.56.tar.gz -O /opt/apache-tomcat-7.0.56.tar.gz
RUN tar xvf /opt/apache-tomcat-7.0.56.tar.gz --directory=/opt/
root@server:/dockerimages/ubuntuTomcat# docker build .
25
26. # This is a comment
FROM ubuntu/tomcat:latest
MAINTAINER Mathieu Passenaud <mathieu.passenaud@gmail.com>
RUN /opt/apache-tomcat-7.0.56/bin/startup.sh
26
33. Avant - Avant
• Debian 5.0
• apt-get install apache mysql-server tomcat
• …
• 5 jours plus tard après debug, openjdk et
configuration, ça marche
33
34. Avant
• VMWare => ubuntu server 14.04
• Wget tomcat
• Apt-get install apache mysql-server
• Clone/transport de la VM vers la prod
34
35. Maintenant
• Un serveur debian 7.0 apache frontal, openSSL à
jour derrière firewall + LB
• Un/des serveur(s) ubuntu 14.04, Java 1.7 +
tomcat 7.0 (clone de machine de dev)
• Un serveur CentOS Mysql, construit depuis un
export d’une base mysql locale à la machine de
dev
• Ma machine de dev est dimensionnée comme
une machine de prod, je deviens DevOPS
35
36. Apache2 + LB Tomcat
MySQL
Tomcat
Tomcat
VMWARE
Matos de fou furieux
Vsphere/Vcloud ????
CENTOS
Ubuntu
Debian
CALL PBEAU ou
MLEN 36
37. Plus tard ???
• Boot2Docker sur la machine de dev
• Docker sur un serveur de prod
• Un container, basé sur debian 7.0 apache
frontal, openSSL à jour derrière firewall + LB
• Un container, basé sur ubuntu 14.04, Java 1.7
+ tomcat 7.0
• Un container, basé sur CentOS Mysql
37
38. Apache2 + LB Tomcat
MySQL
Tomcat
Tomcat
Docker
Matos de fou furieux + OS
CALL PBEAU ou
MLEN 38
39. Mais il nous manque 3 choses
• Comment je fais en dev ?
• Comment je rends le truc « scalable » ?
• Comment je fais communiquer mes containers ?
39
40. Comment je fais en dev ?
• J’installe un docker
– Apt-get install docker
– Boot2docker : http://boot2docker.io/
40
41. Comment je fais en dev ?
• J’arrête mes VM VMWare/VirtualBox
• Je travaille UNIQUEMENT dans des containers
• J’hésite pas à en faire plein de versions
(comme des snapshots)
• J’exporte un tar.gz pour déployer en recette et
en production
41
47. Apache2 + LB Tomcat
MySQL
Tomcat
Tomcat
Docker + Swarm
CALL PBEAU ou
MLEN
Matos de fou
furieux + OS
Matos de fou
furieux + OS
Matos de fou
furieux + OS
Matos de fou
furieux + OS
47
48. Comment je fais communiquer les
containers entre eux ?
• -p 80:8080
– Redirection de port entre le hôte et le container
• Il existe un réseau interne entre containers
• Docker Links :
– https://docs.docker.com/userguide/dockerlinks/
– Nommer les containers à la création : --name web
– Puis le lier avec un autre : --link db:db
48