CONSTRUIRE,
DEPLOYER EXÉCUTER
VOS APPLICATIONS
PARTOUT!
@gandi_net @wizishop @epitechnice @dockernice
#1 #dockernice
Conférence
• Qu'est ce que Docker
• Installation / Architecture
• Déploiement d’un cluster avec swarm.
Ateliers
• Application X11 dans docker
• Environnement de dev avec docker-compose
Adrien Schaller
Sysadmin Orange HEBEX CCL
Damien Lallement
Directeur Pédagogique à Epitech Nice
et manager du chapitre while42 de
Nice
Qu'est ce que Docker
René Cotton
CTO WiziShop
Le tableau infernal du déploiement
Le tableau infernal du transport
La solution pour le transport
Le tableau devient limpide
La solution pour le deploiement
Le tableau devient limpide ici aussi
Définition
Build, Ship and Run
Any App, Anywhere
Qu'est ce que Docker
▪ Embarquer une application dans un container virtuel
exécutable sur tout type d’environnement
▪ Faciliter les déploiements d'une application, et la gestion
du dimensionnement de l'infrastructure sous-jacente
▪ Open source (sous licence Apache 2.0)
▪ Société américaine, qui a été lancée par le Français
Solomon Hykes.
Comparaison VM / Docker
App
Bin / Lib
OS invité
Hyperviseur
OS hôte
Serveur physique
Bin / Lib
OS invité
App
Bin / Lib
OS invité
App
App
Bin / Lib
OS hôte
Serveur physique
Bin / Lib Bin / Lib
AppApp
Virtualisation Containers
Je peux me debarrasser des VMs ?
Non!Pas encore…
Quelques chiffres
2 ansAge de la société
25 MoTaille nécessaire pour installer Boot2Docker sur
votre machine
45 300Nombre de container publié par les utilisateurs sur
le HUB
Dernière levé de fond à ajouter aux 40 millions en septembre dernier
95 000 000 $
Olivier Revollat
Développeur web pour la ville de
Nice
ARCHITECTURE
Containers
▪ Virtualisation légère de processus
▪ Isolation fournie par les fonctionnalités du noyau Linux
(v. >3.10)
Docker
▪ Portabilité des containers
▪ Concept d'images
CORE CONCEPTS
Control groups (a.k.a cgroups)
Contrôler/limiter les ressources utilisées par un container (cpu, mémoire, ...)
https://docs.docker.com/reference/run/#runtime-constraints-on-cpu-and-memory
-m="": Memory limit (format: <number><optional unit>, where unit = b, k, m or g)
-memory-swap="": Total memory limit (memory + swap, format: <number><optional unit>)
-c, --cpu-shares=0 CPU shares (relative weight)
NAMESPACE
Un “container” est un terme générique qui désigne un ensemble de namespace
docker run alpine ps aux
docker run alpine ip addr show
docker run --net=host alpine ip addr show
docker run --net=none alpine ip addr show
docker run alpine mount
● The pid namespace: Used for process isolation (PID: Process ID).
● The net namespace: Used for managing network interfaces (NET: Networking).
● The ipc namespace: Used for managing access to IPC resources (IPC: InterProcess
Communication).
● The mnt namespace: Used for managing mount-points (MNT: Mount).
● ​User namespace : mapping UID container <--> host. Non encore implémenté.
CAPABILITIES
Permet de donner plus ou moins de privilèges système à un container : en
rapport avec l’aspect sécurité
--cap-add: Add Linux capabilities
--cap-drop: Drop Linux capabilities
--privileged=false: Give extended privileges to this container
--device=[]: Allows you to run devices inside the container without the --privileged flag.
Ex.:
docker run --device=/dev/snd:/dev/snd ...
docker run --cap-add=ALL --cap-drop=MKNOD ...
● Par défaut les container sont lancés sans privilèges
● Ex de capabilities : mount operation, raw sokets (packet spoofing), creation device, load
module kernel, …
● http://man7.org/linux/man-pages/man7/capabilities.7.html
IMAGES
Système de et fichier
méta données
docker images [--all]
docker images | grep alpine # notez l'identifiant de l'image
docker run -t -i alpine sh # editer un fichier dans container
# Si on sort du container à ce stade la modif est perdue
# Pour la rendre durable :
docker commit -m "edition d'un fichier" <ID_CONTAINER> revollat/alpine
# Créer à partir d'une archive
cat exampleimage.tgz | docker import - exampleimagelocal:new
● Métaphore : en POO la Classe est à l'image ce
que l'instance objet est au container
● Couches (layers) /union FS / "lecture-seul"
● Copy-On-Write pour écriture
● Multiples container / Images unique / Ecriture du
delta
Visualiser les couches : https://imagelayers.io/?images=revollat%2Fh2o:latest
VOLUMES
docker run --name mysql 
-v /my/custom:/etc/mysql/conf.d 
-v /my/own/datadir:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
● Partage de données entre plusieurs containers
● Partage de données entre l'hote et le container
● bypass Union FS
● Persistent (même si un container est arrête)
Registry
stockage des images, push/pull
HUB
gestion utilisateurs, authentification …
Api
Contrôle du daemon Docker via API HTTP RESTful
Dockerfile
git clone https://github.com/revollat/hello-world
# compiler assembleur (faut nasm sur votre machine)
make
# Créer une image vide :)
tar cv --files-from /dev/null | docker import - vide
# voir Dockerfile
# Build à partir du Dockerfile
docker build -t revollat/hello-epitech .
# Taille de l'image --> 225 Octets, qui dit mieux ?
# Exécution
docker run revollat/hello-epitech
# Envoi sur le Hub
docker push revollat/hello-epitech
# De votre coté
docker run revollat/hello-epitech
Construisons le plus petit Container du monde et revoyons les notions abordées
INSTALLATION
René Cotton
CTO WiziShop
SWARM
Olivier Revollat
Développeur web pour la ville de
Nice
Merci!
DES QUESTIONS?
@gandi_net @wizishop @epitechnice @dockernice
Docker nice meetup #1   construire, déployer et exécuter vos applications, partout !

