$30 off During Our Annual Pro Sale. View Details »

Les containers : décryptage

Les containers : décryptage

Présenté aux Sysadmin Days : https://sysadmindays.fr

Renaud Chaput

October 19, 2017
Tweet

More Decks by Renaud Chaput

Other Decks in Technology

Transcript

  1. Les containers,
    décryptage

    View Slide

  2. Renaud Chaput
    @renchap

    View Slide

  3. Les containers
    c’est …

    View Slide

  4. Docker

    View Slide

  5. Un truc de développeurs

    View Slide

  6. View Slide

  7. En production en 2 minutes

    View Slide

  8. Une révolution

    View Slide

  9. La mort de notre métier

    View Slide

  10. Ou pas ?

    View Slide

  11. La technique

    View Slide

  12. 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

    View Slide

  13. 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

    View Slide

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

    View Slide

  15. 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, …

    View Slide

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

    View Slide

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

    View Slide

  18. 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

    View Slide

  19. 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

    View Slide

  20. 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

    View Slide

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

    View Slide

  22. 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

    View Slide

  23. Volumes
    Beaucoup de plugins :

    • NFS

    • Persistent volumes (AWS, Google Cloud, Azure, …)

    • DBRB

    • …

    View Slide

  24. Containerd / runc
    • Interfaces claires pour lancer des containers

    • Projets indépendantes de Docker (Open Container
    Initiative)

    View Slide

  25. 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

    View Slide

  26. Nouvelles
    problématiques

    View Slide

  27. Création et maintenance
    • Nouvelle version de l’application

    • Changement d’une image dont on dépend

    • Failles de sécurité

    View Slide

  28. 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)

    View Slide

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

    View Slide

  30. Discovery
    • Zookeeper

    • Consul

    • DNS

    • Orchestrateur

    • Loadbalancers (Træfik, Envoy, Linkerd, …)

    View Slide

  31. Monitoring / Logs
    • cAdvisor

    • Prometheus

    • Datadog / Sysdig

    • Fluentd

    View Slide

  32. Les acteurs

    View Slide

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

    View Slide

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

    View Slide

  35. 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, …

    View Slide

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

    View Slide

  37. View Slide

  38. Cas d’utilisation

    View Slide

  39. Environnement de
    développement

    View Slide

  40. Tests / CI

    View Slide

  41. Et en production !

    View Slide

  42. Questions ?

    View Slide