Share
Embed
Transcript
22 slides
-
Continuous Deployment mit Docker und Jenkins Martina Kraus 21.11.2016 @wing121
github.com/codekittey -
Agenda • Was ist Docker? ◦ Einführung ◦ Architektur (Technische
Details) ◦ Basic Usage • Jenkins • Continuous Deployment • Shipyard 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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
Shipyard • Tool zum Managen von ◦ Containern ◦ Images
◦ Registries ◦ Events ◦ Accounts LIVE DEMO 19 -
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