Docker Support
Was ist Docker?
Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure in order to deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production. Entnommen von docs.docker.com
Weiterführende Informationen zu Docker können Sie auf der offiziellen Docker Website finden.
WinCC OA und Docker
Beginnend mit Version 3.18 von WinCC OA wird nun, auch für den produktiven Einsatz, der Betrieb von WinCC OA innerhalb eines Docker-Containers unterstützt.
Dieses Kapitel bietet eine Einführung wie WinCC OA innerhalb eines Docker-Containers verwendet werden kann, welche Besonderheiten zu beachten sind und wo Sie zusätzliche Informationen zu diesem Thema finden können.
Das WinCC OA-Video Feature kann nicht mit Docker verwendet werden, da die erforderlichen vimacc-Komponenten nicht innerhalb eines Containers installiert werden können.
Definieren eines eigenen Build-Images
Für die Verwendung von WinCC OA in Docker ist es erforderlich ein spezifisches Build-Image zu erstellen.
WinCC OA stellt ein vordefiniertes Dockerfile zur Verfügung, welches für das Erstellen eines Build-Images verwendet werden kann.
Das Dockerfile
befindet sich innerhalb des Debian-Installationspaketes von
WinCC OA (WinCC OA
3.20 P0 - Debian 11
(Bullseye) - x86_64.zip
).
Die Installation finden Sie auf winccoa.com. Diese Datei kann direkt verwendet und an die
spezifischen Projektanforderungen angepasst werden.
docker-entrypoint.sh
referenziert und verwendet um den WinCC OA PMON sowie das CodeMeter-Service ordnungsgemäß herunterzufahren,
wenn der WinCC OA Docker-Container gestoppt wird.Angepasstes Build-Image
Um Anpassungen für die spezifischen Projektanforderungen durchzuführen wird empfohlen sich mit Docker auseinanderzusetzen. Die vollständige Dokumentation für das Erstellen von angepassten Build-Images und Docker generell finden sich in der offiziellen Docker-Dokumentation.
Erstellen eines Build-Images
Um ein konfiguriertes Docker-Build-Image innerhalb der Docker Umgebung zu erstellen, muss
der Befehl docker build
aufgerufen werden, z.B.:
docker build -t winccoa31X ."
Innerhalb des Beispiels wird davon ausgegangen, dass der Aufruf im Verzeichnis aufgerufen
wurde, in welchem sich das Dockerfile
befindet. Aus diesem Grund kann der
erforderliche PATH als .
angegeben werden. Der optionale Parameter
-t winccoa31X
wird verwendet, um diesem Docker build mit dem Tag
"winccoa31X" zu versehen.
Dockerfile
-Datei, welche mit WinCC OA zur Verfügung gestellt wird.Ausführen des Docker-Containers
Um einen Container, unter Verwendung des erstellten Docker Build-Images, zu starten wird
der Befehl docker run
verwendet.
Es muss sichergestellt werden, dass das WinCC OA Projekt in das korrekte Verzeichnis gemountet wurde.
Standardmäßig wird der Pfad home/winccoa/oaproj/
verwendet. Um einen
abweichenden Pfad festzulegen wird das optionale -v
Argument des
docker run
Befehls verwendet.
Um die erforderlichen Ports des Projektes mit dem Docker-Container abzugleichen wird das
optionale -p
Argument des docker run
Befehls
verwendet.
Ein Beispiel für das Ausführen eines Docker-Containers sieht wie folgt aus:
docker run -d --rm --name winccoa -v /home/myuser/myproj:/home/winccoa/oaproj/ -p 4999:4999 -p 5678:5678 -p 8079:8079 winccoa31X
Es ist auch möglich, WinCC OA Docker-Images mit einem vordefinierten Projekt auszuführen. Dies kann mit der folgenden Änderung am Skript docker-entrypoint.sh erfolgen:
$OAPROJEXTRACT - <der Pfad innerhalb des Containers>
Wenn dieser Pfad existiert, wird er nach $OAPROJ
extrahiert,
vorausgesetzt, dass $OAPROJ/config/config
nicht existiert. Die
Projektdatei kann eine .tar- oder eine zip-Datei sein.
Der Start des WinCC OA-Prozesses kann mit der Variable
$OASLEEP
verzögert werden - wenn diese definiert ist, wird sie als
Schlafzeit in Sekunden verwendet, z.B.
$OASLEEP=150
WinCC OA Lizenzierung für Docker
Für die Lizenzierung von WinCC OA innerhalb eines Docker Containers ist es erforderlich einen eigenen CodeMeter Lizenzserver bereitzustellen.
Der CodeMeter Lizenzserver kann wahlweise auf einem eigenständigen Server betrieben werden, oder als Service auf dem Host Rechner der Docker Umgebung betrieben werden.
Ein CodeMeter Lizenzserver erfordert die Installation und entsprechende Server-Konfiguration der CodeMeter Runtime. Diese wird als Teil des WinCC OA Setups zur Verfügung gestellt, kann, für Linux, separat von winccoa.com heruntergeladen oder direkt über den Hersteller unter wibu.com bezogen werden.
Unter wibu.com finden Sie auch ausführliche Beschreibungen für die Konfiguration eines CodeMeter Lizenzservers.
Hinzufügen eines Lizenzservers
- Geben Sie auf dem zentralen Lizenzserver in der Weboberfläche unter License Access Permissions den IP-Bereich für Clients an, die Lizenzen verwenden dürfen. im Feld
- Fügen Sie in der Docker-Instanz den zentralen Lizenzserver mit dem folgenden Befehl
hinzu:
cmu --add-server <server-IP>
-
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob der Server in der Serversuchliste enthalten ist:
cmu --show-serversearchlist
- Um die Adresse des Lizenzservers an einen Docker-Container zu übergeben, anstatt sie
manuell hinzuzufügen, gibt es zwei Optionen:
- Erstellen und Ausführen eines Docker-Containers mit einem dedizierten Lizenzserver:
docker run -d --rm --name winccoa -v /home/myuser/myproj:/home/winccoa/oaproj/ -p 4999:4999 -p 5678:5678 -p 8079:8079 -e LICENSESERVER=10.0.0.2 winccoa
- Starten Sie einen Docker-Container mit der Umgebungsvariable:
VN = LICENSESERVER [, separated if multiple license servers are used]
- Erstellen und Ausführen eines Docker-Containers mit einem dedizierten Lizenzserver:
Hinweise und Einschränkungen
Bitte beachten Sie folgende Hinweise und Einschränkungen bei der Verwendung von WinCC OA innerhalb eines Docker Containers.
- Die Verwendung von WinCC OA innerhalb eines Docker Containers wird nur unter Linux unterstützt.
- Ein Docker-Container ist nicht dazu vorgesehen Konfigurationen, Werte oder Historien zu speichern, welche im Rahmen des Betriebs anfallen! Eine Sicherung muss entsprechend vorgesehen werden und auf Speichermedien außerhalb des Containers eingerichtet werden. Der Stopp eines Containers setzt diesen wieder auf seinen Ausgangszustand zurück!
- Zusätzliche Informationen darüber, wie Sie WinCC OA in Docker sicher betreiben können, finden Sie in den WinCC OA Security Guidelines .
- Das WinCC OA User Interface kann nicht innerhalb eines Docker-Containers verwendet werden.
- Bitte beachten Sie insbesondere bei der Verwendung von WinCC OA innerhalb von Docker die WinCC OA Betriebsbedingungen .
Docker - Netzwerk
Die Beschreibung unterhalb zeigt Ihnen die notwendigen Schritte um ein virtuelles Netzwerk zwischen zwei (oder mehr) Docker-Container(n) herzustellen, welches als Basis für ein redundantes oder verteiltes Projekt verwendet werden kann.
Das Tutorial nimmt an, dass Sie den Container myFirstContainer
für
das WinCC OA Projekt bereits konfiguriert haben. Dieser enthält
den ersten Redundanzpartner.
Wenn Sie WinCC OA als virtualisierten Docker-Container verwenden mag es hilfreich sein, eine redundante Konfiguration ihrer Projektumgebung zu erstellen. Diese Anleitung zeigt ihnen die notwendigen Schritte zum Anlegen dieser redundanten Umgebung zur Verwendung von WinCC OA in Docker.
-
Erstellen Sie ein neues Netzwerk
myNetwork
, welches zur Kommunikation zwischen den WinCC OA-Projekten verwendet wird.$ docker network create --driver=bridge --subnet=172.28.0.0/16 --ip-range=172.28.5.0/24 --gateway=172.28.5.254 myNetwork
-
Erstellen Sie einen neuen Container
mySecondContainer
, welcher das NetzwerkmyNetwork
verwendet.$ docker run --name myNewContainer --hostname <HOSTNAME_IHRES_PROJEKTS> --network myNetwork -u <Benutzername>:<Benutzername> -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /etc/hosts:/etc/hosts -v /etc/localtime:/etc/localtime:ro <Dockerimage-Name>
Die Dockerimage-Datei, welche in dem oben genannten Aufruf verwendet wird muss mit der von WinCC OA zur verfügung gestellten Dockerdatei erstellt werden. Eine Beschreibung zum Erstellen der Image-Datei kann im Kapitel Docker Support gefunden werden. -
Fügen Sie den existierenden container zum Netzwerk
myNetwork
hinzu.$ docker network connect myNetwork myFirstContainer
Sowohl der ContainermyFirstContainer
als auch der ContainermySecondContainer
, sind nun Teil des gleichen NetzwerksmyNetwork
und können eine Verbindung über das Docker Netzwerk Interface herstellen.
Zur Überprüfung, ob die Verbindung erfolgreich hergestellt wurde, kann der folgende Docker-Befehl verwendet werden:
- Pingen des Docker-Containers
-
Zum Absetzen eines Ping-Befehls von einem Docker-Container zum anderen kann der folgende
exec
-Befehl verwendet werden:docker exec -it <Docker image name> ping <IP address of your second container>
- IP-Adresse abfragen
-
Um die IP-Adresse Ihres Docker-Containers abzurufen kann der folgende
inspect
-Befehl verwendet werden:docker inspect