Containerization hat grundlegend verändert, wie Unternehmen Anwendungen erstellen, versenden und ausführen. Docker etablierte den Standard für die Verpackung von Software in leichte, tragbare Container, während OpenShift, die Enterprise Kubernetes-Plattform von Red Hat, die Orchestrierung, Sicherheit und Entwickler-Tools bereitstellt, die erforderlich sind, um diese Container in großem Maßstab auszuführen. Zusammen bilden Docker und OpenShift eine robuste Grundlage für die Orchestrierung von Enterprise Containern, die es Teams ermöglicht, Bereitstellung zu automatisieren, Hybridumgebungen zu verwalten und die Softwarebereitstellung zu beschleunigen. Dieser Artikel bietet eine vollständige Anleitung zur Verwendung von Docker mit OpenShift, die Integration, Bereitstellungsschritte, Vorteile und Best Practices für Produktionsumgebungen abdeckt.

Docker und Containerisierung verstehen

Docker ist mehr als nur ein Tool – es ist eine Plattform für die Entwicklung, den Versand und das Ausführen von Anwendungen in Containern. Container bündeln eine Anwendung mit ihren Abhängigkeiten (Bibliotheken, Konfigurationsdateien, Binärdateien) in einer einzigen standardisierten Einheit. Dies stellt sicher, dass sich die Anwendung in Entwicklungs-, Staging- und Produktionsumgebungen konsistent verhält, wodurch das klassische Problem "es funktioniert an meiner Maschine" beseitigt wird.

Im Kern von Docker steht die Docker Engine, eine Laufzeit, die Container auf einem Host-Betriebssystem verwaltet. Docker verwendet eine Client-Server-Architektur, bei der der Docker-Client mit dem Docker-Daemon kommuniziert, um Container zu erstellen, auszuführen und zu verwalten. Von Dockerfiles definierte Bilder dienen als schreibgeschützte Vorlagen, die auf Effizienz ausgerichtet sind. Beim Start eines Containers wird eine beschreibbare Schicht auf dem Bild hinzugefügt. Diese Schichtung ermöglicht schnelle Bereitstellung, Versionskontrolle und einfache Rollbacks.

Für Unternehmen bietet Docker mehrere kritische Funktionen:

  • Isolation: Jeder Container läuft in seinem eigenen isolierten Benutzerraum und verbessert die Sicherheit und Ressourcenkontrolle.
  • Portabilität: Container laufen auf jedem Betriebssystem, das Docker unterstützt, einschließlich Linux, Windows und macOS, und in jeder Umgebung (vor Ort, Cloud, Hybrid).
  • Effizienz: Container teilen sich den Kernel des Host-Betriebssystems, was im Vergleich zu virtuellen Maschinen zu einem deutlich geringeren Overhead führt.
  • Rapid Iteration: Entwickler können containerisierte Anwendungen schnell erstellen, testen und bereitstellen, was Continuous Integration und Continuous Delivery (CI/CD) Workflows unterstützt.

Docker allein reicht jedoch nicht aus, um Hunderte oder Tausende von Containern über ein Cluster von Maschinen zu verwalten. Hier kommt die Orchestrierung ins Spiel und OpenShift bietet eine auf Kubernetes basierende Enterprise-Grade-Lösung.

OpenShift: Enterprise Kubernetes Plattform

OpenShift ist die Distribution von Kubernetes von Red Hat, die um zusätzliche Funktionen erweitert wird, die die Bedürfnisse von IT-Betriebsbetrieben, Entwicklern und Sicherheitsteams erfüllen. Während Kubernetes die grundlegende Orchestrierungsebene bietet - Planung von Containern, Skalierung von Bereitstellungen, Verwaltung von Netzwerken und Speicher -, wickelt OpenShift es mit entwicklerfreundlichen Tools, einer Webkonsole, integrierten CI / CD-Fähigkeiten und gehärteten Sicherheitsvorgaben ab.

