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/
2. 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
12. 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.
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 me debarrasser des VMs ?
Non!Pas encore…
16. 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
17. Dernière levé de fond à ajouter aux 40 millions en septembre dernier
95 000 000 $
19. 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
21. 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)
22. 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é.
23. 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
24. 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
25. 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)
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