SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
NOS OBJECTIFS
ORCHESTRER LES
CONTAINERS
DOCKER VS VM
LANCER SCRIPT PHP 7 EN
MODE CONSOLE VIA
DOCKER
AUTOMATISER LE BUILD
D’UNE IMAGE DOCKER
LANCER SCRIPT PHP 7 EN
MODE WEB VIA DOCKER
LOAD BALANCER 2
CONTAINERS WEB
A la découverte de
docker
CONSTRUIRE
MANUELLEMENT UNE
IMAGE PHP7
UTILISER LES IMAGES
DE LA COMMUNAUTÉ
Comprendre la différence
entre Docker et une machine virtuelle
DOCKER VS VM
Qu’est-ce qu’une machine virtuelle ?
C’est l’émulation des composants matériels d’une machine afin d’y exécuter un système d'exploitation dédié
dans lesquels nous pourrons y exécuter des applications.
composants matériels : disque dur, mémoire vive, carte graphique, etc.
machine : pc, gameboy, etc.
Le terme technique du logiciel permettant de virtualiser une machine entière est “hyperviseur”.
Les logiciels comme Vmware, VirtualBox, QEMU sont des hyperviseurs.
Pourquoi Docker n’est pas une machine virtuelle ?
● Docker n’émule pas les composants d’une machine
● Docker ne fait pas tourner de système d’exploitation
Qu’est-ce que Docker ?
Docker est un gestionnaire de container.
Il lance des processus dans des containers dont il isole les ressources grâce à
la fonctionnalité LXC du noyau Linux.
Mais alors qu’est-ce que ce fameux LXC ?
LXC repose sur la notion de groupes de contrôle Linux, les cgroups. Ici,
chaque groupe de contrôle offre aux applications une isolation totale des
ressources (notamment processeur, mémoire et accès E/S), et ce sans
recourir à des machines virtuelles à part entière.
Les conteneurs Linux proposent également une isolation complète de leur
espace de noms. Les fonctions telles que les systèmes de fichiers, les ID
réseau et les ID utilisateur, ainsi que tout autre élément généralement
associé aux systèmes d'exploitation, peuvent donc être considérés comme
« uniques » du point de vue de chaque conteneur.
C’est pour cela que Docker ne fonctionne pas sur Windows car il a besoin de la
fonctionnalité d’isolation que propose le noyau Linux au travers de LXC.
Ainsi pour utiliser Docker depuis un environnement Windows, il faut tout d’abord
créer une machine virtuelle qui fera tourner un système Linux dans lequel Docker
pourra s'exécuter.
Le vocabulaire Docker
Image Docker
IMMUTABLE
Container Docker
STATELESS
PERSISTANT
Volume
STATELESS
PERSISTANT
Image docker
IMMUTABLE
Container docker
STATELESS
Volume
PERSISTANT
Vos données sont là.
Base de données, Code source
NOUVELLE
Image docker
IMMUTABLE
NOUVEAU
Container docker
STATELESS
Volume
PERSISTANT
Vos données sont la.
Base de données, Code source
ANCIENContainerdockerSTATELESS
ANCIENNE
Image docker
IMMUTABLE
Projet Docker
étape initiale)
Je crée la structure du
projet
mkdir -p monprojet/docker/php7
mkdir -p monprojet/docker/lb
mkdir -p monprojet/web
cd monprojet
CONSTRUIRE MANUELLEMENT
UNE IMAGE PHP7
1ère étape)
Je démarre un container
à partir de l’image
d’Ubuntu et j’y installe
PHP7
docker run -it ubuntu:latest /bin/bash
apt-get update
apt-get install php
php -v
exit
2ème étape)
Je commit mon container
pour en faire une image
docker ps -a
docker commit [containerid] myphp:7.0
3ème étape)
Je vérifie que mon image
est bien présente
docker images
LANCER UN SCRIPT PHP 7
EN MODE CONSOLE
VIA DOCKER
En utilisant notre image PHP7
1ère étape)
Je lance mon script PHP
via Docker
echo "<?php echo 'hello world'; " >
web/index.php
docker run --rm -it -v "$(pwd)/web:/app"
myphp:7.0 php /app/index.php
LANCER UN SCRIPT PHP 7
EN MODE WEB
VIA DOCKER
En utilisant notre image PHP7
1ère étape)
Je lance mon script en
mode web via Docker
echo "<?php echo
getenv('HOSTNAME'); phpinfo();" >
web/index.php
docker run --rm -it -p "80:80" -w "/app"
-v "$(pwd)/web:/app" myphp:7.0 php -S
0.0.0.0:80
Allez dans un navigateur sur
http://localhost/
AUTOMATISER LE BUILD D’UNE IMAGE DOCKER
En créant un fichier Dockerfile
1ère étape)
Je définis les étapes du
build
# in file docker/php7/Dockerfile
FROM ubuntu:latest
RUN
DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get install -y php
WORKDIR /app
CMD php -S 0.0.0.0:80
2ère étape)
Je build l’image de PHP7
docker build docker/php7 -t myphp:7.0
ORCHESTRER LES CONTAINERS
Grâce à l’outil docker-compose et un fichier de configuration
docker-compose.yml
1ère étape)
Je définis la configuration
avec laquelle seront
lancés mes containers
# in file docker/docker-compose.yml
web:
container_name: web
image: myphp:7.0
ports:
- '80:80'
volumes:
- '$PWD/web:/app'
2ème étape)
Je lance mes containers
docker-compose -f
docker/docker-compose.yml up
Allez dans un navigateur sur
http://localhost/
Créer une image nginx et l’utiliser pour en faire un loadBalancer qui
équilibrera la charge entre 2 instances de notre container PHP7.
LOAD BALANCER 2 CONTAINERS WEB
1ère étape)
Je définis les étapes du
build
# file docker/lb/Dockerfile
FROM ubuntu:latest
RUN
DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get install -y
nginx
CMD nginx -g 'daemon off;'
2ère étape)
Je build l’image du
loadbalancer
docker build docker/lb -t lb:latest
3ème étape)
Je définis la configuration
avec laquelle seront
lancés mes containers
# in file docker/docker-compose.yml
web1:
image: myphp:7.0
volumes:
- '$PWD/web:/app'
web2:
image: myphp:7.0
volumes:
- '$PWD/web:/app'
lb:
image: lb:latest
volumes:
- '$PWD/docker/lb/default:/etc/nginx/sites-enabled/default'
links:
- web1:web1
- web2:web2
ports:
- '80:80'
4ème étape)
Je définis la configuration
avec laquelle seront
lancés mes containers
# in file docker/lb/default
upstream myapp {
server web1;
server web2;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
5ème étape)
Je lance mes containers
docker-compose -f
docker/docker-compose.yml up
Allez dans un navigateur sur
http://localhost/
UTILISER LES IMAGES DE LA COMMUNAUTÉ
1ère étape)
Je définis la configuration
avec laquelle seront
lancés mes containers
# in file docker/docker-compose.yml
web1:
image: php:7.1
entrypoint: php -S 0.0.0.0:80
working_dir: /app
volumes:
- '$PWD/web:/app'
web2:
image: php:7.1
entrypoint: php -S 0.0.0.0:80
working_dir: /app
volumes:
- '$PWD/web:/app'
lb:
image: nginx:latest
volumes:
- '$PWD/docker/lb/default:/etc/nginx/conf.d/default.conf'
links:
- web1:web1
- web2:web2
ports:
- '80:80'
2ème étape)
Je lance mes containers
docker-compose -f
docker/docker-compose.yml up
Allez dans un navigateur sur
http://localhost/
Merci !
Jean Pasqualini
@darkilliant

