Docker Tours Meetup #1
9 Septembre 2015 @ Cantine numérique
@DockerTours
Programme
Introduction à Docker & cas pratique
par Antoine Boudot et Thibaut Marmin (~3x20mn)
Du dev à la prod en passant ...
À propos...
Thibaut Marmin
@thibmarmin
Ing. Développeur chez Ingensi
Elasticsearch / Docker / AngularJS
Organisateur Docke...
Introduction à Docker
Rapide, promis
Qui devrait s’y intéresser ?
Devs
tous les langages
tous les OS
projet cible linux
Ops
la plupart des distributions
Linux1...
Pourquoi Docker est-il si populaire ?
Pourquoi Docker est-il si populaire ?
La solution : les containers !
VM
Container
Docker
▸ build
▸ ship
▸ run
Né le 13 mars 20131
nov. 2013 : 7300 stars, 900 forks, 200
contributeurs
jan. 2014 : levée de ...
L’architecture Docker
Les images
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
training/webapp latest fc77f57ad303 3 weeks ago 28...
Trouver une image
Trouver une image
$docker search centos
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/centos The off...
Récupérer une image
$ docker pull centos
Pulling repository centos
b7de3133ff98: Pulling dependent layers
5cc9e91966f7: Pu...
Les containers
1 processus=1 container
Mode interactif
$ docker run -it centos /bin/bash
[root@af40a9d95e82 /]#
-t Allocate a pseudo-tty
-i Interactive mode (STD...
Mode background
$ docker run -d --name hello centos /bin/bash -c 
"while true; do echo Hello world; sleep 1; done"
ce7383f...
Mode background
$ docker logs -f hello
hello
hello
hello
hello
hello
hello
hello
hello
Lister les containers
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9148ffb024e centos:latest "/bin/b...
Contrôller les containers
$ JOB=$(docker run -d [...]) # Start a new container
$ docker stop $JOB # Stop the container
$ d...
Créer une image
$ docker commit -m "Say Hello" -a "Kate Smith" 0b2616b0e5a8 user/centos:v2
4f177bd27a9ff0f6dc2a830403925b5...
Mais encore...
Binding de ports
(expose / publish)
Points de montage
(volume)
Connecter les containers
(link)
Variables d’...
Docker en Développement
Cas pratique
Notre contexte
REST
API
DB
→→
Structure technique
Dropwizard
:9300
:8080
:8081
:9200
$ java -jar [JAR] server [CONF]
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
Structure fonctionnelle
Dropwizard
:8080
:8081
GET /api # infos serveur
GET /api/contact # liste des contacts
GET /api/con...
Sans docker
Dropwizard
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
{ “_id”: ...
Télécharger elasticse...
Avec docker
Application Elasticsearch
Comment faire ?
LINK
Application Elasticsearch
VOLUME
/home/.../workdir
application.jar
config.yml
PORT
elasticsearch
/wor...
Docker en production
Cas pratique
Différences entre dev et prod
Application Configurations
LogsPersistance des données
IMAGE
Le Dockerfile
Automatiser la création d’une image
Rapide
Reproductible
Maintenable
Dockerfile
FROM BaseImage:version
MAINTAINER DockerMeetup DockerMeetup.com "Docker@Meetup.com"
ENV myvar=”value”
RUN yum i...
Bonnes pratiques
Evitez d’installer des paquets inutiles
Exécutez un seul processus par conteneur
Limitez le nombre de cou...
Cas pratique
Application Elasticsearch
Elasticsearch (Dockerfile)
FROM elasticsearch:1.7.1
MAINTAINER DockerMeetup DockerMeetup.com "Docker@Meetup.com"
VOLUME ["...
L’application (Dockerfile)
FROM java:8-jre
MAINTAINER DockerMeetup DockerMeetup.com "Docker@Meetup.com"
RUN mkdir -p /app/...
Chargement initial (Dockerfile)
FROM tutum/curl:trusty
MAINTAINER DockerMeetup DockerMeetup.com "Docker@Meetup.com"
COPY ....
Automatiser le lancement
docker-compose up -d
docker-compose.yml
docker-compose.yml
LINK
Application Elasticsearch
VOLUME
/var/log/app
PORT
elasticsearch
/app/log
8080
8081
8080
8081
/var...
Merci pour votre attention !
Prochain SlideShare
Chargement dans…5
×

Docker Tours Meetup #1 - Introduction à Docker

1 272 vues

Publié le

Slides de l'introduction à Docker présentée par Thibaut Marmin et Antoine Boudot lors du premier Docker Tours Meetup (@DockerTours).

Présentation en trois parties :
- Introduction Docker (classique)
- Cas pratique en DEV
- Cas pratique en PROD

http://www.meetup.com/fr/Docker-Tours

Publié dans : Technologie
0 commentaire
5 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 272
Sur SlideShare
0
Issues des intégrations
0
Intégrations
19
Actions
Partages
0
Téléchargements
47
Commentaires
0
J’aime
5
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Docker Tours Meetup #1 - Introduction à Docker

  1. 1. Docker Tours Meetup #1 9 Septembre 2015 @ Cantine numérique @DockerTours
  2. 2. Programme Introduction à Docker & cas pratique par Antoine Boudot et Thibaut Marmin (~3x20mn) Du dev à la prod en passant par Jenkins par Benjamin Cousin et Cédric Gatay (~30mn) Pizzas / Bières offertes par le groupe Cyrès
  3. 3. À 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
  4. 4. Introduction à Docker Rapide, promis
  5. 5. 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 !
  6. 6. Pourquoi Docker est-il si populaire ?
  7. 7. Pourquoi Docker est-il si populaire ?
  8. 8. La solution : les containers ! VM Container
  9. 9. 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
  10. 10. L’architecture Docker
  11. 11. Les images $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE training/webapp latest fc77f57ad303 3 weeks ago 280.5 MB ubuntu 13.10 5e019ab7bf6d 4 weeks ago 180 MB ubuntu saucy 5e019ab7bf6d 4 weeks ago 180 MB ubuntu 12.04 74fe38d11401 4 weeks ago 209.6 MB ubuntu precise 74fe38d11401 4 weeks ago 209.6 MB ubuntu 12.10 a7cf8ae4e998 4 weeks ago 171.3 MB ubuntu quantal a7cf8ae4e998 4 weeks ago 171.3 MB ubuntu 14.04 99ec81b80c55 4 weeks ago 266 MB ubuntu latest 99ec81b80c55 4 weeks ago 266 MB ubuntu trusty 99ec81b80c55 4 weeks ago 266 MB ubuntu 13.04 316b678ddf48 4 weeks ago 169.4 MB ubuntu raring 316b678ddf48 4 weeks ago 169.4 MB ubuntu 10.04 3db9c44f4520 4 weeks ago 183 MB ubuntu lucid 3db9c44f4520 4 weeks ago 183 MB $
  12. 12. Trouver une image
  13. 13. 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] . . . $
  14. 14. Récupérer une image $ docker pull centos Pulling repository centos b7de3133ff98: Pulling dependent layers 5cc9e91966f7: Pulling fs layer 511136ea3c5a: Download complete ef52fb1fe610: Download complete . . . Status: Downloaded newer image for centos $
  15. 15. Les containers 1 processus=1 container
  16. 16. Mode interactif $ docker run -it centos /bin/bash [root@af40a9d95e82 /]# -t Allocate a pseudo-tty -i Interactive mode (STDIN) . . .
  17. 17. 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 . . .
  18. 18. Mode background $ docker logs -f hello hello hello hello hello hello hello hello hello
  19. 19. Lister les containers $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f9148ffb024e centos:latest "/bin/bash -c 'while 9 seconds ago Up 8 seconds hello e2ccef3bcc5a elasticsearch:latest "/docker-entrypoint. 5 weeks ago Up 2 seconds 9200... elastic $
  20. 20. 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
  21. 21. 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
  22. 22. Mais encore... Binding de ports (expose / publish) Points de montage (volume) Connecter les containers (link) Variables d’environnement . . .
  23. 23. Docker en Développement Cas pratique
  24. 24. Notre contexte REST API DB →→
  25. 25. Structure technique Dropwizard :9300 :8080 :8081 :9200 $ java -jar [JAR] server [CONF] { “_id”: ... { “_id”: ... { “_id”: ... { “_id”: ... { “_id”: ... { “_id”: ...
  26. 26. 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
  27. 27. 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
  28. 28. Avec docker Application Elasticsearch
  29. 29. Comment faire ? LINK Application Elasticsearch VOLUME /home/.../workdir application.jar config.yml PORT elasticsearch /workdir 8080 8081 8080 8081 REGISTRY
  30. 30. Docker en production Cas pratique
  31. 31. Différences entre dev et prod Application Configurations LogsPersistance des données IMAGE
  32. 32. Le Dockerfile Automatiser la création d’une image Rapide Reproductible Maintenable
  33. 33. Dockerfile FROM BaseImage:version MAINTAINER DockerMeetup DockerMeetup.com "Docker@Meetup.com" 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”]
  34. 34. Bonnes pratiques Evitez d’installer des paquets inutiles Exécutez un seul processus par conteneur Limitez le nombre de couches
  35. 35. Cas pratique Application Elasticsearch
  36. 36. Elasticsearch (Dockerfile) FROM elasticsearch:1.7.1 MAINTAINER DockerMeetup DockerMeetup.com "Docker@Meetup.com" 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
  37. 37. L’application (Dockerfile) FROM java:8-jre MAINTAINER DockerMeetup DockerMeetup.com "Docker@Meetup.com" 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” ]
  38. 38. Chargement initial (Dockerfile) FROM tutum/curl:trusty MAINTAINER DockerMeetup DockerMeetup.com "Docker@Meetup.com" COPY ./script/load.sh /elasticsearch/load.sh WORKDIR /elasticsearch/ ENTRYPOINT ["./load.sh"]
  39. 39. Automatiser le lancement docker-compose up -d docker-compose.yml
  40. 40. docker-compose.yml LINK Application Elasticsearch VOLUME /var/log/app PORT elasticsearch /app/log 8080 8081 8080 8081 /var/log/elastic VOLUME /data Elasticsearch-load
  41. 41. Merci pour votre attention !

×