Zu den wichtigsten Komponenten von OpenShift gehören:

  • Source-to-Image (S2I): Ein Tool, das automatisch Container-Images aus Quellcode erstellt, ohne dass eine Dockerfile erforderlich ist, obwohl es auch benutzerdefinierte Dockerfiles vollständig unterstützt.
  • Integrierte Registry: OpenShift beinhaltet eine interne Container-Image-Registrierung zum Speichern und Verwalten von Bildern, wodurch die Abhängigkeit von externen Registern reduziert wird.
  • Routing und Networking: OpenShift verwaltet den Ingress-Traffic mit einem integrierten HAProxy-Router und bietet interne DNS- und Service-Discovery.
  • Sicherheitskontext-Einschränkungen (SCCs): Diese ersetzen Kubernetes Pod Security Policies und bieten granulare Kontrolle darüber, was Container tun können (z.B. als root laufen, auf Hostressourcen zugreifen).
  • Entwicklerkonsole: Eine Web-Benutzeroberfläche, die die Bereitstellung, Überwachung und Verwaltung von Anwendungen vereinfacht.
  • OperatorHub: Ein Operatorkatalog zur Automatisierung des komplexen Application Lifecycle Managements.

OpenShift wurde für Unternehmen entwickelt, die Multi-Tenancy, Compliance und hohe Verfügbarkeit benötigen. Es integriert sich in LDAP, Active Directory und andere Identitätsanbieter. Es bietet auch integrierte Überwachung und Protokollierung über Prometheus-, Grafana- und Elasticsearch/Fluentd/Kibana-Stacks.

Integration von Docker mit OpenShift

Die Verwendung von Docker mit OpenShift ist einfach, da OpenShift auf Kubernetes basiert und Container-Images nativ versteht. Die Integration erfolgt auf mehreren Ebenen: Erstellen von Bildern, Speichern von Bildern und Bereitstellen von Workloads.

Gebäudebilder

Entwickler haben zwei primäre Möglichkeiten, Container-Images für OpenShift zu erstellen:

  • Dockerfile builds: Schreibe eine Dockerfile und verwende dann das OpenShift Build-System oder die Docker CLI, um ein Image zu erstellen. OpenShift kann Docker Builds innerhalb des Clusters mit einer Build-Konfiguration ausführen, die auf eine Dockerfile verweist. Diese Methode gibt die volle Kontrolle über die Bildschichten.
  • Source-to-Image (S2I): S2I ist ein Framework, das den Anwendungsquellcode nimmt und in ein Basisbild einschleust, das die Laufzeit enthält. Beispielsweise kann eine Node.js-App erstellt werden, indem OpenShift auf ein Git-Repository gerichtet wird; OpenShift zieht das entsprechende S2I-Builder-Image, kompiliert den Code und erstellt automatisch ein Container-Image. Es ist keine Dockerdatei erforderlich, obwohl das Endergebnis ein Standard-Docker-Image ist.

Beide Ansätze erzeugen Bilder, die in einer internen oder externen Containerregistrierung gespeichert werden. Die integrierte Registry von OpenShift basiert auf dem Docker Registry v2-Protokoll und ist somit voll kompatibel mit Docker-Clients.

Bilder speichern

Nach dem Erstellen werden Bilder in eine Registrierung geschoben, auf die über den OpenShift-Cluster zugegriffen werden kann. Die interne Registrierung ist die einfachste Option für eng integrierte Bereitstellungen. Alternativ können Teams externe Registrierungen wie Docker Hub, Quay.io, Amazon ECR oder Google Container Registry verwenden. OpenShift kann Bilder von jeder Registrierung abrufen, die das Standard-Container-Image-Protokoll unterstützt. Für sensible Umgebungen kann die interne Registrierung mit persistentem Speicher, TLS und Authentifizierung konfiguriert werden.

Bereitstellung von Workloads

