Virtualisierung von Web-Applikationen mit Docker Seminarvortrag von Alex Besteher Am Beispiel von „shared-data“
Inhaltsverzeichnis Motivation Grundlagen Umsetzung Fazit
1. Motivation
Motivation halo Noc-Portal
Motivation Bisher: geteilte ressourcen bei fehlern werden andere Applikationen beeinflusst
Motivation Mit Docker: Ressourcen an Container gebunden
Motivation Bisher:
Motivation Mit Docker:
Motivation Bisher:
Motivation Mit Docker: Noc-Portal
2. Grundlagen
Grundlagen Ruby on Rails Gems Ruby: Programmiersprache, Interpreter Rails: Webframework Implementiert Model-View-Controller Pattern Gems Ruby-Erweiterungen Installiert per bundler Gemfile: listet Quellen und zu installierende Gems
Grundlagen „Shared Database“ Background-Job Applikation zur Speicherung von Preislisten/Rahmenverträgen Listet für mehrere Hersteller Geräte, Preise, Beschreibungen, … Kernstück: Einlesefunktion für Excel-Dokumente Einlesen ist in den Hintergrund ausgelagert Background-Job Ruby-Gem zum Ausführen von Prozessen im Hintergrund Liest Prozessinformationen aus Datenbank Worker-Thread liest Datenbank aus Applikation die für die containerisierung verwendet wurde Speichert gerätedaten Preise/beschreibungen/modellnummern/kategorisierung/rabattsätze Konfigurationsmöglichkeiten wie Filter, Herstellerinformationen, Kategorien Wichtigste Funktion: Excel-Dokumente einlesen Problem: groß! 1,6mio Zeilen Web-App -> User müsste waren In Background-Job ausgelagert Gem zum ausführen im hintergrund Liest Prozessinformationen aus Datenbank
Grundlagen Git Capistrano Versionsverwaltungssystem Code auf mehreren Plattformen bearbeiten Capistrano Ruby-Gem zum Deployment ssh-Zugriff auf Noc-Portal Erlaubt Erstellen eigener Befehle Verteiltes Versionsverwaltungssystem Erlaubt arbeiten unabhängig von einander Speichert nur Änderungen gegenüber der alten Version „merge“ statt überschreiben Capistrano ist ein Gem ssh(secure shell)-Verbindung zum Server Führt in configfile definierte befehle aus
Grundlagen Apache, Nginx und Passenger Apache, Nginx sind Web-Server Lauschen auf http-Requests Antworten mit statischen Dateien HTML, Bilder, … Problem: Ruby-Code in html-Dateien Passenger erzeugt statische Dateien für Webserver Apache hat mehr Features als Nginx Nginx ist aber schneller apache/nginx = webserver Antworten mit statischen dateien Serverseitige anpassung je nach situation/nutzer Passenger als aufsatz auf apache/nginx um ruby-code zu interpretieren Liefert dann statische html-dokumente Nginx hat weniger features ist aber schneller Fürs erste Nginx im Container Eventuell statt dessen Apache sollten Features wichtig werden
Grundlagen Docker Docker-Compose „lightweight virtualization“ Image wird aus Dockerfile erstellt Docker startet Image als Container „one Thread per Container“ Docker-Compose Erweiterte Containerverwaltung Multi-Container-Applikationen docker-compose.yml Nutzung: Dockerfile Gibt Anweisungen wie der Container zu erstellen ist Extra thread für background-job Features zur Containerverwaltung Besonders für Multi-Container-Applikationen docker-compose.yml, xml-Format Beispiele später
3. Umsetzung
Umsetzung Arbeitsplatz noc-portal $ cap docker:init log halo
Umsetzung Arbeitsplatz noc-portal halo $ cap docker: build_application log halo Applikations-Dockerfile
Umsetzung Applikations-Dockerfile
Umsetzung Arbeitsplatz noc-portal halo $ cap docker: build_background_job log tmp halo Background-Job-Dockerfile
Umsetzung Arbeitsplatz noc-portal halo $ cap docker: run_container log tmp halo
Umsetzung docker-compose.yml
Fazit Umsetzung durch Container ausführbar Beim ausführen sieht man: [nächste folie]
Fazit Fazit: funktioniert, keine bugs Viele spezielle anforderungen zu behandeln Skalierung, verwaltung, wartung
Ende Danke Fragen?