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

Continuous Deployment mit Docker und Jenkins (DE)

Continuous Deployment mit Docker und Jenkins (DE)

Martina Kraus

November 21, 2016
Tweet

More Decks by Martina Kraus

Other Decks in Programming

Transcript

  1. Continuous Deployment mit
    Docker und Jenkins
    Martina Kraus
    21.11.2016
    @wing121
    github.com/codekittey

    View Slide

  2. Agenda
    ● Was ist Docker?
    ○ Einführung
    ○ Architektur (Technische Details)
    ○ Basic Usage
    ● Jenkins
    ● Continuous Deployment
    ● Shipyard
    2

    View Slide

  3. Warum Docker?
    Seit Beginn (März 2013): (https://github.com/docker/docker)
    ● > 37, 000 stars
    ● > 1000 Kontributoren
    ● > 2000 dockerisierte Applikationen und Images:
    ○ Redis, Node.js, Hadoop, MySQL, PostgreSQL
    ● Integration in Jenkins, Travis, Chef, Puppet, Vagrant und OpenStack
    ● Docker-Meetups auf der ganzen Welt:
    ○ Docker-Mentor Week (letzte Woche)
    ○ Docker Online Meetups
    3

    View Slide

  4. Warum Docker?
    Image: http://www.docker.com 4

    View Slide

  5. Image: http://www.docker.com
    Warum Docker?
    5

    View Slide

  6. Für Entwickler:
    Build once … run anywhere:
    ● Sichere, performante, skalierbare und portable Applikation.
    ● Keine Gedanken um fehlende Dependencies, Packages oder Libraries.
    ● Applikation läuft in ihrem eigenen isolierten Container:
    ○ Testen verschiedener Versionsstände einfach möglich.
    ● Nur der Entwickler selbst kann entscheiden mit welchen Abhängigkeiten
    seine Software läuft:
    ○ MySQL Version, Node.JS Version usw.
    6

    View Slide

  7. Für Admins:
    Configure once … run anything:
    ● Reduzierung von Inkonsistenzen verschiedener Laufzeitumgebungen:
    ○ Development,
    ○ Staging,
    ○ Production.
    ● Günstige “Virtualisierung” ohne den Overhead einer VM.
    ● Einfach Skalierung:
    ○ Ausrollen neuer Versionen durch einfach stoppen/ starten eines Containers
    7

    View Slide

  8. Docker Architektur
    Image: http://www.docker.com 8

    View Slide

  9. Docker Architektur (LXC)
    ● Lightweight Containers mithilfe von LXC (Linux Containers)
    ○ Verfahren zur Virtualisierung.
    ○ Ermöglicht mehrere voneinander isoliert laufende Linux-Systeme auf einem Host.
    ○ Lange Zeit deswegen nur auf Linux nativ möglich.
    ○ Durch cgroup und namespaces gruppierung/ kategorisierung der Prozesse.
    ● Seit v0.9 werden libcontainer als Laufzeitumgebung verwendet
    ○ Bringt sämtliche Features (cgroups, Linux namespaces) out-of-the-box mit.
    ○ Unabhängig von der LXC implementierung.
    9

    View Slide

  10. Technische Details
    ● Isolierter Prozess-Speicher,
    ● Eigenes Netzwerk,
    ● Container === isolierter Prozess,
    ● Container teilen sich den Kernel,
    ● Docker ist in Go geschrieben
    ● Mittlerweile auch nativ auf Mac OS und Windows möglich
    10

    View Slide

  11. Grundlagen: Docker-Images
    ● Bildet Grundlage jedes Containers.
    ● Mehrere Container des selben Images können parallel betrieben werden.
    ● Basic Images werden über Docker-Hub zur Verfügung gestellt.
    ○ Nginx,
    ○ Node.JS,
    ○ MySQL,
    ● Container isoliert von Host und anderen Containern:
    ○ Kommunikation nach Außen nur nach Freigabe möglich:
    ■ Ports,
    ■ Volumes (persistente Daten die auch beim Löschen eines Containers erhalten bleiben),
    ■ Netzwerke,
    11

    View Slide

  12. Docker-compose
    Tool zum Definieren und Starten von multi-container Anwendungen,
    mehreren “Services”
    ● Aktuell: v1.9.0
    ● Bietet Tools zum Verwalten der Container:
    ○ Start
    ○ Stop
    ○ Rebuild
    12

    View Slide

  13. Jenkins
    ● Webbasiertes Software-System für Continuous Integration
    ● Konfiguration Build Steps:
    ○ automatisierte Tests / statische Code-Analyse angestoßen,
    ○ Eigene Shell-Skripte ausführen,
    ○ Post-Build Step: Email-Notification/ Report-Data,
    ○ Weitere Builds automatisch anstoßen.
    13

    View Slide

  14. Das Ziel: Continuous Deployment
    ● Entwickler pushed Code in VCS (Git/ Mercurial).
    ● Jenkins Build wird angestoßen: (Tests/ Code Analyse).
    Unicorn Magic
    BAM alles Deployed 14

    View Slide

  15. Glücklicher Kunde / Admin / Entwickler
    15

    View Slide

  16. Unicorn Magic
    Nach den Build Steps:
    ● Wird ein neues Docker-Image der Software erstellt,
    ● Das Image in eine private Docker-Registry gepushed,
    ● ssh auf den Test-Server:
    ○ Stoppen und löschen des aktuellen Containers
    ○ Pullen des neuen Images von der privaten Docker-Registry
    ○ Starten des Containers anhand des neuen Images
    16

    View Slide

  17. Herausforderungen
    ● IPs und Ports eines Containers müssen an Ports des Hosts “gebunden”
    werden.
    ● Innerhalb des docker-compose-Files werden diese Ports definiert.
    ● Diese können allerdings bereits auf dem Host belegt sein.
    Abhilfe: nginx-proxy -Tool (Reverse Proxy) von Jason Wilder:
    https://github.com/jwilder/nginx-proxy
    ● Triggert bei jedem starten und stoppen eines Containers eine neue
    Konfiguration des Nginx an.
    17

    View Slide

  18. 18

    View Slide

  19. Shipyard
    ● Tool zum Managen von
    ○ Containern
    ○ Images
    ○ Registries
    ○ Events
    ○ Accounts
    LIVE DEMO
    19

    View Slide

  20. 20

    View Slide

  21. 21
    Martina Kraus
    @wing121

    View Slide

  22. Further Readings
    ● http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/
    ● http://www.onwerk.de/2016/11/05/with-docker-in-5-minutes-from-developer-to-test-server/
    ● https://docs.docker.com/registry/deploying/
    ● https://shipyard-project.com/
    ● https://docs.docker.com/swarm/overview/
    ● https://github.com/wsargent/docker-cheat-sheet
    22

    View Slide