Sobald ein Bild verfügbar ist, geht es bei der Bereitstellung auf OpenShift um die Erstellung einer Kubernetes-Ressource wie Deployment, DeploymentConfig (OpenShift-spezifisch) oder Pod. Die OpenShift-Webkonsole oder CLI () vereinfacht diesen Prozess. Entwickler können den "Deploy Image"-Assistenten verwenden, um ein Bild aus der Registrierung auszuwählen, Umgebungsvariablen und Ressourcengrenzen festzulegen und die Anwendung über eine Route freizulegen.

Schritt-für-Schritt: Bereitstellung eines Docker-Containers auf OpenShift

Gehen wir durch einen vollständigen Bereitstellungszyklus, vom Schreiben einer Dockerdatei bis zum externen Aussetzen der Anwendung.

Schritt 1: Erstellen eines Docker Images

Schreibe eine Dockerdatei für deine Anwendung. Beispiel für eine einfache Python Web App:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 8080
CMD ["python", "app.py"]

Erstellen Sie das Bild lokal mit

Schritt 2: Drücken Sie zu einer Registrierung

Markieren und schieben Sie das Bild in die interne Registrierungsdatei von OpenShift.

docker login -u $(oc whoami) -p $(oc whoami -t) default-route-openshift-image-registry.<cluster-domain>

Dann markieren und pushen:

docker tag my-python-app:1.0 default-route-openshift-image-registry.<cluster-domain>/<project-name>/my-python-app:1.0
docker push default-route-openshift-image-registry.<cluster-domain>/<project-name>/my-python-app:1.0

Schritt 3: Bereitstellen auf OpenShift

Mit dem CLI:

oc new-app my-python-app:1.0 --name=my-app --as-deployment-config

Oder erstellen Sie eine Deployment manuell über YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: my-app
spec:
 replicas: 3
 selector:
 matchLabels:
 app: my-app
 template:
 metadata:
 labels:
 app: my-app
 spec:
 containers:
 - image: default-route-openshift-image-registry.<cluster-domain>/<project>/my-python-app:1.0
 name: my-app
 ports:
 - containerPort: 8080

Bewerben Sie sich mit .

Schritt 4: Die Anwendung aufdecken

Erstellen Sie einen Service und eine Route, um die App extern zugänglich zu machen:

oc expose deployment my-app --port=8080
oc expose service my-app

Die Route stellt eine öffentliche URL bereit. Der Router von OpenShift übernimmt die TLS-Terminierung und das Load-Balancing.

Schritt 5: Skalierung verwalten

Skalieren Sie die Anzahl der Replikate dynamisch:

oc scale deployment my-app --replicas=5

Oder konfigurieren Sie die automatische Skalierung mit dem HorizontalPodAutoscaler.

Vorteile der Verwendung von Docker mit OpenShift

Portabilität und Konsistenz

Docker-Images sind unveränderliche Artefakte, die die Laufzeitumgebung einkapseln. Wenn sie auf OpenShift bereitgestellt werden, laufen diese Bilder identisch, ob auf einem Laptop eines Entwicklers, einem Testcluster oder einem Produktionsdatenzentrum. Diese Konsistenz eliminiert Umgebungsdrift und vereinfacht die Fehlersuche.

Automatisiertes Lifecycle Management

OpenShift automatisiert viele operative Aufgaben, die mit rohen Dockern belastend sind. Updates, Kanarieneinsätze, Gesundheitschecks und Selbstheilung sind eingebaut. Wenn beispielsweise ein Container abstürzt, startet OpenShift ihn automatisch neu. Wenn ein Knoten ausfällt, verteilt der Scheduler Container an gesunde Knoten.

Enterprise Security

