Docker nice meetup #1 construire, déployer et exécuter vos applications, partout !
17 May 2015•0 j'aime
5 j'aime
Soyez le premier à aimer ceci
afficher plus
•2,083 vues
vues
Nombre de vues
0
Sur Slideshare
0
À partir des intégrations
0
Nombre d'intégrations
0
Télécharger pour lire hors ligne
Signaler
Données & analyses
Premier Meetup Docker sur Nice. A cette occasion nous nous retrouverons dans les locaux d’Epitech Nice pour une conférence suivie d'ateliers.
En partenariat avec :
- Epitech Nice
- Gandi
- Wizishop
http://www.meetup.com/Docker-Nice/events/222345639/
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
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
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 $
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
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