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

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