docker tours meetup #1 - introduction à docker
TRANSCRIPT
![Page 1: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/1.jpg)
Docker Tours Meetup #1
9 Septembre 2015 @ Cantine numérique
@DockerTours
![Page 2: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/2.jpg)
Programme
Introduction à Docker & cas pratiquepar Antoine Boudot et Thibaut Marmin (~3x20mn)
Du dev à la prod en passant par Jenkinspar Benjamin Cousin et Cédric Gatay (~30mn)
Pizzas / Bièresoffertes par le groupe Cyrès
![Page 3: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/3.jpg)
À propos...
Thibaut Marmin
@thibmarmin
Ing. Développeur chez Ingensi
Elasticsearch / Docker / AngularJS
Organisateur Docker Tours Meetup
Antoine Boudot
@AntoineBoudot
Ing. Développeur chez Ingensi
Ansible / Docker / Hadoop
Co-organisateur Docker Tours Meetup
![Page 4: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/4.jpg)
Introduction à DockerRapide, promis
![Page 5: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/5.jpg)
Qui devrait s’y intéresser ?
Devs
tous les langages
tous les OS
projet cible linux
Ops
la plupart des distributions Linux1 et cloud providers
toutes les machines (physiques / VMs)
1 https://docs.docker.com/installation/
plus rapide
plus agile
= bénéfices !
![Page 6: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/6.jpg)
Pourquoi Docker est-il si populaire ?
![Page 7: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/7.jpg)
Pourquoi Docker est-il si populaire ?
![Page 8: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/8.jpg)
La solution : les containers !VM
Container
![Page 9: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/9.jpg)
Docker
▸ build
▸ ship
▸ run
Né le 13 mars 20131
nov. 2013 : 7300 stars, 900 forks, 200 contributeurs
jan. 2014 : levée de $15.000.000
mai 2014 : 11700 stars, 1900 forks, 400 contributeurs
sept. 2014 : levée de $40.000.000
avr. 2015 : levée de $95.000.000
avr. 2015 : 20700 stars, 4700 forks, 900 contributeurs
1 depuis un projet dotCloud
![Page 10: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/10.jpg)
L’architecture Docker
![Page 11: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/11.jpg)
Les images$ docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEtraining/webapp latest fc77f57ad303 3 weeks ago 280.5 MBubuntu 13.10 5e019ab7bf6d 4 weeks ago 180 MBubuntu saucy 5e019ab7bf6d 4 weeks ago 180 MBubuntu 12.04 74fe38d11401 4 weeks ago 209.6 MBubuntu precise 74fe38d11401 4 weeks ago 209.6 MBubuntu 12.10 a7cf8ae4e998 4 weeks ago 171.3 MBubuntu quantal a7cf8ae4e998 4 weeks ago 171.3 MBubuntu 14.04 99ec81b80c55 4 weeks ago 266 MBubuntu latest 99ec81b80c55 4 weeks ago 266 MBubuntu trusty 99ec81b80c55 4 weeks ago 266 MBubuntu 13.04 316b678ddf48 4 weeks ago 169.4 MBubuntu raring 316b678ddf48 4 weeks ago 169.4 MBubuntu 10.04 3db9c44f4520 4 weeks ago 183 MBubuntu lucid 3db9c44f4520 4 weeks ago 183 MB
$
![Page 12: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/12.jpg)
Trouver une image
![Page 13: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/13.jpg)
Trouver une image$docker search centos
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/centos The offic... 1232 [OK]
docker.io docker.io/ansible/centos7... Ansible o... 51 [OK]
docker.io docker.io/jdeathe/centos-... CentOS-6 ... 11 [OK]
docker.io docker.io/blalor/centos Bare-bone... 9 [OK]
docker.io docker.io/jdeathe/centos-ssh CentOS-6 ... 6 [OK]
docker.io docker.io/openshift/wildf... DEPRECATE... 6 [OK]
docker.io docker.io/torusware/speed... Always up... 6 [OK]
docker.io docker.io/million12/cento... Base Cent... 5 [OK]
docker.io docker.io/nimmis/java-cen... This is d... 4 [OK]
docker.io docker.io/jdeathe/centos-... CentOS-6 ... 2 [OK]
. . .
$
![Page 14: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/14.jpg)
Récupérer une image$ docker pull centosPulling repository centosb7de3133ff98: Pulling dependent layers5cc9e91966f7: Pulling fs layer511136ea3c5a: Download completeef52fb1fe610: Download complete. . .
Status: Downloaded newer image for centos$
![Page 15: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/15.jpg)
Les containers
1 processus=1 container
![Page 16: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/16.jpg)
Mode interactif$ docker run -it centos /bin/bash
[root@af40a9d95e82 /]#
-t Allocate a pseudo-tty-i Interactive mode (STDIN)
. . .
![Page 17: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/17.jpg)
Mode background$ docker run -d --name hello centos /bin/bash -c \
"while true; do echo Hello world; sleep 1; done"
ce7383fd92b9e15c9c96fa58bb99fe62fba4dee50c566abd5807804ef4f3110d
$
-d Daemon mode (background)--name Specify container name
. . .
![Page 18: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/18.jpg)
Mode background$ docker logs -f hello
hello
hello
hello
hello
hello
hello
hello
hello
![Page 19: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/19.jpg)
Lister les containers$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf9148ffb024e centos:latest "/bin/bash -c 'while 9 seconds ago Up 8 seconds helloe2ccef3bcc5a elasticsearch:latest "/docker-entrypoint. 5 weeks ago Up 2 seconds 9200... elastic$
![Page 20: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/20.jpg)
Contrôller les containers$ JOB=$(docker run -d [...]) # Start a new container
$ docker stop $JOB # Stop the container
$ docker start $JOB # Start the container
$ docker restart $JOB # Restart the container
$ docker kill $JOB # SIGKILL a container
$ docker rm $JOB # Remove a container
![Page 21: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/21.jpg)
Créer une image
$ docker commit -m "Say Hello" -a "Kate Smith" 0b2616b0e5a8 user/centos:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
$ docker build -t user/centos:v2 .
pull -> commit
build
Depuis une image existante, après avoir exécuté des commandes
Depuis un Dockerfile, basé sur une image existante
$ cat helloFromScratch.tgz | docker import - hello:new
import
From scratch
![Page 22: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/22.jpg)
Mais encore...Binding de ports
(expose / publish)
Points de montage(volume)
Connecter les containers(link)
Variables d’environnement
. . .
![Page 23: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/23.jpg)
Docker en DéveloppementCas pratique
![Page 24: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/24.jpg)
Notre contexte
REST
API
DB
→ →
![Page 25: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/25.jpg)
Structure technique
Dropwizard
:9300
:8080
:8081
:9200
$ java -jar [JAR] server [CONF]
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
![Page 26: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/26.jpg)
Structure fonctionnelle
Dropwizard
:8080
:8081
GET /api # infos serveur
GET /api/contact # liste des contacts
GET /api/contact/:id # get d'un contact
GET /healthcheck
![Page 27: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/27.jpg)
Sans docker
Dropwizard
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
Télécharger elasticsearch
Installer et configurer
(Gérer les dépendances)
(Installer les dépendances)
Configurer l’app en localhost
localhost:9300
![Page 28: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/28.jpg)
Avec docker
Application Elasticsearch
![Page 29: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/29.jpg)
Comment faire ?
LINK
Application Elasticsearch
VOLUME/home/.../workdir
application.jar
config.yml
PORT
elasticsearch
/workdir
80808081
80808081
REGISTRY
![Page 30: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/30.jpg)
Docker en productionCas pratique
![Page 31: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/31.jpg)
Différences entre dev et prod
Application Configurations
LogsPersistance des données
IMAGE
![Page 32: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/32.jpg)
Le Dockerfile
Automatiser la création d’une image
Rapide
Reproductible
Maintenable
![Page 33: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/33.jpg)
Dockerfile FROM BaseImage:version
MAINTAINER DockerMeetup DockerMeetup.com "[email protected]"
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
ENTRY-POINT [“/bin/bash”]
CMD [“echo” , “hello world”]
![Page 34: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/34.jpg)
Bonnes pratiques
Evitez d’installer des paquets inutiles
Exécutez un seul processus par conteneur
Limitez le nombre de couches
![Page 35: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/35.jpg)
Cas pratique
Application Elasticsearch
![Page 36: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/36.jpg)
Elasticsearch (Dockerfile)FROM elasticsearch:1.7.1
MAINTAINER DockerMeetup DockerMeetup.com "[email protected]"
VOLUME ["/usr/share/elasticsearch/data"]
COPY ./conf/elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml
COPY ./conf/logging.yml /usr/share/elasticsearch/config/logging.yml
Image officielle :
https://hub.docker.com/_/elasticsearch/
$docker build -t docker-meetup/elasticsearch:1.0
![Page 37: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/37.jpg)
L’application (Dockerfile)FROM java:8-jre
MAINTAINER DockerMeetup DockerMeetup.com "[email protected]"
RUN mkdir -p /app/logs
COPY conf/prod-docker.yml /app/prod.yml
COPY target/awesome-app-1.0-SNAPSHOT.jar /app/awesome-prod.jar
EXPOSE 8080
EXPOSE 8081
WORKDIR /app
ENTRYPOINT [ “java”, “-jar”, “awesome-prod.jar”, “server”, “prod.yml” ]
![Page 38: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/38.jpg)
Chargement initial (Dockerfile)FROM tutum/curl:trusty
MAINTAINER DockerMeetup DockerMeetup.com "[email protected]"
COPY ./script/load.sh /elasticsearch/load.sh
WORKDIR /elasticsearch/
ENTRYPOINT ["./load.sh"]
![Page 39: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/39.jpg)
Automatiser le lancement
docker-compose up -ddocker-compose.yml
![Page 40: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/40.jpg)
docker-compose.yml
LINK
Application Elasticsearch
VOLUME
/var/log/app
PORT
elasticsearch
/app/log
80808081
80808081
/var/log/elastic
VOLUME
/data
Elasticsearch-load
![Page 41: Docker Tours Meetup #1 - Introduction à Docker](https://reader034.vdocuments.net/reader034/viewer/2022052313/586fd8bd1a28ab18428b56dd/html5/thumbnails/41.jpg)
Merci pour votre attention !