2.2. Grundlagen¶
2.2.1. Docker¶
Was ist Docker?¶
Docker ist eine Open-Source-Plattform, die die Entwicklung, den Versand und die Ausführung von Anwendungen in Containern ermöglicht. Container sind leichtgewichtige, selbstgenügsame Pakete, die alles enthalten, was benötigt wird, um eine Software auszuführen. Dies umfasst Bibliotheken, System-Tools, Code und Laufzeitumgebungen. Docker ermöglicht es Entwicklern, sicherzustellen, dass ihre Anwendungen in jeder Umgebung so laufen, wie sie es erwarten.
Warum Docker benutzen?¶
Konsistenz und Isolation: Docker sorgt für Konsistenz und isoliert Anwendungen in ihrer eigenen Umgebung.
Portabilität: Container können leicht zwischen verschiedenen Umgebungen bewegt werden.
Mikroservices: Docker unterstützt die Mikroservice-Architektur durch die Bereitstellung kleiner, unabhängiger Dienste.
Entwicklungseffizienz: Docker verbessert die Produktivität, indem es schnelles Experimentieren mit neuen Technologien ermöglicht.
Ressourceneffizienz: Container nutzen die Ressourcen des Host-Systems effizient und verbrauchen weniger Ressourcen als traditionelle VMs.
2.2.2. Docker Compose¶
Docker-Compose ist ein Tool, das es Entwicklern ermöglicht, mehrere Container zu definieren und zu verwalten, die zusammenarbeiten, um eine Anwendung zu erstellen. Es ermöglicht die Definition von Diensten, die in einem Docker-Container ausgeführt werden sollen, und die Konfiguration von Netzwerken und Volumes, die von diesen Diensten gemeinsam genutzt werden.
Warum Docker-Compose benutzen?¶
Einfache Konfiguration: Docker-Compose ermöglicht die einfache Konfiguration von Diensten und die Definition von Netzwerken und Volumes.
Mehrere Container: Docker-Compose ermöglicht die Definition und Verwaltung mehrerer Container, die zusammenarbeiten, um eine Anwendung zu erstellen.
Skalierbarkeit: Docker-Compose ermöglicht die einfache Skalierung von Diensten und die Definition von Netzwerken und Volumes, die von diesen Diensten gemeinsam genutzt werden.
Entwicklungseffizienz: Docker-Compose verbessert die Produktivität, indem es Entwicklern ermöglicht, schnell und einfach Container zu definieren und zu verwalten.
Infrastructure as Code: IAC - Reproduzierbarkeit: Docker-Compose ermöglicht die Definition von Diensten und Konfigurationen in Code, was die Wartung und Skalierung von Anwendungen erleichtert, weil die Systeme reproduzierbar sind.
2.2.3. Nginx¶
Nginx ist eine sehr bekannte Web-Server Implementierung, welche es erlaubt eingehende Web Anfragen auf verschiedene Weisen zu verarbeiten.
Wir nutzen nginx
für folgende Aufgaben:
Reagieren auf Anfragen an Port
80
Reagieren auf Anfragen an Port
443
Ermöglichen der SSL Verschlüsselung
Reverse Proxy Weiterleitung von Anfragen an Gitea
2.2.4. Traefik¶
Alternativ zu nginx
kann auch Traefik genutzt werden, welcher in Go geschrieben ist und speziell für Container Umgebungen entwickelt wurde.
Wir nutzen Traefik
für folgende Aufgaben:
Reagieren auf Anfragen an Port
80
Reagieren auf Anfragen an Port
443
Ermöglichen der SSL Verschlüsselung
Reverse Proxy Weiterleitung von Anfragen an Gitea
Beziehen von SSL Zertifikaten von Let’s Encrypt
Dashboard zum Monitoring
2.2.5. Reverse Proxy¶
Reverse Proxies dienen dazu um einkommende Requests intern in der Server Struktur aufzuteilen. Auf der nachfolgenden Abb. 2.2.5.1 Grafik ist die Funktionsweise geschildert.

Wir nutzen diese Technologie um Gitea im Browser verfügbar zu machen, welche standarmäßig Anfragen an den Port 80 (HTTP) oder Port 443 (HTTPS) senden wohingegen Gitea auf dem Port 3000 läuft.
Dafür nutzen wir den bekannten Web-Server nginx
, welcher uns gleichzeitig auch ermöglicht die vorherigen SSL Zertifikate zu nutzen um eine HTTPS Verbindung zu ermöglichen.
HubSpot, Reverse Proxy: What It Is and How It Elevates Your Website Performance (besucht am 27.03.2024): https://blog.hubspot.com/website/reverse-proxy
2.2.6. Let’s Encrypt & CertBot¶
SSL Zertifikate erlauben es Domains über HTTPS erreichbar zu machen durch das TLS Protokoll.
Dies bedeutet dass der Datenaustausch zwischen dem Client und dem Server verschlüsselt werden, für diese Verschlüsselung werden SSL Zertifikate benötigt.
Normalerweise ist das Beantragen eines SSL Zertifikates aufwendig und mit Kosten verbunden.
Doch für kleine Projekte eignet sich Let’s Encrypt sehr gut.
Let’s Encrypt ist eine Certificate Authority (CA), welche es uns erlaubt kostenlos und automatisiert SSL Zertifikate anzufragen.
Hierfür nutzen wir das von Let’s Encrypt erstellte Programm certbot
.
2.2.7. Client Firewall¶
Was ist eine Client-Firewall?¶
Eine Client-Firewall ist eine Art von Firewall, die auf einzelnen Computern oder Geräten installiert ist und dazu dient, den Datenverkehr zwischen dem Gerät und anderen Netzwerkressourcen zu kontrollieren und zu filtern.
Unterschied zu anderen Firewall-Typen:¶
Im Vergleich zu anderen Arten von Firewalls, wie beispielsweise Hardwarefirewalls oder Softwarefirewalls auf Netzwerkebene, konzentriert sich eine Client-Firewall wie UFW auf den Schutz des lokalen Systems vor unerwünschtem Netzwerkverkehr. Sie bietet eine granulare Kontrolle über ein- und ausgehenden Datenverkehr und kann individuell für jedes System konfiguriert werden.