Slide 1

Slide 1 text

Les containers, décryptage

Slide 2

Slide 2 text

Renaud Chaput @renchap

Slide 3

Slide 3 text

Les containers c’est …

Slide 4

Slide 4 text

Docker

Slide 5

Slide 5 text

Un truc de développeurs

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

En production en 2 minutes

Slide 8

Slide 8 text

Une révolution

Slide 9

Slide 9 text

La mort de notre métier

Slide 10

Slide 10 text

Ou pas ?

Slide 11

Slide 11 text

La technique

Slide 12

Slide 12 text

Docker Koikecé ? Des outils pour gérer / héberger / distribuer tout ça Un processus pour créer ces images Docker : le docker file Un format standardisé pour stocker ces fichiers : une image Docker Namespaces + Cgroups + FS

Slide 13

Slide 13 text

FROM ruby:2.3.3 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev RUN mkdir /myapp
 WORKDIR /myapp ADD Gemfile /myapp/Gemfile
 ADD Gemfile.lock /myapp/Gemfile.lock RUN bundle install ADD . /myapp FROM ruby:2.3.3 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev RUN mkdir /myapp
 WORKDIR /myapp ADD Gemfile /myapp/Gemfile
 ADD Gemfile.lock /myapp/Gemfile.lock RUN bundle install ADD . /myapp Dockerfile

Slide 14

Slide 14 text

Docker Image 85777c03b72554cd08e721b6148dc27d2a50a7a6 FROM ruby:2.3.3 7c0a25c06ea30bae50e39a37a5997e31a1a96e20 ADD . /myapp 8af56de68279cb6f5ed022f31af18b9fcdcc2e92 RUN bundle install 4b17286a2bb954e9d04c0880a911b8be10133ba3 RUN apt-get update … fa9f22e62229ac79ecee117c88192ee717a9e178 RUN mkdir /myapp

Slide 15

Slide 15 text

Registry Stockage : fichiers, S3, GCS, … Registry API HTTP Implémentation en Go fournie par Docker Aussi par de nombreux services : Quay, AWS, Google Cloud, Gitlab, …

Slide 16

Slide 16 text

Filesystem Thin layer (RW) Read only FS: AUFS/ZFS/BTRFS/devicemapper/…

Slide 17

Slide 17 text

Le réseau $ docker network ls NETWORK ID NAME DRIVER SCOPE c62a2b9ada4a host host local 46645ba306f4 none null local 8d5bf75ef245 bridge bridge local

Slide 18

Slide 18 text

None $ docker run --net none busybox ip addr 1: lo: mtu 65536 qdisc noqueue qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host

Slide 19

Slide 19 text

Host $ docker run --net host busybox ip addr 1: lo: mtu 65536 qdisc noqueue qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 brd 127.255.255.255 scope host lo 2: eth0: mtu 1500 qdisc qlen 1000 link/ether 90:e6:ba:4e:a3:09 brd ff:ff:ff:ff:ff:ff inet 192.168.0.10/24 brd 192.168.0.255 scope global br0 inet6 fe80::3509:a6c7:278:2780/64 scope link 3: docker0: mtu 1500 qdisc noqueue link/ether 02:42:47:61:4a:e3 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0

Slide 20

Slide 20 text

Bridge $ docker run --net bridge busybox ip addr 1: lo: mtu 65536 qdisc noqueue qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host 26: eth0@if27: mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.3/16 scope global eth0 inet6 fe80::42:acff:fe11:2/64 scope link tentative $ docker run -—net bridge busybox ping 172.17.0.3 PING 172.17.0.3 (172.17.0.3): 56 data bytes 64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.147 ms 64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.068 ms

Slide 21

Slide 21 text

Port forwarding $ echo test | nc 192.168.0.10 4000 $ docker run -p 4000:3000 -ti busybox nc -l -p 3000 test

Slide 22

Slide 22 text

Volumes $ mkdir testmount
 $ touch testmount/toto.txt $ docker run -v /home/test/testmount:/app busybox ls -l /app -rw-r--r-- 1 1000 1000 0 Oct 11 20:44 toto.txt Exemple : monter un dossier du host Pour les données persistantes

Slide 23

Slide 23 text

Volumes Beaucoup de plugins : • NFS • Persistent volumes (AWS, Google Cloud, Azure, …) • DBRB • …

Slide 24

Slide 24 text

Containerd / runc • Interfaces claires pour lancer des containers • Projets indépendantes de Docker (Open Container Initiative)

Slide 25

Slide 25 text

Au final … • Utilisation de fonctionnalités existantes du Kernel • Mais avec des interfaces définies et des outils pour simplifier • Une vraie volonté de standardisation et de découpage

Slide 26

Slide 26 text

Nouvelles problématiques

Slide 27

Slide 27 text

Création et maintenance • Nouvelle version de l’application • Changement d’une image dont on dépend • Failles de sécurité

Slide 28

Slide 28 text

Création et maintenance • Automatisation de la création des containers • Gestion des dépendances • Rebuild périodique • Déploiement automatique • Sécurité • Clair (analyse statique) • Docker Bench for Security (config, host)

Slide 29

Slide 29 text

Déploiement / Orchestration Chef / Puppet / Ansible / … Docker Swarm Mesos Kubernetes AWS ECS

Slide 30

Slide 30 text

Discovery • Zookeeper • Consul • DNS • Orchestrateur • Loadbalancers (Træfik, Envoy, Linkerd, …)

Slide 31

Slide 31 text

Monitoring / Logs • cAdvisor • Prometheus • Datadog / Sysdig • Fluentd

Slide 32

Slide 32 text

Les acteurs

Slide 33

Slide 33 text

Société Produit entreprise Avec version communautaire Inventeur du format Initiateur du mouvement

Slide 34

Slide 34 text

Issu de Docker Regroupe toutes leurs briques Open Source sous un même nom

Slide 35

Slide 35 text

Fait partie de la Linux Foundation S’occupe de la gouvernance, communication, fournit des fonds et des ressources Héberge Kubernetes, Prometheus, Fluentd, containerd, rkt, …

Slide 36

Slide 36 text

Container Linux Hébergement Kubernetes (Tectonic) Quay : Registry ETCD

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Cas d’utilisation

Slide 39

Slide 39 text

Environnement de développement

Slide 40

Slide 40 text

Tests / CI

Slide 41

Slide 41 text

Et en production !

Slide 42

Slide 42 text

Questions ?