Virtuelle Maschinen vs. Container Images

Im heutigen Beitrag wollen wir die Unterschiede zwischen einer Virtuellen Maschine und einem Container erklären und Beispiele zeigen wie man selber Container-Images bauen kann und einen Container zum laufen bekommt.

Unterschied zwischen Virtuellen Maschine und einem Container

Unterschiede Virtuelle Maschine vs. Container

Die Virtuelle Maschinen basieren auf einem Hypervisor der auf einem Host läuft (beispielsweise ein Server oder der Laptop daheim). In einer Virtuellen Maschine kann ein komplett anderes Betriebssystem abgebildet werden als das des Hostsystems. So kann man beispielsweise auf einem Linux System eine Windows Maschine virtualisieren. In dieser Virtuellen Maschine können Applikationen ausgeführt werden die auf dem Hostbetriebssystem nicht laufen würden.

Das Problem dieses Prinzips sind jedoch Ressourcen. Gehen wir von einem einfachen Webserver aus der in dieser virtuellen Maschine gehostet werden soll. Um diesen Webserver zu betreiben werden Ressourcen benötigt um ein vom Hostbetriebssystem abgekoppeltes System zu betreiben.

Container basieren jedoch auf einem etwas anderen Prinzip. Anstatt eines Hypervisors benötigt man einen Containerdienst (in diesem Beispiel der Docker Daemon). Dieser Dienst kümmert sich um das Management der verschiedenen Container.

Container sparen einiges an Ressourcen ein, da kein komplett neues Betriebssystem (inkl. Binaries und Bibliotheken) erstellt wird, sondern nur eine Umgebung geschaffen wird um einen Webserver zu betreiben.

Container vereinfachen zudem das entwickeln von Software. Wenn ich jemandem meine Software zu Test geben möchte, verpacke ich dies einfach in einen Docker Container der jegliche Bibliotheken und andere Binaries enthält die zum Starten meiner Software benötigt werden.

Gibt es einen Sicherheitsvorfall?
Vertraue bei Angriffen unseren zertifizierten IT Forensikern.
Zum Kontakt

Wie kann ich Container nutzen?

In unserem Beispiel wollen wir einen einfachen Webserver aufsetzen und hierbei verschiedene Möglichkeiten der Nutzung von Containern zeigen. Hierfür nutzen wir Docker.

Container Images

Als Vorlage für einen Container werden Images benötigt. Diese Images sind entweder durch Hersteller oder die Community bereitgestellt und beinhalten quasi eine Blaupause der Services die im Container laufen sollen. Wie man Images selber bauen kann schauen wir uns auch gleich noch an.

Docker Hub

Im Docker Hub sind vorgefertigte Docker Images zu finden. Egal ob Linux Distribution oder funktionierender Mailserver.

Container starten

Um unseren Apache HTTP Server als Container zu starten führen wir einfach folgenden Befehl aus.

				
					docker run -d --name web -p 80:80 httpd
				
			
  • -d startet den Container im detached Mode
  • –name legt den Namen des Containers fest
  • -p 80:80 verknüpft Port 80 des Hostssystems mit Port 80 im Container

Lassen wir uns nun alle Container anzeigen sehen wir den Container Web. Öffnen wir nun einen Browser und besuchen http://127.0.0.1 sehen wir die Default Page des Webservers. Perfekt!

Mit dem Container interagieren

Um Befehle im Container ausführen zu können kann man docker exec nutzen. Dies führt Befehle innerhalb des Containers aus. Möchte man nun innerhalb des Containers arbeiten nutzt man einfach folgenden Befehl.

				
					docker exec -it web /bin/bash
				
			

Wie man am Prompt sieht, sind wir nun im Container und können hier beispielsweise die Webserver Konfiguration anpassen, unsere eigene Website erstellen oder ähnliches.

Container Image selber erstellen

Da das händische Bearbeiten jedes Docker Containers sehr aufwändig ist kann man jegliche Anpassungen die man benötigt schon in einem Image abbilden.

Gehen wir beispielsweise anhand unseres Webservers davon aus, dass die Website schon fertig entwickelt ist könnten wir diese schon ins Image stecken. D.h. wir müssten nur noch ein Container aus dem Image erstellen und haben eine funktionierende Website.

Dockerfile

Das Dockerfile enthält quasi die Bauanleitung für unser Image.

Es enthält die Information auf welchem Image (siehe Dockerhub) unser Image aufbauen soll. In unserem Beispiel auf dem httpd Image.

Desweiteren soll ein apt update und die Installation von weiteren Tools durchgeführt werden.

Als letzten Schritt, soll Docker unsere index.html in den Webseitenpfad im Container kopieren.

Im aktuellen Verzeichnis liegen zwei Dateien. Das eben bearbeitete Dockerfile und die index.html die im Container abgelegt werden soll.

Image erstellen

Mit dem folgenden Befehl sagen wir Docker er soll anhand des Dockerfiles im aktuellen Verzeichnis ein Image mit dem Namen apache2 erstellen.

				
					docker build -t apache2 .
				
			

Jeder im Dockerfile angegebene Befehl wird als sogenanntes Layer dem Image hinzugefügt.

Nach Abschluss finden wir in der Imageübersicht unser selbst erstelltes apache2-Image.

Container aus eigenem Image starten

Um unser Image als Vorlage für einen Container zu nutzen bedienen wir uns demselben Befehl ändern die Image Bezeichnung aber auf apache2. Docker schaut vor dem Suchen von Images im Docker Hub erst im lokalen Imagespeicher nach passenden Images.

Öffnen wir wieder den Browser und besuchen http://127.0.0.1 finden wir eine Website mit Login Page, und nicht mehr die Default Page aus dem eigentlichen httpd Image.

Im nächsten Beitrag ...

… zu Containern, werfen wir einen Blick auf weitere Möglichkeiten die Arbeit mit einem Container einfacher zu gestalten und die technische Funktionsweise hinter Containern.

ANDERE BEITRÄGE
Teams Guest Enumeration
Teams Guest Enumeration

Azure Active Directory Enumeration durch Gäste in Microsoft Teams Was bedeutet das Finding Teams Guest Enumeration? Microsoft Teams bietet standardmäßig

Mehr lesen »

Inhaltsverzeichnis

Willst Du Teil unseres Teams werden?

Wir verwenden Cookies, um Ihnen die bestmögliche Erfahrung zu bieten. Wenn Sie unsere Website weiterhin besuchen, stimmen Sie der Verwendung von Cookies zu, wie in unserer Datenschutzerklärung beschrieben.