Upload
adri1s
View
349
Download
0
Embed Size (px)
Citation preview
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
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
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 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