Contenu connexe

Tendances

Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec Docker
Luis Lopez
 

Tendances (20)

Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec Docker
 
Intro docker
Intro dockerIntro docker
Intro docker
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
 
Livre blanc docker
Livre blanc docker Livre blanc docker
Livre blanc docker
 
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
 
Docker du mythe à la réalité
Docker du mythe à la réalitéDocker du mythe à la réalité
Docker du mythe à la réalité
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ?
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Varnish & blue/green deployments
Varnish & blue/green deploymentsVarnish & blue/green deployments
Varnish & blue/green deployments
 
What is Docker
What is Docker What is Docker
What is Docker
 
13 big data docker
13 big data docker13 big data docker
13 big data docker
 
Docker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiqueDocker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatique
 

Similaire à A la découverte de docker

Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
AbdellahELMAMOUN
 
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdfoptimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
Pascal Ponzoni
 

Similaire à A la découverte de docker (20)

docker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyugdocker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyug
 
Prise en main de Docker
Prise en main de DockerPrise en main de Docker
Prise en main de Docker
 
docker.pptx
docker.pptxdocker.pptx
docker.pptx
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?
 
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et DerueGab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
 
A la découverte de docker, 2ème partie
A la découverte de docker, 2ème partieA la découverte de docker, 2ème partie
A la découverte de docker, 2ème partie
 
