Le conteneur
from scratch
Construire une prison applicative à la main, sans Docker. Quand vous verrez docker run la semaine prochaine, vous saurez exactement ce qu'il vous épargne.
420-5A4-MT · Expérimentation · 1 point bonusCornucopia · Le Projet Maraîcher
Rapprocher les consommateurs locaux de la terre grâce à un portail de commande transparent et réactif.
Le Produit : Premier Catalogue Bio
Mise en ligne d'un premier site vitrine avec fiches conseils de plantation et formulaire de réservation de paniers hebdomadaires.
- Consultation des légumes disponibles en fonction des saisons.
- Prise de contact et réservations pour le marché du samedi.
Achalandage (100 vis/j) & Serveur Artisanal
10 à 100 visiteurs par jour
Les voisins et clients du marché découvrent le site vitrine.
Le site repose sur un serveur LAMP artisanal hébergé sur une vieille tour dans la grange, sans isolation ni sauvegarde récurrente.
Problème Technique & Solution From Scratch
Aucune isolation applicative. Si le serveur hôte plante ou subit un incident, tout le commerce de la ferme est perdu.
Construire manuellement la toute première prison applicative (chroot, unshare, cgroups) from scratch pour isoler le site de Cornucopia avant d'adopter Docker !
Pourquoi à la main ?
1979 : la commande chroot enferme un processus dans un répertoire. 2013 : Docker conquiert le monde. Entre les deux, rien de magique : Docker ne fait qu'assembler élégamment des mécanismes que Linux possède depuis longtemps. Aujourd'hui, premier jour du cours, vous touchez ces mécanismes un par un, à main levée. C'est le seul laboratoire de la session sans Docker, et c'est voulu : on ne peut pas apprécier un service qu'on n'a jamais rendu soi-même.
Le format est celui d'une expérimentation : la présence sur la période est évaluée (1 point), le fonctionnement final est souhaitable mais pas obligatoire. On explore, on se trompe, on démonte, on recommence. Seul prérequis : votre Linux.
À la fin de la séance, vous aurez :
- Une image : un fichier ordinaire qui contient un système de fichiers complet.
- Une prison chroot où un shell tourne, enfermé, sans voir le reste de la machine.
- Busybox : une centaine de commandes dans un seul exécutable statique.
- Une commande importée à la main avec ses bibliothèques, grâce à ldd : c'est le petit défi du jour.
- Avec unshare : un conteneur qui a ses propres processus et son propre nom d'hôte.
Défi de l'expérimentation : votre prison exécute une commande simple de votre choix, autre que nano. Montrez-la avant de partir, ou montrez vos ruines : les deux comptent.
L'image : un système de fichiers dans un fichier
Tout le système de la prison vivra dans un seul fichier ordinaire, formaté puis monté sur un répertoire. Retenez ce mot : une image. Docker emploiera exactement le même.
Le fichier est monté sur un point de montage : tout ce qu'on écrira dans le répertoire ira, en réalité, dans le fichier.
Un petit monde qui imite le grand
La prison doit ressembler à un vrai Linux vu de l'intérieur : on recrée la même arborescence que la racine, en miniature. Comme une fractale.
Comparez avec ls / sur votre machine : le même squelette, vide pour l'instant. À nous de choisir ce qui entre : c'est exactement la question qu'un Dockerfile répondra plus tard.
Les essentiels : un shell et son linker
Pour exécuter quoi que ce soit dans la prison, il faut au minimum un shell, l'interprète de liens (le linker), leurs bibliothèques, et quelques fichiers d'identité :
La ligne ldd + awk est la clé du jour : elle vous servira pour chaque commande que vous voudrez importer.
Busybox : cent commandes en une
Copier chaque commande avec ses bibliothèques deviendrait long. Busybox règle ça : un seul exécutable, compilé statique (aucune dépendance), qui sait se prendre pour ls, cp, mount, vi et une centaine d'autres.
La compilation prend quelques minutes : parfait pour aller voir où en sont les voisins. C'est aussi la doyenne des astuces des conteneurs minimalistes : les images Docker les plus fines du monde sont bâties sur Busybox.
Entrer dans la prison
Un petit script d'initialisation installe les liens Busybox, indexe les bibliothèques et monte /dev, puis chroot bascule la racine : de l'intérieur, le reste de la machine n'existe plus.
Faites le tour du propriétaire : essayez de voir vos fichiers de l'hôte. Impossible ? C'est le cloisonnement, premier pilier du conteneur.
Votre commande à vous
Le livrable de l'expérimentation : importer dans la prison une commande simple de votre choix, autre que nano, et la faire tourner dedans. La procédure est toujours la même :
- Des idées : htop, tree, figlet, cowsay, sl... plus c'est inutile et spectaculaire, mieux c'est.
- Si la commande se plaint d'une bibliothèque manquante, relisez sa sortie : elle vous dit exactement quoi copier.
- Certaines commandes veulent aussi des fichiers de données : ldd ne les voit pas, à vous de les traquer.
Fermer le conteneur
Avant de partir, on démonte proprement. Et si tout est cassé en chemin : mêmes commandes, puis on recommence du début, plus vite que la première fois.
Remarquez ce qui survit : le fichier conteneurimage. Le conteneur est parti, l'image reste, prête à être remontée ou copiée sur une autre machine. Gardez cette idée précieusement : c'est toute la philosophie de Docker.
Ce que Docker vous épargnera
Faites la liste de votre journée : créer une image, la formater, la monter, bâtir l'arborescence, copier un shell, traquer des bibliothèques, compiler Busybox, écrire un script d'initialisation, chrooter, unsharer, démonter. La semaine prochaine, tout ça tiendra dans une seule commande : docker run. Elle prendra une seconde. Vous saurez précisément le service qu'on vous rend, parce qu'aujourd'hui, vous l'avez rendu vous-même.
- Présence notée avant de partir : 1 point, prison fonctionnelle ou pas.
- Les curieux peuvent continuer : installer une application complète, créer des utilisateurs dans la prison... on en reparle en classe.