Docker nice meetup #1 construire, déployer et exécuter vos applications, partout !

  • 1.
    CONSTRUIRE, DEPLOYER EXÉCUTER VOS APPLICATIONS PARTOUT! @gandi_net@wizishop @epitechnice @dockernice #1 #dockernice
  • 2.
    Conférence • Qu'est ceque Docker • Installation / Architecture • Déploiement d’un cluster avec swarm. Ateliers • Application X11 dans docker • Environnement de dev avec docker-compose Adrien Schaller Sysadmin Orange HEBEX CCL
  • 3.
    Damien Lallement Directeur Pédagogiqueà Epitech Nice et manager du chapitre while42 de Nice
  • 4.
    Qu'est ce queDocker René Cotton CTO WiziShop
  • 5.
    Le tableau infernaldu déploiement
  • 6.
    Le tableau infernaldu transport
  • 7.
    La solution pourle transport
  • 8.
  • 9.
    La solution pourle deploiement
  • 10.
    Le tableau devientlimpide ici aussi
  • 11.
    Définition Build, Ship andRun Any App, Anywhere
  • 12.
    Qu'est ce queDocker ▪ Embarquer une application dans un container virtuel exécutable sur tout type d’environnement ▪ Faciliter les déploiements d'une application, et la gestion du dimensionnement de l'infrastructure sous-jacente ▪ Open source (sous licence Apache 2.0) ▪ Société américaine, qui a été lancée par le Français Solomon Hykes.
  • 13.
    Comparaison VM /Docker App Bin / Lib OS invité Hyperviseur OS hôte Serveur physique Bin / Lib OS invité App Bin / Lib OS invité App App Bin / Lib OS hôte Serveur physique Bin / Lib Bin / Lib AppApp Virtualisation Containers
  • 14.
    Je peux medebarrasser des VMs ? Non!Pas encore…
  • 15.
  • 16.
    2 ansAge dela société 25 MoTaille nécessaire pour installer Boot2Docker sur votre machine 45 300Nombre de container publié par les utilisateurs sur le HUB
  • 17.
    Dernière levé defond à ajouter aux 40 millions en septembre dernier 95 000 000 $
  • 18.
    Olivier Revollat Développeur webpour la ville de Nice ARCHITECTURE
  • 19.
    Containers ▪ Virtualisation légèrede processus ▪ Isolation fournie par les fonctionnalités du noyau Linux (v. >3.10) Docker ▪ Portabilité des containers ▪ Concept d'images
  • 20.
  • 21.
    Control groups (a.k.acgroups) Contrôler/limiter les ressources utilisées par un container (cpu, mémoire, ...) https://docs.docker.com/reference/run/#runtime-constraints-on-cpu-and-memory -m="": Memory limit (format: <number><optional unit>, where unit = b, k, m or g) -memory-swap="": Total memory limit (memory + swap, format: <number><optional unit>) -c, --cpu-shares=0 CPU shares (relative weight)
  • 22.
    NAMESPACE Un “container” estun terme générique qui désigne un ensemble de namespace docker run alpine ps aux docker run alpine ip addr show docker run --net=host alpine ip addr show docker run --net=none alpine ip addr show docker run alpine mount ● The pid namespace: Used for process isolation (PID: Process ID). ● The net namespace: Used for managing network interfaces (NET: Networking). ● The ipc namespace: Used for managing access to IPC resources (IPC: InterProcess Communication). ● The mnt namespace: Used for managing mount-points (MNT: Mount). ● ​User namespace : mapping UID container <--> host. Non encore implémenté.
  • 23.
    CAPABILITIES Permet de donnerplus ou moins de privilèges système à un container : en rapport avec l’aspect sécurité --cap-add: Add Linux capabilities --cap-drop: Drop Linux capabilities --privileged=false: Give extended privileges to this container --device=[]: Allows you to run devices inside the container without the --privileged flag. Ex.: docker run --device=/dev/snd:/dev/snd ... docker run --cap-add=ALL --cap-drop=MKNOD ... ● Par défaut les container sont lancés sans privilèges ● Ex de capabilities : mount operation, raw sokets (packet spoofing), creation device, load module kernel, … ● http://man7.org/linux/man-pages/man7/capabilities.7.html
  • 24.
    IMAGES Système de etfichier méta données docker images [--all] docker images | grep alpine # notez l'identifiant de l'image docker run -t -i alpine sh # editer un fichier dans container # Si on sort du container à ce stade la modif est perdue # Pour la rendre durable : docker commit -m "edition d'un fichier" <ID_CONTAINER> revollat/alpine # Créer à partir d'une archive cat exampleimage.tgz | docker import - exampleimagelocal:new ● Métaphore : en POO la Classe est à l'image ce que l'instance objet est au container ● Couches (layers) /union FS / "lecture-seul" ● Copy-On-Write pour écriture ● Multiples container / Images unique / Ecriture du delta Visualiser les couches : https://imagelayers.io/?images=revollat%2Fh2o:latest
  • 25.
    VOLUMES docker run --namemysql -v /my/custom:/etc/mysql/conf.d -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql ● Partage de données entre plusieurs containers ● Partage de données entre l'hote et le container ● bypass Union FS ● Persistent (même si un container est arrête)
  • 26.
    Registry stockage des images,push/pull HUB gestion utilisateurs, authentification … Api Contrôle du daemon Docker via API HTTP RESTful
  • 27.
    Dockerfile git clone https://github.com/revollat/hello-world #compiler assembleur (faut nasm sur votre machine) make # Créer une image vide :) tar cv --files-from /dev/null | docker import - vide # voir Dockerfile # Build à partir du Dockerfile docker build -t revollat/hello-epitech . # Taille de l'image --> 225 Octets, qui dit mieux ? # Exécution docker run revollat/hello-epitech # Envoi sur le Hub docker push revollat/hello-epitech # De votre coté docker run revollat/hello-epitech Construisons le plus petit Container du monde et revoyons les notions abordées
  • 28.
  • 30.
  • 31.

Notes de l'éditeur

  • #17 a finir de remplir
  • #28 Je pense qu’il serait mieux de faire ce slide pendant l’attelier ?