Les containers : décryptage

Les containers : décryptage

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

415efaa445ed983307231341eaa4be55?s=128

Renaud Chaput

October 19, 2017
Tweet

Transcript

  1. Les containers, décryptage

  2. Renaud Chaput @renchap

  3. Les containers c’est …

  4. Docker

  5. Un truc de développeurs

  6. None
  7. En production en 2 minutes

  8. Une révolution

  9. La mort de notre métier

  10. Ou pas ?

  11. La technique

  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
  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
  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
  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, …
  16. Filesystem Thin layer (RW) Read only FS: AUFS/ZFS/BTRFS/devicemapper/…

  17. Le réseau $ docker network ls NETWORK ID NAME DRIVER

    SCOPE c62a2b9ada4a host host local 46645ba306f4 none null local 8d5bf75ef245 bridge bridge local
  18. None $ docker run --net none busybox ip addr 1:

    lo: <LOOPBACK,UP,LOWER_UP> 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
  19. Host $ docker run --net host busybox ip addr 1:

    lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <NO-CARRIER,BROADCAST,MULTICAST,UP> 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
  20. Bridge $ docker run --net bridge busybox ip addr 1:

    lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> 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
  21. Port forwarding $ echo test | nc 192.168.0.10 4000 $

    docker run -p 4000:3000 -ti busybox nc -l -p 3000 test
  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
  23. Volumes Beaucoup de plugins : • NFS • Persistent volumes

    (AWS, Google Cloud, Azure, …) • DBRB • …
  24. Containerd / runc • Interfaces claires pour lancer des containers

    • Projets indépendantes de Docker (Open Container Initiative)
  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
  26. Nouvelles problématiques

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

    d’une image dont on dépend • Failles de sécurité
  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)
  29. Déploiement / Orchestration Chef / Puppet / Ansible / …

    Docker Swarm Mesos Kubernetes AWS ECS
  30. Discovery • Zookeeper • Consul • DNS • Orchestrateur •

    Loadbalancers (Træfik, Envoy, Linkerd, …)
  31. Monitoring / Logs • cAdvisor • Prometheus • Datadog /

    Sysdig • Fluentd
  32. Les acteurs

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

    du mouvement
  34. Issu de Docker Regroupe toutes leurs briques Open Source sous

    un même nom
  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, …
  36. Container Linux Hébergement Kubernetes (Tectonic) Quay : Registry ETCD

  37. None
  38. Cas d’utilisation

  39. Environnement de développement

  40. Tests / CI

  41. Et en production !

  42. Questions ?