Introduction à docker - Meetup WP Rennes
Introduction à docker - Meetup WP RennesIntroduction à docker - Meetup WP Rennes
Introduction à docker - Meetup WP Rennes
 
Docker, ça mange quoi au printemps
Docker, ça mange quoi au printempsDocker, ça mange quoi au printemps
Docker, ça mange quoi au printemps
 
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdfoptimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx
709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx
709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx
 
docker.pdf
docker.pdfdocker.pdf
docker.pdf
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à docker
 
Be zend docker
Be zend dockerBe zend docker
Be zend docker
 
Alphorm.com Formation Docker (1/2) : Installation et Administration
Alphorm.com Formation Docker (1/2) : Installation et AdministrationAlphorm.com Formation Docker (1/2) : Installation et Administration
Alphorm.com Formation Docker (1/2) : Installation et Administration
 
Comment remplacer cygwin par docker
Comment remplacer cygwin par dockerComment remplacer cygwin par docker
Comment remplacer cygwin par docker
 
DevOps 3 - Docker.pdf
DevOps 3 - Docker.pdfDevOps 3 - Docker.pdf
DevOps 3 - Docker.pdf
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 

A la découverte de docker

  • 1. NOS OBJECTIFS ORCHESTRER LES CONTAINERS DOCKER VS VM LANCER SCRIPT PHP 7 EN MODE CONSOLE VIA DOCKER AUTOMATISER LE BUILD D’UNE IMAGE DOCKER LANCER SCRIPT PHP 7 EN MODE WEB VIA DOCKER LOAD BALANCER 2 CONTAINERS WEB A la découverte de docker CONSTRUIRE MANUELLEMENT UNE IMAGE PHP7 UTILISER LES IMAGES DE LA COMMUNAUTÉ
  • 2. Comprendre la différence entre Docker et une machine virtuelle DOCKER VS VM
  • 4. C’est l’émulation des composants matériels d’une machine afin d’y exécuter un système d'exploitation dédié dans lesquels nous pourrons y exécuter des applications. composants matériels : disque dur, mémoire vive, carte graphique, etc. machine : pc, gameboy, etc. Le terme technique du logiciel permettant de virtualiser une machine entière est “hyperviseur”. Les logiciels comme Vmware, VirtualBox, QEMU sont des hyperviseurs.
  • 5. Pourquoi Docker n’est pas une machine virtuelle ? ● Docker n’émule pas les composants d’une machine ● Docker ne fait pas tourner de système d’exploitation
  • 7. Docker est un gestionnaire de container. Il lance des processus dans des containers dont il isole les ressources grâce à la fonctionnalité LXC du noyau Linux.
  • 8. Mais alors qu’est-ce que ce fameux LXC ? LXC repose sur la notion de groupes de contrôle Linux, les cgroups. Ici, chaque groupe de contrôle offre aux applications une isolation totale des ressources (notamment processeur, mémoire et accès E/S), et ce sans recourir à des machines virtuelles à part entière. Les conteneurs Linux proposent également une isolation complète de leur espace de noms. Les fonctions telles que les systèmes de fichiers, les ID réseau et les ID utilisateur, ainsi que tout autre élément généralement associé aux systèmes d'exploitation, peuvent donc être considérés comme « uniques » du point de vue de chaque conteneur.
  • 9. C’est pour cela que Docker ne fonctionne pas sur Windows car il a besoin de la fonctionnalité d’isolation que propose le noyau Linux au travers de LXC. Ainsi pour utiliser Docker depuis un environnement Windows, il faut tout d’abord créer une machine virtuelle qui fera tourner un système Linux dans lequel Docker pourra s'exécuter.
  • 10.
  • 13. Image docker IMMUTABLE Container docker STATELESS Volume PERSISTANT Vos données sont là. Base de données, Code source
  • 14. NOUVELLE Image docker IMMUTABLE NOUVEAU Container docker STATELESS Volume PERSISTANT Vos données sont la. Base de données, Code source ANCIENContainerdockerSTATELESS ANCIENNE Image docker IMMUTABLE
  • 16. étape initiale) Je crée la structure du projet mkdir -p monprojet/docker/php7 mkdir -p monprojet/docker/lb mkdir -p monprojet/web cd monprojet
  • 18. 1ère étape) Je démarre un container à partir de l’image d’Ubuntu et j’y installe PHP7 docker run -it ubuntu:latest /bin/bash apt-get update apt-get install php php -v exit
  • 19. 2ème étape) Je commit mon container pour en faire une image docker ps -a docker commit [containerid] myphp:7.0
  • 20. 3ème étape) Je vérifie que mon image est bien présente docker images
  • 21. LANCER UN SCRIPT PHP 7 EN MODE CONSOLE VIA DOCKER En utilisant notre image PHP7
  • 22. 1ère étape) Je lance mon script PHP via Docker echo "<?php echo 'hello world'; " > web/index.php docker run --rm -it -v "$(pwd)/web:/app" myphp:7.0 php /app/index.php
  • 23. LANCER UN SCRIPT PHP 7 EN MODE WEB VIA DOCKER En utilisant notre image PHP7
  • 24. 1ère étape) Je lance mon script en mode web via Docker echo "<?php echo getenv('HOSTNAME'); phpinfo();" > web/index.php docker run --rm -it -p "80:80" -w "/app" -v "$(pwd)/web:/app" myphp:7.0 php -S 0.0.0.0:80
  • 25. Allez dans un navigateur sur http://localhost/
  • 26. AUTOMATISER LE BUILD D’UNE IMAGE DOCKER En créant un fichier Dockerfile
  • 27. 1ère étape) Je définis les étapes du build # in file docker/php7/Dockerfile FROM ubuntu:latest RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y php WORKDIR /app CMD php -S 0.0.0.0:80
  • 28. 2ère étape) Je build l’image de PHP7 docker build docker/php7 -t myphp:7.0
  • 29. ORCHESTRER LES CONTAINERS Grâce à l’outil docker-compose et un fichier de configuration docker-compose.yml
  • 30. 1ère étape) Je définis la configuration avec laquelle seront lancés mes containers # in file docker/docker-compose.yml web: container_name: web image: myphp:7.0 ports: - '80:80' volumes: - '$PWD/web:/app'
  • 31. 2ème étape) Je lance mes containers docker-compose -f docker/docker-compose.yml up
  • 32. Allez dans un navigateur sur http://localhost/
  • 33. Créer une image nginx et l’utiliser pour en faire un loadBalancer qui équilibrera la charge entre 2 instances de notre container PHP7. LOAD BALANCER 2 CONTAINERS WEB
  • 34. 1ère étape) Je définis les étapes du build # file docker/lb/Dockerfile FROM ubuntu:latest RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y nginx CMD nginx -g 'daemon off;'
  • 35. 2ère étape) Je build l’image du loadbalancer docker build docker/lb -t lb:latest
  • 36. 3ème étape) Je définis la configuration avec laquelle seront lancés mes containers # in file docker/docker-compose.yml web1: image: myphp:7.0 volumes: - '$PWD/web:/app' web2: image: myphp:7.0 volumes: - '$PWD/web:/app' lb: image: lb:latest volumes: - '$PWD/docker/lb/default:/etc/nginx/sites-enabled/default' links: - web1:web1 - web2:web2 ports: - '80:80'
  • 37. 4ème étape) Je définis la configuration avec laquelle seront lancés mes containers # in file docker/lb/default upstream myapp { server web1; server web2; } server { listen 80; location / { proxy_pass http://myapp; } }
  • 38. 5ème étape) Je lance mes containers docker-compose -f docker/docker-compose.yml up
  • 39. Allez dans un navigateur sur http://localhost/
  • 40. UTILISER LES IMAGES DE LA COMMUNAUTÉ
  • 41. 1ère étape) Je définis la configuration avec laquelle seront lancés mes containers # in file docker/docker-compose.yml web1: image: php:7.1 entrypoint: php -S 0.0.0.0:80 working_dir: /app volumes: - '$PWD/web:/app' web2: image: php:7.1 entrypoint: php -S 0.0.0.0:80 working_dir: /app volumes: - '$PWD/web:/app' lb: image: nginx:latest volumes: - '$PWD/docker/lb/default:/etc/nginx/conf.d/default.conf' links: - web1:web1 - web2:web2 ports: - '80:80'
  • 42. 2ème étape) Je lance mes containers docker-compose -f docker/docker-compose.yml up
  • 43. Allez dans un navigateur sur http://localhost/