Docker la paravirtualisation simple et puissante Mathieu Passenaud

  • Slides: 53
Download presentation
Docker : la paravirtualisation simple et puissante Mathieu Passenaud @mathieupassenau @Human. Talks. Tlse http:

Docker : la paravirtualisation simple et puissante Mathieu Passenaud @mathieupassenau @Human. Talks. Tlse http: //www. mathieupassenaud. fr

Docker, pourquoi en parler ? Docker a été distribué en tant que projet open

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 Git. Hub (14 e 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 Git. Hub, avec plus de 1 912 forks et 423 contributeurs[6]. fr. wikipedia. org/wiki/Docker_(Système_de_conteneur_Linux) 2

Docker, pourquoi en parler ? • L'intégration de Docker a été faite avec les

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] • Open. Stack Nova [11] • Open. SVC [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

C’est quoi ? • Des containers • Comme au port, vos marchandises sont isolées

C’est quoi ? • Des containers • Comme au port, vos marchandises sont isolées • Mais sur le même navire ! 4

5

5

 « Docker est un système de packaging qui permet de prendre n’importe quel

« 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

 « A partir du moment où ça tourne sous un process unix, à

« 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

C’est intéressant ? Ou juste un buzz ? 8

C’est intéressant ? Ou juste un buzz ? 8

Comment ça marche ? « Lx. C (Linux Containers), une fonction d’isolation des process

Comment ça marche ? « Lx. C (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

10

10

Concrètement 11

Concrètement 11

Sur le « host » , la commande « docker » fait office «

Sur le « host » , la commande « docker » fait office « d’ hyperviseur » 12

Je lance : root@server: /home/mathieu# docker run ubuntu: 14. 04 /bin/echo 'Hello world' Hello

Je lance : root@server: /home/mathieu# docker run ubuntu: 14. 04 /bin/echo 'Hello world' Hello world root@server: /home/mathieu# 13

Et j’ai… root@server: /home/mathieu# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Et j’ai… root@server: /home/mathieu# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@server: /home/mathieu# Ben, rien 14

Je re-lance ! root@server: /home/mathieu# docker run -d ubuntu: 14. 04 /bin/sh -c "while

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" 23 d 69 e 6697115 fa 93 b 90 b 1 e 891218 bebd 9 aa 7156 c 853 b 18092 bb 05 f 81 f 012 d 26 root@server: /home/mathieu# 15

Et j’ai… root@server: /home/mathieu# docker ps CONTAINER ID IMAGE COMMAND 23 d 69 e

Et j’ai… root@server: /home/mathieu# docker ps CONTAINER ID IMAGE COMMAND 23 d 69 e 669711 ubuntu: 14. 04 "/bin/sh -c 'while t CREATED STATUS PORTS NAMES 33 seconds ago Up 32 seconds tender_lumiere root@server: /home/mathieu# Un container en exécution ! 16

Mon container tourne tout le temps que le(s) processus lancé existe 17

Mon container tourne tout le temps que le(s) processus lancé existe 17

Cas concret : construisons une image 18

Cas concret : construisons une image 18

Je lance root@server: /home/mathieu# docker run -t -i ubuntu: 14. 04 /bin/bash root@a 16

Je lance root@server: /home/mathieu# docker run -t -i ubuntu: 14. 04 /bin/bash root@a 16 a 05633 b 78: /# (-t : tty, -i : interactif) root@a 16 a 05633 b 78: /# apt-get update … root@a 16 a 05633 b 78: /# apt-get install default-jre … root@a 16 a 05633 b 78: /opt# wget http: //mir 2. ovh. net/ftp. apache. org/dist/tomcat 7/v 7. 0. 56/bin/apache-tomcat-7. 0. 56. tar. gz root@a 16 a 05633 b 78: /opt# tar xvf apache-tomcat-7. 0. 56. tar. gz root@a 16 a 05633 b 78: /opt/apache-tomcat-7. 0. 56/bin#. /startup. sh. . . Tomcat started. 19

Et… 20

Et… 20

On sauvegarde l’image root@server: /# docker ps CONTAINER ID IMAGE COMMAND a 16 a

On sauvegarde l’image root@server: /# docker ps CONTAINER ID IMAGE COMMAND a 16 a 05633 b 78 ubuntu: 14. 04 "/bin/bash” CREATED STATUS PORTS NAMES 20 minutes ago Up 20 minutes dreamy_meitner root@server: /# docker commit -m="installed tomcat" -a="Mathieu Passenaud" a 16 a 05633 b 78 ubuntu/tomcat 21

Mon image existe ! root@server: /home/mathieu# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL

Mon image existe ! root@server: /home/mathieu# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu/tomcat latest e 63854 b 1 dca 1 3 minutes ago 583. 9 MB ubuntu 14. 04 6 b 4 e 8 a 7373 fe 10 days ago 194. 9 MB base latest b 750 fe 79269 d 18 months ago 175. 3 MB root@server: /home/mathieu# 22

Je lance root@server: /# docker run -p 8080: 8080 ubuntu/tomcat /bin/sh -c "/opt/apache-tomcat 7.

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. Apr. Lifecycle. Listener org. apache. catalina. startup. Host. Config deploy. Directory … Oct 11, 2014 11: 15: 46 PM org. apache. catalina. startup. Catalina start INFO: Server startup in 5395 ms 23

Et… 24

Et… 24

Maintenant on scripte # This is a comment FROM ubuntu: 14. 04 MAINTAINER Mathieu

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: //mir 2. ovh. net/ftp. apache. org/dist/tomcat 7/v 7. 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/ubuntu. Tomcat# docker build. 25

# This is a comment FROM ubuntu/tomcat: latest MAINTAINER Mathieu Passenaud <mathieu. passenaud@gmail. com>

# 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

Facilitons nous la vie, dès maintenant 27

Facilitons nous la vie, dès maintenant 27

28

28

29

29

30

30

Exemple complet 31

Exemple complet 31

Architecture • Apache en frontal • Application web tomcat • Base de données mysql

Architecture • Apache en frontal • Application web tomcat • Base de données mysql 32

Avant - Avant • • Debian 5. 0 apt-get install apache mysql-server tomcat …

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

Avant • • VMWare => ubuntu server 14. 04 Wget tomcat Apt-get install apache

Avant • • VMWare => ubuntu server 14. 04 Wget tomcat Apt-get install apache mysql-server Clone/transport de la VM vers la prod 34

Maintenant • Un serveur debian 7. 0 apache frontal, open. SSL à jour derrière

Maintenant • Un serveur debian 7. 0 apache frontal, open. SSL à 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 Cent. OS 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 Dev. OPS 35

Apache 2 + LB Debian Tomcat My. SQL Ubuntu CENTOS Vsphere/Vcloud ? ? VMWARE

Apache 2 + LB Debian Tomcat My. SQL Ubuntu CENTOS Vsphere/Vcloud ? ? VMWARE Matos de fou furieux CALL PBEAU ou MLEN 36

Plus tard ? ? ? • Boot 2 Docker sur la machine de dev

Plus tard ? ? ? • Boot 2 Docker sur la machine de dev • Docker sur un serveur de prod • Un container, basé sur debian 7. 0 apache frontal, open. SSL à jour derrière firewall + LB • Un container, basé sur ubuntu 14. 04, Java 1. 7 + tomcat 7. 0 • Un container, basé sur Cent. OS Mysql 37

Apache 2 + LB Tomcat My. SQL Docker Matos de fou furieux + OS

Apache 2 + LB Tomcat My. SQL Docker Matos de fou furieux + OS CALL PBEAU ou MLEN 38

Mais il nous manque 3 choses • Comment je fais en dev ? •

Mais il nous manque 3 choses • Comment je fais en dev ? • Comment je rends le truc « scalable » ? • Comment je fais communiquer mes containers ? 39

Comment je fais en dev ? • J’installe un docker – Apt-get install docker

Comment je fais en dev ? • J’installe un docker – Apt-get install docker – Boot 2 docker : http: //boot 2 docker. io/ 40

Comment je fais en dev ? • J’arrête mes VM VMWare/Virtual. Box • Je

Comment je fais en dev ? • J’arrête mes VM VMWare/Virtual. Box • 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

Boot 2 Docker • http: //boot 2 docker. io/ • Virtual. Box + VM

Boot 2 Docker • http: //boot 2 docker. io/ • Virtual. Box + VM linux + docker • Client Docker dans la console 42

43

43

44

44

45

45

Comment je rends le truc scalable ? • https: //docs. docker. com/swarm/ • http:

Comment je rends le truc scalable ? • https: //docs. docker. com/swarm/ • http: //www. sebastienhan. fr/blog/2013/10/31/build-a-paas-zonewithin-your-openstack-cloud/ • http: //docs. openstack. org/developer/devstac k/ • https: //labs. runabove. com/docker/ • http: //shipyard-project. com/ 46

Apache 2 + LB Tomcat My. SQL Docker + Swarm Matos de fou furieux

Apache 2 + LB Tomcat My. SQL Docker + Swarm Matos de fou furieux + OS CALL PBEAU ou MLEN Matos de fou furieux + OS 47

Comment je fais communiquer les containers entre eux ? • -p 80: 8080 –

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

Apache 2 + LB Tomcat My. SQL Docker + Swarm Matos de fou furieux

Apache 2 + LB Tomcat My. SQL Docker + Swarm Matos de fou furieux + OS 49

Et pour l’existant et les récalcitrants ? • Rancher – rancher. com 50

Et pour l’existant et les récalcitrants ? • Rancher – rancher. com 50

Rancher • Exporte une VM existante • Fait tourner KVM dans des containers •

Rancher • Exporte une VM existante • Fait tourner KVM dans des containers • + GUI 51

52

52

53

53