Sicherheit ist in Unternehmensumgebungen von größter Bedeutung. OpenShift erzwingt standardmäßig, dass Container unter eingeschränkten Sicherheitskontextbeschränkungen laufen. Das bedeutet, dass Container nicht als Root laufen können, Host-Namespaces verwenden oder sensible Host-Verzeichnisse einfügen können, sofern nicht ausdrücklich erlaubt. OpenShift integriert sich auch in Schwachstellen-Scan-Tools, um Bilder vor der Bereitstellung auf bekannte CVEs zu überprüfen. Rollenbasierte Zugriffskontrolle (RBAC) stellt sicher, dass Entwickler, Operatoren und Auditoren nur über die erforderlichen Berechtigungen verfügen.

Skalierbarkeit

OpenShift nutzt die horizontale Pod-Auto-Skalierung von Kubernetes und die Cluster-Auto-Skalierung. Sie können CPU- oder Speicherschwellen definieren, die automatisch Scale-out oder Scale-In auslösen. In Kombination mit Dockers leichten Containern erfolgt die Skalierung in Sekunden statt in Minuten wie bei VMs.

Produktivität der Entwickler

Die Source-to-Image-Funktion von OpenShift beschleunigt die Entwicklung, indem Entwickler Code direkt in den Cluster schieben können, ohne Dockerfiles zu schreiben. Das integrierte Build-System kann automatisierte Image-Builds und Bereitstellungen von Git-Commits auslösen, was eine enge Feedback-Schleife ermöglicht. Darüber hinaus bietet die Entwicklerkonsole Topologieansichten, Protokolle und integrierte Terminals.

Best Practices für Enterprise Deployment

Image Versioning und Tagging

Verwenden Sie immer spezifische, versionierte Tags für Ihre Docker-Images. Vermeiden Sie das -Tag in der Produktion, weil es die Reproduzierbarkeit beeinträchtigt. Verwenden Sie semantische Versionierung oder Commit-Hashes. Die Imagestream-Ressourcen von OpenShift können Tag-Änderungen verfolgen und automatisierte Bereitstellungen auslösen.

Sicherheitspolitik

Definieren Sie Sicherheitskontexteinschränkungen (SCCs), die Ihrer Sicherheitslage entsprechen. Beginnen Sie mit dem eingeschränkten SCC und erhöhen Sie bei Bedarf nur die Berechtigungen. Integrieren Sie sich mit Container-Bildscannern wie Clair oder Red Hat Advanced Cluster Security, um Bilder vor der Bereitstellung zu scannen. Aktivieren Sie außerdem Netzwerkrichtlinien für den Mikrosegmentverkehr zwischen Pods.

CI/CD-Integration

Automatisieren von Builds, Tests und Bereitstellungen mit OpenShift Pipelines (auf Tekton gebaut) oder Jenkins. Eine typische Pipeline: (1) Entwickler schiebt Code auf Git, (2) OpenShift löst einen S2I- oder Docker-Build aus, (3) das neue Image wird automatisch in die interne Registrierung verschoben, (4) eine Bereitstellung wird aktualisiert und (5) Gesundheitsüberprüfungen validieren den Rollout. Rollen Sie automatisch zurück, wenn die neue Version die Gesundheitsüberprüfungen nicht besteht.

Beispiel für eine Tekton-Pipeline-Ressource, die aus einem Dockerfile erstellt wird:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
 name: build-docker-image
spec:
 workspaces:
 - name: source
 steps:
 - name: build
 image: gcr.io/kaniko-project/executor:latest
 args:
 - --context=$(workspaces.source.path)
 - --destination=image-registry.openshift-image-registry.svc:5000/<project>/my-app:$(params.tag)

Überwachung und Protokollierung

Aktivieren Sie den integrierten Monitoring-Stack von OpenShift (Prometheus und Grafana), um Metriken für CPU, Speicher, Festplatten-I/O und Netzwerknutzung zu sammeln. Richten Sie Warnmeldungen für einen abnormalen Ressourcenverbrauch ein. Bereitstellen des OpenShift Elasticsearch-Operators oder Weiterleiten von Protokollen an ein externes SIEM. Korreliert Protokolle mit Metriken für eine schnellere Ursachenanalyse.

