docker tours meetup #1 - introduction à docker

Post on 07-Jan-2017

1.413 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Docker Tours Meetup #1

9 Septembre 2015 @ Cantine numérique

@DockerTours

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

À 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

Introduction à DockerRapide, promis

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 !

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 $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

L’architecture 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

$

Trouver une image

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]

. . .

$

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$

Les containers

1 processus=1 container

Mode interactif$ docker run -it centos /bin/bash

[root@af40a9d95e82 /]#

-t Allocate a pseudo-tty-i Interactive mode (STDIN)

. . .

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

. . .

Mode background$ docker logs -f hello

hello

hello

hello

hello

hello

hello

hello

hello

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$

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

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

Mais encore...Binding de ports

(expose / publish)

Points de montage(volume)

Connecter les containers(link)

Variables d’environnement

. . .

Docker en DéveloppementCas pratique

Notre contexte

REST

API

DB

→ →

Structure technique

Dropwizard

:9300

:8080

:8081

:9200

$ java -jar [JAR] server [CONF]

{ “_id”: ...

{ “_id”: ...

{ “_id”: ...

{ “_id”: ...

{ “_id”: ...

{ “_id”: ...

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

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

Avec docker

Application Elasticsearch

Comment faire ?

LINK

Application Elasticsearch

VOLUME/home/.../workdir

application.jar

config.yml

PORT

elasticsearch

/workdir

80808081

80808081

REGISTRY

Docker en productionCas 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 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”]

Bonnes pratiques

Evitez d’installer des paquets inutiles

Exécutez un seul processus par conteneur

Limitez le nombre de couches

Cas pratique

Application Elasticsearch

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

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” ]

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"]

Automatiser le lancement

docker-compose up -ddocker-compose.yml

docker-compose.yml

LINK

Application Elasticsearch

VOLUME

/var/log/app

PORT

elasticsearch

/app/log

80808081

80808081

/var/log/elastic

VOLUME

/data

Elasticsearch-load

Merci pour votre attention !

top related