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

Cloud Development mit Docker

Cloud Development mit Docker

Container gewinnen in der Software-Entwicklung immer mehr an Bedeutung. Meist werden sie mit Docker in einem Atemzug genannt, weil Docker die Verwendung extrem vereinfacht und sozusagen „salonfähig“ gemacht hat.

Was kommt aber nach dem Beispiel mit einem einfachen Container? Wie können mehrere Container orchestriert werden? Der Vortrag zeigt euch, wie es nach den ersten Tutorials weitergeht und welches Tooling Docker mitbringt. Am Ende werden wir mit Docker Swarm einen ganzen Satz von Containern orchestrieren.

Jannis Schaefer

September 28, 2017
Tweet

More Decks by Jannis Schaefer

Other Decks in Programming

Transcript

  1. ?!Container?! A container image is a lightweight, stand-alone, executable package

    of a piece of software that includes everything needed to run it - docker.com/what-container
  2. ?Container? • Container sind keine Erfindung von Docker • Einfacher

    Einstieg durch Docker Tools haben Container bekannt gemacht
  3. !Container! • Container teilen sich Kernel mit dem Hostsystem •

    Layered Filesystem • Sandboxing durch Namespaces und cgroups • Für alle bekannten Linux Distributionen und Windows Server 2016 • Nur „ein Problem“ pro Container
  4. Wie erstelle ich einen Container? FROM ubuntu:xenial RUN apt-get update

    "&& apt-get install -y \ openjdk-8-jdk \ "&& rm -rf /var/lib/apt/lists"/* ADD target/candybox-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT java $OPTIONS -jar app.jar
  5. Layered Images Kernel Ubuntu Image Install JRE Copy JARs ubuntu:xenial

    application:latest docker build -t application .
  6. Layered Images Kernel Ubuntu Image Install JRE Copy JARs Copy

    JARs application:latest application:beta docker build -t application:beta . ubuntu:xenial
  7. Wie führe ich einen Container aus? docker run - Einen

    Container auf einer Node docker-compose - Mehrere Container auf einer Node docker service create - Einen Service auf mehreren Nodes docker stack deploy - Mehrere Services auf mehreren Nodes Aber auch: Kubernetes, ECS, rkt, …
  8. Warum mehr als 1 Node? • Skalierung • High Availability

    • Simple Networking https://commons.wikimedia.org/wiki/File:CMA_CGM_Christophe_Colomb_01.jpg
  9. Warum Docker Swarm? Einfacher Einstieg curl -fsSL get.docker.com | sh

    docker swarm init docker swarm join —token … • Zertifikate zwischen Maschinen werden automatisiert generiert & rotiert • Manager scheduled Container auf allen Nodes, verwaltet Netzwerke, Service Discovery • Schon mit einer Node sinnvoll
  10. • Service besteht aus Tasks (Containern) • Mehrere Services !=>

    Stack version: '3' services: candybox: image: candybox:5 command: server environment: - LOGGING=DEBUG mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: secret Services
  11. • Bestimmt Anzahl der Replicas • Legt Ressourcen fest •

    Updatestrategie Deployment services: candybox: deploy: mode: replicated placement: - node.role "== manager replicas: 5 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure labels: biz.cosee.env: "stage" resources: limits: cpus: '1' memory: 50M reservations: cpus: '0.5' memory: 25M
  12. • Mounted Hostverzeichnis in den Container • Persistiert Speicher zwischen

    Containern • Was passiert bei mehreren Nodes? Volumes services: candybox: volumes: - cache:/var/cache - pictures:/pictures volumes: cache: pictures: driver: rexray/ebs driver_opts: size: 50 volumetype: gp2
  13. Bridge Networks • Verbinden Container auf einer Node untereinander und

    mit Außenwelt Overlay Networks • Sicheres multi-host Netzwerk Networks services: candybox: ports: - "80:8080" networks: - proxy networks: proxy: external: true
  14. Service Discovery • Swarm DNS löst Servicenamen zu Containern auf

    • http://candybox:80 - Loadbalancer (Virtual IP) über alle Tasks (Container) • http://task1.candybox:80 - Direkter Zugriff auf einzelnen Task
  15. • Netzwerk auf allen Swarm Nodes • Freigegebene Ports sind

    über alle Nodes erreichbar • Round Robin Loadbalancing über Container Ingress IPVS IPVS IPVS *:80 *:80 *:80 LoadBalancer Ingress network “candybox-net” overlay network task1.candybox task2.candybox Node1 Node2 Node3
  16. • Keine Configs mehr in Container Images • Werden als

    Datei in den Container gegeben • Immutable! Secrets / Configs services: candybox: configs: - database - source: envconf target: /conf/env.xml networks: - proxy configs: database: file: ./prod-db.yml envconf: external: true
  17. • Definition über docker-compose oder Dockerfile • Unhealthy Container werden

    terminiert • Kein Traffic über LB zu unhealthy Containern Healthchecks services: candybox: healthcheck: test: ["CMD", "curl", "-f", "http:"//localhost"] interval: 15s timeout: 5s retries: 3
  18. Docker in der Cloud? • Docker for AWS / Azure

    • Terraform • Manuell wie eben erklärt Leider kein einfacher Weg für Cluster & Container Autoscaling
  19. Du bist Student und hast Lust, mal bei uns reinzuschauen?

    #AgileStudentsDay Dann komm vorbei zum #AgileStudentsDay und lerne uns und unsere Arbeit kennen! 9. November ab 14 Uhr bei cosee
  20. Nächster Talk … Full Skill Developer - Was Entwickler außer

    Coden noch können sollten … <Konstantin Diener/> 26.10.2017 > blog.cosee.biz > talks.cosee.biz