Start working on TP5: docker-internals
This commit is contained in:
parent
43adef5c17
commit
e1b1f8e1b3
25
tutorial/docker-internals/Makefile
Normal file
25
tutorial/docker-internals/Makefile
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
SOURCES = tutorial.md setup.md oci.md manifest.md runc.md linuxkit.md vxlan.md rendu.md
|
||||||
|
PANDOCOPTS = --latex-engine=xelatex \
|
||||||
|
--standalone \
|
||||||
|
--normalize \
|
||||||
|
--number-sections \
|
||||||
|
--smart \
|
||||||
|
-M lang=fr-FR \
|
||||||
|
-M fontsize=12pt \
|
||||||
|
-M papersize=a4paper \
|
||||||
|
-M mainfont="Linux Libertine O" \
|
||||||
|
-M monofont="FantasqueSansMono-Regular" \
|
||||||
|
-M sansfont="Linux Biolinum O" \
|
||||||
|
-M colorlinks=true \
|
||||||
|
-M linkcolor="black" \
|
||||||
|
-M urlcolor="[rgb]{0.2,0.6,0.4}" \
|
||||||
|
--include-in-header=../header.tex
|
||||||
|
|
||||||
|
|
||||||
|
all: tutorial.pdf
|
||||||
|
|
||||||
|
tutorial.pdf: ${SOURCES}
|
||||||
|
pandoc ${PANDOCOPTS} -o $@ $+
|
||||||
|
|
||||||
|
clean::
|
||||||
|
rm tutorial.pdf
|
12
tutorial/docker-internals/linuxkit.md
Normal file
12
tutorial/docker-internals/linuxkit.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
`linuxkit`
|
||||||
|
==========
|
||||||
|
|
||||||
|
Exemple avec une machine qui fait office de serveur DNS.
|
||||||
|
|
||||||
|
Lien vers le fickit
|
||||||
|
|
||||||
|
## Exercice
|
||||||
|
|
||||||
|
Réaliser une recette `vault.yml` permettant de démarrer une instance.
|
14
tutorial/docker-internals/oci.md
Normal file
14
tutorial/docker-internals/oci.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
Open Container Initiative
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Formée en juin 2015, l'Open Container Initiative (OCI) a pour but d'établir le
|
||||||
|
standard commun aux programmes de contenerisation, afin d'éviter une
|
||||||
|
fragmentation de l'écosystème.
|
||||||
|
|
||||||
|
Trois spécifications ont été écrites :
|
||||||
|
|
||||||
|
- [`runtime-spec`](https://github.com/opencontainers/runtime-spec/blob/master/spec.md#platforms): défini la manière dont un conteneur est lancé ;
|
||||||
|
- [`image-spec`](https://github.com/opencontainers/image-spec/blob/master/spec.md): défini la construction, le transport et la préparation des images ;
|
||||||
|
- [`distribution-spec`](https://github.com/opencontainers/distribution-spec/blob/master/spec.md): défini la manière dont sont partagées et récupérées les images.
|
41
tutorial/docker-internals/rendu.md
Normal file
41
tutorial/docker-internals/rendu.md
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
Rendu
|
||||||
|
=====
|
||||||
|
|
||||||
|
Modalités de rendu
|
||||||
|
------------------
|
||||||
|
|
||||||
|
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
|
||||||
|
vous devrez m'envoyer vos rendus signés avec votre clef PGP.
|
||||||
|
|
||||||
|
Un service automatique s'occupe de réceptionner vos rendus, de faire des
|
||||||
|
vérifications élémentaires et de vous envoyer un accusé de réception (ou de
|
||||||
|
rejet).
|
||||||
|
|
||||||
|
Ce service écoute sur l'adresse <virli@nemunai.re>, c'est donc à cette adresse
|
||||||
|
et exclusivement à celle-ci que vous devez envoyer vos rendus. Tout rendu
|
||||||
|
envoyé à une autre adresse et/ou non signé et/ou reçu après la correction ne
|
||||||
|
sera pas pris en compte.
|
||||||
|
|
||||||
|
|
||||||
|
Tarball
|
||||||
|
-------
|
||||||
|
|
||||||
|
Tous les fichiers identifiés comme étant à rendre pour ce TP sont à
|
||||||
|
placer dans une tarball (pas d'archive ZIP, RAR, ...).
|
||||||
|
|
||||||
|
Voici une arborescence type (vous pourriez avoir des fichiers supplémentaires,
|
||||||
|
cela dépendra de votre avancée dans le projet) :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```
|
||||||
|
login_x-TP5/
|
||||||
|
login_x-TP5/mydocker-export.sh
|
||||||
|
login_x-TP5/config.json
|
||||||
|
login_x-TP5/unboundkit.yml
|
||||||
|
login_x-TP5/vault.yml
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Utilisez la même tarball pour le rendu que pour la partie précédente.
|
37
tutorial/docker-internals/runc.md
Normal file
37
tutorial/docker-internals/runc.md
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
https://ops.tips/blog/run-docker-with-forked-runc/
|
||||||
|
|
||||||
|
`runc`
|
||||||
|
======
|
||||||
|
|
||||||
|
`runc` est le programme qui est responsable de la création effective du conteneur : c'est lui qui va mettre en place les *namespaces*, les *capabilities*, les points de montages ou volumes, ... Attention, son rôle reste limité à la mise en place de l'environnement conteneurisé, ce n'est pas lui qui télécharge l'image, ni fait l'assemblage des couches de système de fichiers, entre autres.
|
||||||
|
|
||||||
|
Si vous n'avez pas eu le temps de terminer l'exercice précédent, vous pouvez utiliser `docker export | tar -C rootfs xv`.
|
||||||
|
|
||||||
|
On va essayer de lancer un shell `alpine` avec un volume dans notre home :)
|
||||||
|
|
||||||
|
D'abord on extraie l'image avec le script précédent, puis on crée le fichier de conf qui va bien.
|
||||||
|
|
||||||
|
Aujourd'hui, la création de conteneur est faite avec `runc`, mais il est parfaitement possible d'utiliser n'importe quel autre programme, à la place de `runc`, à partir du moment où il expose la même interface à Docker et qu'il accepte les bundle OCI.
|
||||||
|
|
||||||
|
https://github.com/opencontainers/runtime-spec/blob/master/config.md
|
||||||
|
|
||||||
|
https://hackernoon.com/docker-containerd-standalone-runtimes-heres-what-you-should-know-b834ef155426
|
||||||
|
|
||||||
|
|
||||||
|
## Exercice
|
||||||
|
|
||||||
|
Réaliser un `config.json` qui permette de lancer le conteneur `nemunaire/fic-admin`.
|
||||||
|
|
||||||
|
|
||||||
|
## Exercice
|
||||||
|
|
||||||
|
Serez-vous capable d'écrire un fichier `config.json` permettant d'obtenir le
|
||||||
|
même résultat que votre projet de moulette ?
|
||||||
|
|
||||||
|
* CGroups : 1GB RAM, 100 PID, ...
|
||||||
|
* strict minimum de capabilities ;
|
||||||
|
* volume étudiant pour correction ;
|
||||||
|
* carte réseau `veth` ;
|
||||||
|
* ...
|
10
tutorial/docker-internals/setup.md
Normal file
10
tutorial/docker-internals/setup.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
Mise en place
|
||||||
|
=============
|
||||||
|
|
||||||
|
* `jq`
|
||||||
|
* `runc`
|
||||||
|
* `containerd`
|
||||||
|
* `ctr`
|
||||||
|
* `linuxkit`
|
22
tutorial/docker-internals/tutorial.md
Normal file
22
tutorial/docker-internals/tutorial.md
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
title: Virtualisation légère -- TP n^o^ 5
|
||||||
|
subtitle: Docker Internals
|
||||||
|
author: Pierre-Olivier *Nemunaire* Mercier
|
||||||
|
institute: EPITA
|
||||||
|
date: Mercredi 14 novembre 2018
|
||||||
|
...
|
||||||
|
|
||||||
|
Dans ce cinquième du TP, nous allons entrer dans les sous-bassements de Docker !
|
||||||
|
|
||||||
|
Tous les éléments de ce TP (exercices et projet) sont à rendre à
|
||||||
|
<virli@nemunai.re> au plus tard le dimanche 25 novembre 2018 à 23 h 42. Consultez la
|
||||||
|
dernière section de chaque partie pour plus d'information sur les éléments à
|
||||||
|
rendre.
|
||||||
|
|
||||||
|
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
|
||||||
|
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
|
||||||
|
[me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96) faire
|
||||||
|
signer votre clef et n'hésitez pas à
|
||||||
|
[faire signer votre clef](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
|
||||||
|
|
||||||
|
\tableofcontents
|
8
tutorial/docker-internals/vxlan.md
Normal file
8
tutorial/docker-internals/vxlan.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
VxLAN
|
||||||
|
=====
|
||||||
|
|
||||||
|
https://blog.wescale.fr/2018/02/15/les-reseaux-doverlay-principes-et-fonctionnement/
|
||||||
|
|
||||||
|
https://vincent.bernat.ch/fr/blog/2017-vxlan-linux
|
Loading…
Reference in New Issue
Block a user