220 lines
6.3 KiB
Plaintext
220 lines
6.3 KiB
Plaintext
[file]
|
|
1-docker's basis.pdf
|
|
[skip]
|
|
4,5,6,7,8,10,11,12,13,18,21,22,23,29,30,36,37,38,
|
|
[end_user_slide]
|
|
22
|
|
[notes]
|
|
### 1
|
|
Après la piscine, on reste dans un thème aquatique, puisqu'on va parler de Docker aujourd'hui !
|
|
|
|
Sondage de repérage
|
|
|
|
* Qui a déjà entendu parlé de Docker ?
|
|
* Qui a déjà utilisé au moins une fois ?
|
|
* Est-ce que certain l'utilisent tous les jours ou presque ?
|
|
|
|
C'est vrai qu'une fois compris les principes, peut plus s'en passer.
|
|
|
|
* qqn déjà essayé un autre programme de virli ?
|
|
|
|
Pour les autres,
|
|
on va p-e commencer par expliquer ce que c'est, la virli.### 2
|
|
Déjà, la virtualisation ...
|
|
|
|
* La virtualisation classique
|
|
|
|
** gros serveur répondre pic de trafic quotidient, passe son temps à rien faire hors de ce pic => besoin d'optim
|
|
** Déploiement fastidieux de services concurrent (ex. un serveur web) :
|
|
- partager le port = partager la config
|
|
- reverse proxy : ok tant que c'est deux soft différents
|
|
- installation en parallèle de deux versions différentes hasardeuses et complexe
|
|
|
|
** Création du principe de machine virtuelle
|
|
- émulation du matériel
|
|
- gain en terme de sécu
|
|
|
|
** Aidé des instructions de virtualisation
|
|
- le matériel reste émulé, mais prends des raccourcis lorsque supporté par l'hôte et l'invité (virtio)
|
|
### 3
|
|
* Quelles sont les grandes étapes de boot d'une machine moderne ?
|
|
ground PS_ON, reset CPU, bootloader (BIOS/UEFI), chargeur d'amorce (GRUB, ...), noyau de l'OS, espace utilisateur (init, systemd, ...), daemons et applications utilisateur (logind, Xorg, ...)
|
|
|
|
* différences avec une machine virtuelle
|
|
- création d'un espace d'adressage
|
|
- vmenter
|
|
|
|
* Optimisation du reboot ?
|
|
|
|
* Pas encore très léger comme virtualisation
|
|
on veut pas vraiment des multiples noyaux et système, simplement pour un daemon qui écoute sur une autre IP
|
|
|
|
* Virtualisation légère : le noyau peut isoler des systèmes différents
|
|
- On a plus que l'espace utilisateur à recharger
|
|
- Plein de technos font ça : OpenVZ, LXC, ...
|
|
DEMO LXC VPS
|
|
|
|
* C'est mieux, mais on a encore des éléments inutiles : cron, init, ...
|
|
=> Et si on lançait uniquement notre deamon ?
|
|
DEMO docker owncloud, telegraf/graphana/... SRS FIC ?
|
|
|
|
* pub pour les cours 3 et 4 sur Linux Internals : NS + cg
|
|
### 4
|
|
* Scheduling simplifié
|
|
* RAM mieux utilisée
|
|
|
|
- kernel unique
|
|
- libc partagées
|
|
- cache de fichiers unique (s'adapte à l'espace restant)
|
|
### 5
|
|
* Acteurs historiques
|
|
- Zones Solaris
|
|
- Jails BSD
|
|
- OpenVZ
|
|
|
|
* Arnaques
|
|
- Docker4mac
|
|
- Docker4windows
|
|
Microsoft Hyper-V
|
|
Windows 10 Pro 64 bits
|
|
|
|
* En développement/test
|
|
- Windows Containers
|
|
Windows Server 2016
|
|
Windows 10 Anniversary Edition
|
|
### 6
|
|
Questions ?
|
|
### 7
|
|
DAEMON
|
|
* REST API
|
|
* qui gère des Docker objects
|
|
- images, conteneurs, services
|
|
- réseaux, nœux de cluster
|
|
- volumes
|
|
* local registry
|
|
* containerd/runc
|
|
|
|
CLIENT
|
|
|
|
Open Container Initiative
|
|
|
|
Docker hub/store
|
|
### 8
|
|
Image
|
|
* Modèle en lecture seule
|
|
* utilisé pour pour créer les conteneurs
|
|
|
|
Conteneur
|
|
* Instance d'une image
|
|
* isolé de tout de base, on règle après ce que l'on souhaite partager (réseau, stockage, ...)
|
|
|
|
Services
|
|
* groupe de conteneurs qui forme une application
|
|
### 9
|
|
Démo
|
|
|
|
docker run touch /toto
|
|
voir que dans un autre docker run, ls / ne montre pas foo
|
|
### 10
|
|
Commence par regarder en local si on a pas l'image
|
|
|
|
Ensuite il va interroger son registre par défaut, sans configuration, il s'agit du Docker Store.
|
|
|
|
Si l'on désucre le nom du conteneur, on obtient ce chemin
|
|
|
|
Le but de Docker étant de récupérer un fichier manifests
|
|
|
|
|
|
On utilise la forme complètement quand on a un registre privé
|
|
### 11
|
|
Parler de l'ancienne syntaxe toujours d'actualité, mais beaucoup plus documentée
|
|
### 12
|
|
Démo
|
|
|
|
docker image ls
|
|
docker image rm
|
|
|
|
docker container ls
|
|
docker container rm
|
|
docker container create
|
|
### 13
|
|
Comment fait-on pour créer une image ?
|
|
|
|
On va pouvoir créer une image (qui pourra donc servir de modèle pour créer d'autre cntr) à partir d'un conteneur que l'on décidera de figer à un instant donné.
|
|
|
|
=> docker commit
|
|
|
|
On indique lors du commit le conteneur à figer ainsi que lenom de l'image que l'on souhaite créer.### 14
|
|
* CoW
|
|
* layers/couches (docker image history IMAGE)
|
|
* unionfs
|
|
### 15
|
|
Maintenant, comment faire en sorte que deux conteneur puissent se parler ?
|
|
|
|
On commence par lancer deux cntrs. et l'on demande explicitement à ce que le compteur nous expose son port 80.
|
|
--
|
|
On crée ensuite un objet Docker network, dans lequel on vient placer nos deux conteneurs.
|
|
Ils peuvent alors se parler.
|
|
--
|
|
Mieux encore, un serveur DNS permet de résoudre le nom des conteneurs dans ce réseau, pour simplifier la configuration.
|
|
|
|
Si trop de temps :
|
|
docker container run -P nginx
|
|
docker container ls
|
|
docker container port $ID
|
|
go with firefox
|
|
### 16
|
|
On utilisé juste avant docker commit pour créer une nouvelle image à partir d'un conteneur. Mais on peut aussi utiliser ce qu'on appel des Dockerfile.
|
|
|
|
- fichier texte
|
|
- instructions de base : FROM, RUN, COPY, CMD
|
|
|
|
DEMO hello srs 1
|
|
|
|
- passage du contexte au daemon
|
|
- .dockerignore
|
|
|
|
- cache de construction
|
|
|
|
- bonnes pratiques à propos des installs :
|
|
- minimise le nombre de couches
|
|
faire la part des choses entre relecture/maintenabilité et nombre de couches
|
|
### 17
|
|
Dockerfile hello srs
|
|
|
|
À propos du linkage statique vs. dynamique
|
|
### 18
|
|
chaque ligne est exécutée dans un conteneur distinct
|
|
les commandes ne servent qu'à modifier le système de fichier
|
|
on ne peut pas lancer un programme, il sera fermé avec le conteneur
|
|
|
|
- bonnes pratiques à propos des installs :
|
|
- pas d'upgrade
|
|
- on clean les couches
|
|
### 19
|
|
Lorsqu'on a besoin de compiler un programme avant de le mettre dans un conteneur, pas besoin d'inclure le compilateur !
|
|
### 20
|
|
|
|
|
|
* volumes : une couche simple
|
|
* bind mounts : partagés avec l'hôte
|
|
|
|
* volume-from : partage de volumes entre conteneurs
|
|
|
|
* tmpfs mounts : non persistant, uniquement dans la mémoire de l'hôte
|
|
### 21
|
|
Questions ?
|
|
|
|
- limiter les ressources
|
|
- arrêter un conteneur
|
|
- commandes détachées du terminal (-d) + docker logs
|
|
### 22
|
|
* Questionnaire sur Epitaf sur les notions de cours + recherches perso (pour éviter un partiel)
|
|
* Demandez pour un partage de flux intéressants, d'articles cools sur le sujet, ...
|
|
|
|
* Rendus des exercices du TP + projet complémentaire par mail
|
|
- signature PGP
|
|
|
|
* Correction au début du prochain cours => limite du rendu
|
|
|
|
* Sondage de satisfaction à la fin du cours : notez vos feedbacks ! |