Ressourcenmanagement

Ressourcenanforderungen und Limits für jeden Container festlegen. OpenShift verwendet diese, um Pods intelligent zu planen und Ressourcenhunger zu verhindern. Ohne Limits kann ein einzelner Container alle Knotenressourcen verbrauchen und andere Workloads beeinflussen. Beispiel YAML-Snippet:

resources:
 requests:
 memory: "256Mi"
 cpu: "250m"
 limits:
 memory: "512Mi"
 cpu: "500m"

Networking und Persistent Storage

Für Anwendungen, die Stateful Storage benötigen, verwenden Sie die PersistentVolumeClaims (PVCs) von OpenShift, die von einer Speicherklasse unterstützt werden (z. B. NFS, Ceph, AWS EBS). Speicherklassen entsprechend konfigurieren. Für die Vernetzung nutzen Sie OpenShift Routes für externen HTTP/S-Datenverkehr und Dienste für internes Load-Balancing. Verwenden Sie Netzwerkrichtlinien, um die Pod-to-Pod-Kommunikation basierend auf Namespaces und Labels einzuschränken.

Backup und Disaster Recovery

Regelmäßig OpenShift-Konfigurationen (etcd-Snapshots), PVC-Daten und Bildregistrierungsinhalte sichern. Implementieren eines Infrastructure-as-Code-Ansatzes mit GitOps-Tools wie ArgoCD, um Umgebungen schnell wiederherzustellen. Testen Sie Disaster-Recovery-Verfahren regelmäßig.

Real-World Use Cases

Microservices-Dekomposition

Unternehmen, die monolithische Anwendungen modernisieren, zerlegen sie oft in Microservices. Docker-Container hosten jeden Dienst unabhängig und OpenShift orchestriert das gesamte System, indem sie Service-Erkennung, Load-Balancing und Inter-Service-Kommunikation verwalten.

Hybrid Cloud-Einführungen

OpenShift läuft auf großen Cloud-Anbietern (AWS, Azure, GCP) und On-Premises. Docker-Images können überall eingesetzt werden, wo OpenShift läuft, was eine konsistente Erfahrung in hybriden Umgebungen ermöglicht. Dies ist für Unternehmen mit Datenhoheitsanforderungen oder Multi-Cloud-Strategien von entscheidender Bedeutung.

CI/CD für Machine Learning

Data-Science-Teams können ML-Modelle mit Docker containerisieren und auf OpenShift als serverlose Funktionen (via OpenShift Serverless/Knative) bereitstellen, was eine maßstäbliche Modellinferenz mit automatischer Skalierung auf Null ermöglicht, wenn sie nicht verwendet werden.

Schlussfolgerung

Docker und OpenShift zusammen stellen eine leistungsstarke, produktionsfähige Container-Orchestrierungsplattform bereit, die den Anforderungen der Unternehmens-IT entspricht. Docker liefert leichte, tragbare Bilder, die einfach zu erstellen und zu versionieren sind, während OpenShift die Orchestrierung, Sicherheit und Entwicklererfahrung hinzufügt, die erforderlich sind, um diese Bilder mit Zuversicht zu betreiben. Durch die Einhaltung der in diesem Artikel beschriebenen Integrationsschritte und Best Practices können Unternehmen die Softwarebereitstellung beschleunigen, die Ressourcenauslastung verbessern und eine starke Sicherheitslage beibehalten. Ob die Migration bestehender Workloads oder die Erstellung von Greenfield-Cloud-nativen Anwendungen, Docker on OpenShift ist eine bewährte Kombination für die Enterprise-Container-Orchestrierung.

Für ausführlichere Informationen siehe die offizielle Dokumentation: Docker Docs, OpenShift Docs und Red Hat OpenShift Product Page.