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. Agenda • Was ist Docker? ◦ Einführung ◦ Architektur (Technische

    Details) ◦ Basic Usage • Jenkins • Continuous Deployment • Shipyard 2
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 18

  14. Shipyard • Tool zum Managen von ◦ Containern ◦ Images

    ◦ Registries ◦ Events ◦ Accounts LIVE DEMO 19
  15. 20