Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 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
  2. 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
  3. Docker Image 85777c03b72554cd08e721b6148dc27d2a50a7a6 FROM ruby:2.3.3 7c0a25c06ea30bae50e39a37a5997e31a1a96e20 ADD . /myapp 8af56de68279cb6f5ed022f31af18b9fcdcc2e92

    RUN bundle install 4b17286a2bb954e9d04c0880a911b8be10133ba3 RUN apt-get update … fa9f22e62229ac79ecee117c88192ee717a9e178 RUN mkdir /myapp
  4. 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, …
  5. Le réseau $ docker network ls NETWORK ID NAME DRIVER

    SCOPE c62a2b9ada4a host host local 46645ba306f4 none null local 8d5bf75ef245 bridge bridge local
  6. 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
  7. 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
  8. 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
  9. Port forwarding $ echo test | nc 192.168.0.10 4000 $

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

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

    • Projets indépendantes de Docker (Open Container Initiative)
  13. 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
  14. Création et maintenance • Nouvelle version de l’application • Changement

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

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

    Loadbalancers (Træfik, Envoy, Linkerd, …)
  18. 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, …