Docking in Echtzeit
11. Juli 2024
Docker hat die Softwareentwicklung revolutioniert, indem es eine leichte und effiziente Möglichkeit bietet, Anwendungen zu verpacken und bereitzustellen. Docker ist eine Open-Source-Plattform, die die automatisierte Bereitstellung von Anwendungen in leichten, portablen Containern ermöglicht. Diese Container umfassen alles, was eine Anwendung zum Ausführen benötigt, einschließlich Code, Laufzeitumgebung, Systemtools, Bibliotheken und Einstellungen. Entwickler können ihren Code, Abhängigkeiten und die Laufzeitumgebung isolieren, um eine konsistente Ausführung in verschiedenen Umgebungen sicherzustellen. Es gibt auch andere wichtige Konzepte:
- Docker-Images
- Docker-Registries
- Docker-Engine
In diesem Blog werden wir die Grundlagen von Docker, die Komponenten sowie die Echtzeitdatenübertragung und wie wir bei SALZ Automation diese Technologie nutzen, kennenlernen.
Docker ist eine Open-Source-Containerisierungsplattform, die es Entwicklern ermöglicht, Anwendungen in isolierten Umgebungen namens Container zu erstellen, zu verpacken und auszuführen. Im Gegensatz zu virtuellen Maschinen (VMs) bieten Docker-Container mehrere Vorteile:
- Docker bietet eine Abstraktion auf Betriebssystemebene, optimiert die Ressourcennutzung durch gemeinsame Nutzung des Host-Betriebssystemkernels und ermöglicht so eine leichte und effiziente Ausführung.
- Container sind portabel und konsistent in verschiedenen Umgebungen, was nahtlose Übergänge zwischen Entwicklung, Test und Produktion gewährleistet.
- Docker vereinfacht den Build-Prozess, indem es Abbilder mit allen Abhängigkeiten erstellt, und unabhängige Tests containerisierter Komponenten verbessern die Fehlertoleranz. Darüber hinaus starten Container aufgrund ihrer geringen Größe schnell und beschleunigen die Bereitstellung von Anwendungen.
Docker wurde 2013 von Solomon Hykes und seinem Team bei dotCloud eingeführt. Es gewann schnell an Popularität aufgrund seiner Einfachheit und Effizienz bei der Verwaltung von Anwendungsabhängigkeiten und -umgebungen. Der Aufstieg von Docker führte zur Gründung der Open Container Initiative (OCI), um Branchenstandards für Containerformate und Runtimes festzulegen. Heute wird Docker weit verbreitet in DevOps-Praktiken eingesetzt, um kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD)-Pipelines zu erleichtern, und ist eine grundlegende Technologie in der Microservices-Architektur und der cloudnativen Entwicklung.
Die Netzwerkfunktionen in Docker ermöglichen es Containern, über verschiedene Netzwerkoptionen wie Bridge-Netzwerke und Overlay-Netzwerke miteinander und mit externen Systemen zu kommunizieren. Für die Speicherung unterstützt Docker Volumes, Bind-Mounts und tmpfs-Mounts, die persistente Speicherlösungen für containerisierte Anwendungen bieten. Die Sicherheit wird durch Kernel-Namespaces und Kontrollgruppen verbessert, die Container isolieren und die Ressourcennutzung begrenzen.
Komponenten der Docker-Architektur
Images dienen als Blaupausen, die Anweisungen zur Erstellung von Docker-Containern enthalten. Diese Images definieren Anwendungsabhängigkeiten und geben die Prozesse an, die beim Start des Containers ausgeführt werden sollen. Sie können Images von DockerHub beziehen oder benutzerdefinierte Images mithilfe eines Dockerfiles erstellen.
Container stellen laufende Instanzen von Images dar, in denen eine Anwendung oder ihre unabhängigen Module ausgeführt werden.
In Anlehnung an die objektorientierte Programmierung entspricht ein Image einer Klasse, und ein Container ist eine Instanz dieser Klasse. Diese Flexibilität ermöglicht betriebliche Effizienz, indem sie die Erstellung mehrerer Container aus einem einzigen Image ermöglicht.
Eine Docker-Registry dient als Repository für Docker-Images. Die Standard-Registry ist der Docker Hub, ein öffentliches Repository, das offizielle und öffentliche Images für verschiedene Sprachen und Plattformen speichert. Wenn Sie ein Image von Docker anfordern, wird standardmäßig in der Docker Hub-Registry gesucht. Darüber hinaus haben Sie die Möglichkeit, Ihre eigene private Registry zu erstellen und zu verwalten und sie als primäre Quelle für benutzerdefinierte Images zu konfigurieren, die auf Ihre spezifischen Anforderungen zugeschnitten sind.
Docker Engine spielt eine entscheidende Rolle in der Docker-Architektur und dient als Grundlage, auf der Anwendungen ausgeführt werden. Stellen Sie es sich als die Anwendung vor, die auf Ihrem System installiert ist und Container, Abbilder und Builds verwaltet.
Komponenten von Docker Engine:
- Docker-Daemon: Der Docker-Daemon ist vergleichbar mit dem Server, der auf der Hostmaschine läuft. Seine Hauptaufgaben umfassen den Aufbau und die Verwaltung von Docker-Abbildern. Er arbeitet im Hintergrund und gewährleistet eine nahtlose Container-Orchestrierung.
- Docker-Client: Der Docker-Client bietet eine Befehlszeilenschnittstelle (CLI) zur Interaktion mit dem Docker-Daemon. Obwohl der Client lokal ausgeführt werden kann, greift er über die REST-API von Docker Engine auf den Daemon zu.
- REST-API: Die REST-API ermöglicht die Kommunikation zwischen Client und Daemon. Sie ermöglicht dynamische Interaktionen und ermöglicht die programmgesteuerte Steuerung von Containern und Abbildern.
Hier sind einige der Vorteile, die Docker in verschiedenen Phasen des Softwareentwicklungszyklus (SDLC) bietet:
Build:
- Docker ermöglicht es Entwicklungsteams, Zeit, Aufwand und Kosten zu sparen, indem sie ihre Anwendungen in einzelne oder mehrere Module verpacken.
- Durch die Erstellung eines maßgeschneiderten Abbilds für eine Anwendung werden die Komplexitäten der Verwaltung mehrerer Abhängigkeitsversionen während des Build-Zyklus vermieden.
Testing:
- Docker ermöglicht unabhängige Tests jeder containerisierten Anwendung oder Komponente.
- Diese Isolation gewährleistet, dass der Test eines Teils keine Auswirkungen auf andere Komponenten hat und die Sicherheit sowie die Fehlertoleranz verbessert.
Bereitstellen und Warten:
- Konsistente Versionen von Bibliotheken und Paketen sind während der Entwicklung entscheidend.
- Docker stellt diese Konsistenz sicher und reduziert Reibungspunkte zwischen Teams.
- Das Bereitstellen von vorab getesteten Containern minimiert die Einführung von Fehlern während des Build-Prozesses und erleichtert die Migration in die Produktion.
SALZ Automation System und Docker:
SALZ Automation nutzt diese Technologie für die Containerisierung verschiedener Anwendungen und stellt diese Anwendungen dann auf dem SALZ Steuerungssystem. Für den Echtzeit-Datenaustausch, insbesondere mit bestimmten Kommunikationsprotokollen wie EtherCAT, müssen Docker-Container detailliert konfiguriert werden.
So werden Docker-Container beispielsweise nicht direkt an physische Netzwerkschnittstellen (NICs) angeschlossen. Der MACVLAN-Netzwerktreiber kann jedoch verwendet werden, um der virtuellen Netzwerkschnittstelle jedes Containers eine MAC-Adresse zuzuweisen, so dass es so aussieht, als ob er direkt mit dem physischen Netzwerk verbunden wäre.
Was ist ein MACVLAN-Netzwerktreiber?
Einige Anwendungen, insbesondere ältere oder solche, die den Netzwerkverkehr überwachen, müssen direkt mit dem physischen Netzwerk verbunden sein. Der macvlan-Treiber weist jedem Container eine eindeutige MAC-Adresse zu und lässt ihn wie eine physische Netzwerkschnittstelle erscheinen. Die Konfiguration desselben kann erfolgen, indem Sie eine physische Schnittstelle auf Ihrem Docker-Host für den macvlan festlegen, dann das Subnetz und das Gateway des Netzwerks angeben und optional die macvlan-Netzwerke über verschiedene physische Schnittstellen isolieren.
Die Containerisierung von Anwendungen mit Docker bietet signifikante Vorteile für Echtzeit-Datenaustauschsysteme:
- Durch die Einführung einer Microservices-Architektur können monolithische Anwendungen in unabhängige Dienste aufgeteilt werden, von denen jeder seinen eigenen Lebenszyklus und seine Skalierungsrichtlinien hat. Dieser modulare Ansatz ermöglicht effiziente Aktualisierungen und Skalierbarkeit, was für die Verarbeitung von Echtzeitdaten unerlässlich ist.
- Container bieten außerdem Fehlerisolierung und Portabilität, indem sie Anwendungen und ihre Abhängigkeiten kapseln und sicherstellen, dass sie in verschiedenen Umgebungen konsistent ausgeführt werden. Diese “write once, run anywhere”-Fähigkeit verhindert Cloud-Anbieterabhängigkeiten und erleichtert nahtlose Übergänge zwischen Entwicklung, Test und Produktion.
- Docker vereinfacht das Anwendungsmanagement und verbessert in Kombination mit Orchestrierungstools wie Kubernetes die Bereitstellung, Skalierung und Ausfallsicherheit von Containern. Diese dynamische Orchestrierung ermöglicht es Echtzeitdatendiensten, sich an wechselnde Anforderungen anzupassen.
- Darüber hinaus gewährleistet die geringe Größe von Containern schnelle Startzeiten, was die erforderliche schnelle Reaktionsfähigkeit für Echtzeitsysteme bietet.
Insgesamt verbessert die Containerisierungstechnologie von Docker die Effizienz, Skalierbarkeit und Zuverlässigkeit von Echtzeitdatenaustauschanwendungen.
Weitere Informationen über unser Steuerungssystem finden Sie auf der SALZ Steuerungssystem Landingpage.
Jetzt kontaktieren
![]()
Für weitere Informationen oder ein individuelles Angebot melden Sie sich gerne bei unserem technischen Vertrieb:
Christian Kürten
christian.kuerten@salz-automation.com
Zum Kontaktformular