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 so you can 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.

Einschränkung:

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 in der SIMATIC Industrial Installation wincc_oa_path3.18_SIMATIC_Industrial_OS_2_P13. Die Installation finden Sie auf winccoa.com. Diese Datei kann direkt verwendet und an die spezifischen Projektanforderungen angepasst werden.

Anmerkung: Innerhalb der vorkonfigurierten Datei wird das Shell-Skript 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.

Anmerkung: Weitere Beispiele und Informationen für das Ausführen des konfigurierten Images finden sich direkt innerhalb der 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

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

Um für einen Docker-Container einen Lizenzserver zu definieren muss die Umgebungsvariable LICENSESERVER innerhalb des Containers gesetzt werden. Dies wird mit dem optionalen -e Argument des docker run Befehls durchgeführt, z.B.:

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 winccoa31X
Anmerkung: Befindet sich der CodeMeter-Lizenzserver auf der Host-Maschine der Docker-Umgebung muss dieser Eintrag nicht gesetzt werden, da dieser Server automatisch erkannt wird.

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.

Anmerkung: Bitte beachten Sie, das empfohlen wird entsprechendes Wissen über Docker, Docker Netzwerke und WinCC OA selbst aufzubauen, bevor Sie ein redundantes System innerhalb ihres virtualisierten Containernetzwerks aufbauen.

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.

  1. 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
  2. Erstellen Sie einen neuen Container mySecondContainer, welcher das Netzwerk myNetwork 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.
  3. Fügen Sie den existierenden container zum Netzwerk myNetwork hinzu: $ docker network connect myNetwork myFirstContainer
    Sowohl der Container myFirstContainer als auch der Container mySecondContainer, sind nun Teil des gleichen Netzwerks myNetwork und können eine Verbindung über das Docker Netzwerk Interface herstellen.
Nachdem Sie den oben genannten Schritten gefolgt sind, verwenden die beiden Docker-Container Instanzen das gleiche virtuelle Netzwerk. Hiermit wird die Kommunikation zwischen den Containern ermöglicht, womit auch die redundanten und verteilten Optionen innerhalb Ihrer Docker-Umgebung verwendet werden können.

Zur Überprüfung, ob die Verbindung erfolgreich hergestellt wurde, kann der folgende Docker-Befehl verwendet werden:

Pingen Sie Ihren Docker Container

Zum Absetzen eines Ping-Befehls von einem Docker-Container zum anderen kann der folgende exec-Befehl verwendet werden:

docker exec -it <Dockerimage-Name> ping <IP address of your second container>

Abfragen der IP-Adresse

Um die IP-Adresse Ihres Docker-Containers abzurufen kann der folgende inspect-Befehl verwendet werden:

docker inspect