docker tours meetup #1 - introduction à docker

41
Docker Tours Meetup #1 9 Septembre 2015 @ Cantine numérique @DockerTours

Upload: thibaut-marmin

Post on 07-Jan-2017

1.413 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Docker Tours Meetup #1 - Introduction à Docker

Docker Tours Meetup #1

9 Septembre 2015 @ Cantine numérique

@DockerTours

Page 2: Docker Tours Meetup #1 - Introduction à Docker

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

À 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

Introduction à DockerRapide, promis

Page 5: Docker Tours Meetup #1 - Introduction à Docker

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

Pourquoi Docker est-il si populaire ?

Page 7: Docker Tours Meetup #1 - Introduction à Docker

Pourquoi Docker est-il si populaire ?

Page 8: Docker Tours Meetup #1 - Introduction à Docker

La solution : les containers !VM

Container

Page 9: Docker Tours Meetup #1 - Introduction à Docker

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

L’architecture Docker

Page 11: Docker Tours Meetup #1 - Introduction à Docker

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

Trouver une image

Page 13: Docker Tours Meetup #1 - Introduction à Docker

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

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

Les containers

1 processus=1 container

Page 16: Docker Tours Meetup #1 - Introduction à Docker

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

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

Mode background$ docker logs -f hello

hello

hello

hello

hello

hello

hello

hello

hello

Page 19: Docker Tours Meetup #1 - Introduction à Docker

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

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

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

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

Docker en DéveloppementCas pratique

Page 24: Docker Tours Meetup #1 - Introduction à Docker

Notre contexte

REST

API

DB

→ →

Page 25: Docker Tours Meetup #1 - Introduction à Docker

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

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

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

Avec docker

Application Elasticsearch

Page 29: Docker Tours Meetup #1 - Introduction à Docker

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

Docker en productionCas pratique

Page 31: Docker Tours Meetup #1 - Introduction à Docker

Différences entre dev et prod

Application Configurations

LogsPersistance des données

IMAGE

Page 32: Docker Tours Meetup #1 - Introduction à Docker

Le Dockerfile

Automatiser la création d’une image

Rapide

Reproductible

Maintenable

Page 33: Docker Tours Meetup #1 - Introduction à Docker

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

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

Cas pratique

Application Elasticsearch

Page 36: Docker Tours Meetup #1 - Introduction à Docker

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

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

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

Automatiser le lancement

docker-compose up -ddocker-compose.yml

Page 40: Docker Tours Meetup #1 - Introduction à Docker

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

Merci pour votre attention !