les conteneurs
entre liberté et contrôle
Liberté
De façon générale, la liberté est un concept qui désigne la possibilité d'action ou de mouvement.
[…]
Pour le sens commun, la liberté s'oppose à la notion d'enfermement ou de séquestration.
Contrôle
Le contrôle est une aptitude à diriger ou supprimer le changement.
[…]
Le contrôle vise à réduire l'incertitude sur un système ou un élément d'un système. Il peut être une réaction à la peur ou à l'angoisse.
Conteneur ?



Conteneur maritime
- Concept des années 60
- Normalisé ISO ISO 1496-1 (1990) et ISO 668 (1995)
-
longueur: 10, 20, 30 et 40 pieds
hauteur 2,44m (8 pieds)
Intérets
- Rupture de charge
- Empotage
- Dépotage



Concurrents








Et en informatique ?
Une technique de virtualisation
Isolateur
Virtualisations
- Hyperviseur
- type 2
- type 1
- Materiel
- Noyau en user-space
- Isolateur
Histoire des conteneurs
- chroot (1982)
- Virtuozzo / BSD Jail / V-Server (2000)
- Solaris Zones (2004)
- OpenVZ (2005)
- LXC (2008)
Implementation actuelle
- Cgroups
- v1 2.6.24 (2008)
- v2 4.5 (2015)
- Namespaces
- Mount (2002)
- Process ID
- Network
- Interprocess Communication
- UTS
- User ID
- cgroup
Utilisateurs
- LXC
- docker
- systemd-nspawn
- rkt
Fonctionnalités
(on résume)
Exécution dans un contexte contrôlé
- "noisy neighbor"
- mémoire
- cpu
- disque
- Élévation des privilèges
- Vol de données
- Dépendances
Reproductibilité
Packaging
- uniformisation (sic)
- complexité
- mise à jour


Vendoring
- outillage
- portée
- dépendances non-explicites
Docker
démocratisation
Histoire
- dotCloud (2008/2016)
- Open-source (mars 2013)
- partenariat
- RedHat (sept 2013)
- Microsoft (oct 2014)
- …
Techniquement
- API REST
- conteneurisation
- wrapper au dessus de LXC (<0.9)
- libcontainer (2014)
- runc
- organisation
- un seul binaire
- client / serveur
- client / serveur / containerd / runc

Layers
Empotage

- Bibliothèques
- système (glibc…)
- applicatives
- Application
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y nginx
cmd nginx
$ docker build .
$ docker run $container
FROM python:3
ADD my_script.py /
RUN pip install pystrich
CMD [ "python", "./my_script.py" ]
# Sample taken from pyStrich GitHub repository
# https://github.com/mmulqueen/pyStrich
from pystrich.datamatrix import DataMatrixEncoder
encoder = DataMatrixEncoder('This is a DataMatrix.')
encoder.save('./datamatrix_test.png')
print(encoder.get_ascii())
FROM golang:1.7.3 as builder
RUN go get -d -v github.com/alexellis/href-counter
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/alexellis/href-counter/app .
ENV url=https://barpilot.io
ENTRYPOINT ["./app"]
multi-stage build
Rupture de charge
- registry
- docker hub
- gcr.io
- quay.io
- nom unique des images
- (adresse)/(user)/name:(version)
- analyse de vulnérabilité
- clair
$ docker tag
$ docker push
Dépotage
run
$ docker run -it ubuntu bash
$ docker run hello-world
The good, the bad and the ugly
Good
- image légères
- multi-stage
- scratch / busybox / alpine
- versionné
Bad
- peu ou pas de layers
- utilisation de :latest
- Unique image pour plusieurs logiciels
-
Pas de ménage dans les layers
RUN apt-get update -y && apt-get install -y software
Ugly
- cache incompris
RUN apt-get update -y
RUN apt-get update -y
RUN apt-get update -y
RUN apt-get install -y software
- layers incompris
RUN apt-get install -y lib-dev
RUN $complile
RUN apt-get remove -y lib-dev
- matériel de build toujours présent
Les conteneurs : entre liberté et contrôle
By Guilhem Lettron
Les conteneurs : entre liberté et contrôle
Retour sur le mouvement de la conteneurisation. Sa définition, son origine et son impact.
- 275