Skip to content

Container & Execution Environment (Axel Burghof)

MaxSimon95 edited this page Feb 17, 2019 · 11 revisions

Docker / Container

Der Hauptunterschied von Containern zu virtuellen Maschinen ist, dass nur ein Prozessbaum beschrieben wird und kein komplettes Betriebssystem. Dadurch kann ein schnelles Start/Stop Verhalten erreicht werden. Es können also viele kleine containerisierte Anwendungen auf einer Maschine und einem Betriebssystem betrieben werden.

Elemente von Docker:

  • dockerfile: Datei, die die Umgebung definiert
  • image: Datei, bei deren Ausführung ein Docker Container entsteht. Auch in Produktionsumgebungen einsetzbar, wenn sorgsam spezifiziert.
  • name spaces: Ermöglicht die Einschränkung von sichtbaren Objekten bzw. dem Zugriff auf Systemressourcen für Prozesse.
  • union file system: Virtuelles Dateisystem, mit dem mehrere Images übereinander gelegt werden können.
  • control groups: dienen dazu Speicher/Rechenleistung/Netzressourcen zu begrenzen

Ein Vorteil ist, dass Images für verschiedene Anwendungen (bspw. mongoDB, postgres, mysql) bereits existieren und über DockerHub einfach gepullt und verwendet werden können. Es ist in unserem Projekt sinnvoll eine Containerlösung zu verwenden.

DevOps

DevOps verbindet die Entwicklung und IT-Operations. Dabei wird ein iterativ-inkrementelles Modell verfolgt, das aus Plan, Build, CI, Deploy, Operate und Continious Feedback besteht. CI beschreibt eine häufige Integrierung der Arbeit der Entwickler, die durch einen automatisierten Build verifiziert wird. Für die Automatisierung wird eine CI/CD Pipeline verwendet, die definiert wie die CI/CD abläuft. Es können Pipelines und Docker verwendet werden, um beispielsweise Versionskonflikten zu entgehen (Es muss nur das Image auf dem Server gebaut werden). Daher sollen die Docker Images in der Entwicklung, beim Testen und in der Ausführung dieselben sein.

Orchestration & Service Discorvery

Um mehrere Services an einem Stück zu betreiben ist eine automatisierte Skalierung notwendig. Dafür bieten sich Technologien zur Orchestrierung, wie Docker Swarm oder Kubernetes an. Kubernetes hat hier im Vergleich zu Docker den Vorteil, dass es unabhängig von Technologien und Anbietern nutzbar ist. Außerdem hinkt die Entwicklung von Docker Swarm der von Kubernetes hinterher und bewegt sich in die Richtung von Kubernetes.

Es ist allerdings unwahrscheinlich, dass Container Orchestrierung im Rahmen des Projektes relevant wird.

Empfehlungen für die Containerisierung

  • Exakt ein Microservice in je einem Container, der die Ablaufumgebung beschreibt. So kann ein Dienst unabhängig von anderen skalierbar gemacht werden.
  • Davon abzuweichen und Subdomänen in einem Container zusammenzufassen, macht nur dann Sinn, wenn diese wirklich gleich skalieren.
  • Datenbanken in Container auslagern.
  • Falls nötig: Ergänzung durch VM beispielsweise für altbackene nicht für Cloud gebaute Software, wie eine umfangreiche Oracle-Datenbank, die schlecht in einem Container unterzubringen ist.
Clone this wiki locally