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

32
CONSTRUIRE, DEPLOYER EXÉCUTER VOS APPLICATIONS PARTOUT! @gandi_net @wizishop @epitechnice @dockernice #1 #dockernice

Upload: adri1s

Post on 07-Aug-2015

349 views

Category:

Data & Analytics


0 download

TRANSCRIPT

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 SchallerSysadmin Orange HEBEX CCL

Damien LallementDirecteur Pédagogique à Epitech Nice et manager du chapitre while42 de Nice

Qu'est ce que Docker

René CottonCTO 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 RunAny 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 RevollatDé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 showdocker run --net=host alpine ip addr showdocker 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

IMAGESSystè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 archivecat 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)

Registrystockage des images, push/pull

HUBgestion utilisateurs, authentification …

ApiContrô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 Dockerfiledocker build -t revollat/hello-epitech .

# Taille de l'image --> 225 Octets, qui dit mieux ?

# Exécutiondocker run revollat/hello-epitech

# Envoi sur le Hubdocker 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é CottonCTO WiziShop

SWARM

Olivier RevollatDéveloppeur web pour la

ville de Nice

Merci!DES QUESTIONS?

@gandi_net @wizishop @epitechnice @dockernice