# Voyage par conteneur

## Made in Unix

### Que doit-on isoler ?

> * Matériel ?
> * Processus ?
> * Réseau ?
> * Système de fichiers ?
> * Utilisateurs et groupes ?
> * Nom et domaine de la machine !
> * IPC !
> * Horloge ?


## Made in Linux


### Pour cette mission, vous disposerez de ...

![](armory.jpg)

----

#### Namespaces

Isolation des processus (PID Namespace), interface réseau (Network
Namespace), partitions montées (Mount Namespace), utilisateurs et
groupes (User Namespace), nom de machine (UTS Namespace), IPC.

`namespaces(7)`

. . .

#### CGroups

Statistiques sur l'utilisation des ressources et limitation.

<https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt>

. . .

#### Capabilities

Limitation de ce que `root` peut faire.

`capabilities(7)`


## pour les nuls

### Mais Jamy, comment ça marche ?

![](cps.jpg)


### Syscall

* `clone`
* `unshare`
* `setns`

. . .

#### Exemple

```c
int fd;

/* Get descriptor for namespace */
fd = open("/proc/PID/ns/FILE", O_RDONLY);

/* Join that namespace */
setns(fd, 0);
```

----

```
PATH                     FILESYSTEM
/                        /dev/sda1
├── dev
├── proc
├── sys
├── usr
└── var
    ├── cntrs
    │   ├── toto         /dev/sda5
    │   │   ├── dev
    │   │   ├── proc
    │   │   ├── sys
    │   │   └── usr
    │   └── virli        /dev/sda6
    │       ├── dev
    │       ├── proc
    │       ├── sys
    │       └── usr
    ├── log
    └── tmp
```

### Système de fichiers

* `pivot_root(2)`
* Thin provisioning
* Union FileSystems

### Union FileSystem

![](unionfs.png)


### Le réseau ...

![](sosreseau.jpg)


### Le réseau ...

#### Interface physique

Facile ! Mais il en faut beaucoup.

. . .

#### VLAN

Un tag par conteneur. Routage *interne* par le switch en amont.

. . .

#### MAC-VLAN

* **VEPA :** tous les paquets sortants sortent, y compris ceux à destination
  d'une autre machine locale. Le switch derrière doit rerouter les paquets vers
  la machine.
* **Bridge :** le noyau analyse les paquets avant de les transmettre.

. . .

#### Virtual Ethernet

Interfaces virtuelles connectées à un bridge.


## En résumé

### Mais ! (il y a toujours un mais)

. . .

#### LXC stable

Prêt pour la production depuis février 2014.

Attention à la configuration et aux erreur avec les `capabilities` !

. . .

#### Partage des systèmes de fichiers

Optimise l'utilisation du cache du système de fichiers :-)

. . .

N'optimise pas le travail de l'administrateur système :-(
