Wat is Docker?

Docker is een open-source containerplatform waarmee u een applicatie met al haar libraries, runtime en configuratie verpakt in een image en die als geïsoleerde container uitvoert op een gedeelde Linux-kernel. Docker werd in maart 2013 door dotCloud (later Docker, Inc.) gepresenteerd en heeft containerisatie in een paar jaar tot standaard gemaakt in de IT. Binnen OT en Industriële Automatisering draait Docker vooral op edge-gateways en industriële pc’s: MQTT-brokers, OPC UA-gateways, historians, dashboards en zelfs Soft PLC-runtimes. Daarmee is Docker een concrete bouwsteen van IT OT Convergentie, met nieuwe kansen en nieuwe risico’s.


🧠 Hoe werkt Docker?

In tegenstelling tot klassieke Virtualisatie virtualiseert Docker geen hardware en geen volledig besturingssysteem. Een container is een gewoon Linux-proces dat door de kernel wordt afgeschermd met twee mechanismen:

  • Namespaces - geven elke container een eigen zicht op processen, netwerk, bestandssysteem, hostnaam en gebruikers
  • cgroups (control groups) - begrenzen hoeveel CPU, geheugen en IO een container mag gebruiken

De Architectuur bestaat uit lagen. De docker-CLI praat via een API met de daemon dockerd. Die geeft het werk door aan containerd (beheert images en de levenscyclus van containers) en runc (start het containerproces volgens de OCI-specificatie). Sinds de oprichting van de Open Container Initiative in juni 2015 zijn image-formaat en runtime open standaarden, waardoor een met Docker gebouwd image ook draait op Podman, containerd of Kubernetes. De Docker Engine zelf is open source onder de Apache 2.0-licentie (project Moby).

Omdat containers de kernel van de host delen, draaien Linux-containers op Windows en macOS in een lichtgewicht virtuele machine (bij Docker Desktop via WSL 2 of een Hypervisor). Native Windows-containers bestaan ook, maar zijn in de industrie zeldzaam.

Component Functie
Dockerfile Tekstbestand met de bouwstappen van een image
Image Read-only sjabloon, opgebouwd uit gestapelde lagen
Container Draaiende instantie van een image met een eigen schrijflaag
Registry Opslag en distributie van images (Docker Hub, GitHub Container Registry, of private)
Volume Persistente opslag buiten de levenscyclus van de container
Network Virtuele netwerken (bridge, host, macvlan) tussen containers en de buitenwereld
Docker Compose YAML-beschrijving om meerdere containers samen te starten op één host

Images bestaan uit lagen (basis-OS, runtime, applicatie, configuratie). Gedeelde lagen worden één keer opgeslagen en gecachet, wat downloads naar edge-devices klein houdt bij updates.


🔄 Wat is het verschil tussen een container en een virtuele machine?

Eigenschap Docker-container Virtuele machine
Wat wordt gevirtualiseerd Proces op gedeelde kernel Volledige hardware met eigen OS
Opstarttijd Typisch seconden of minder Typisch tientallen seconden tot minuten
Overhead Laag, vrijwel native prestaties Hoger, eigen kernel en geheugen per VM
Grootte Tientallen tot honderden MB Meerdere GB
Isolatie Kernelgrens, gevoelig voor kernel- en runtime-lekken Hardwarematig via de hypervisor, sterker
Ander OS mogelijk Nee, zelfde kernel als de host Ja (bijv. Windows-HMI naast Linux)
Typisch OT-gebruik Edge-apps, gateways, analytics, test Legacy SCADA-servers, engineering-stations

In de praktijk combineert u beide: een VM-platform voor oudere Windows-applicaties en daarbinnen of daarnaast Linux-hosts met containers. De lagere overhead maakt containers sneller en zuiniger, maar niet automatisch deterministisch (zie realtime hieronder).


🏭 Waarvoor wordt Docker in OT gebruikt?

Docker is veelgebruikt op edge-devices, omdat één gateway zo meerdere onafhankelijke diensten kan draaien die u los kunt updaten. Typische workloads:

Workload Geschikt voor containers? Toelichting
MQTT-broker (Mosquitto) Ja Standaard image, lichte footprint
OPC UA-gateway / protocolconverter Ja Vertaalt Modbus TCP of S7 naar OPC UA of MQTT
Historian / InfluxDB Ja Met volume voor persistente data
Dashboards (Grafana) Ja Visualisatie, OEE
Flows (Node-RED) Ja Data-integratie en kleine logica
AI-inferencing / Vision Ja Vaak met GPU-doorgifte
SCADA-componenten (Ignition Edge) Gedeeltelijk Afhankelijk van leverancier en licentie
Soft PLC Beperkt Alleen met realtime kernel en tuning

Leveranciers bouwen er hele platformen op. Apps voor Siemens Industrial Edge zijn Docker-images die met een docker-compose.yml worden beschreven en via de Industrial Edge Management worden uitgerold. CODESYS Virtual Control SL levert een virtuele PLC als container voor Docker of Podman op Linux (x86-64 en ARM), met meerdere PLC-instanties per apparaat.

In een Unified Namespace-architectuur draait elk onderdeel (broker, Sparkplug-gateway, historian, analytics, dashboard) vaak als aparte container. Voorbeelden per sector: OEE-dashboards en protocolgateways in de maakindustrie, Predictive Maintenance en telemetrie in de energievoorziening, HVAC-analyse in Gebouwautomatisering en edge-buffering van meetdata in de watersector. Containers communiceren daarbij via MQTT, OPC UA, HTTP, HTTPS en REST-API’s.


⏱️ Is Docker geschikt voor realtime toepassingen?

Standaard niet. Een container gebruikt de scheduler van de host, dus jitter komt van de kernel en van andere processen. Voor realtime-taken zijn nodig:

  • Realtime kernel - PREEMPT_RT is sinds Linux 6.12 (eind 2024) onderdeel van de mainline-kernel
  • CPU-isolatie en pinning - vaste cores voor de realtime container (--cpuset-cpus)
  • Realtime scheduling - alleen de benodigde capability (zoals CAP_SYS_NICE) en een rtprio-limiet in plaats van --privileged
  • Host- of macvlan-netwerk - vermijdt de Latency van NAT en overlay-netwerken; voor deterministisch netwerkverkeer eventueel TSN

Zo komen soft-PLC’s met cyclustijden in de milliseconden binnen bereik. Voor high-speed Motion Control en veiligheidsfuncties blijven dedicated controllers vaak de norm. Andere bottlenecks zijn opslag-IO, CPU-contentie bij te veel containers per host en overhead van orchestration.


🔄 Wanneer gebruikt u Docker Compose, Swarm of Kubernetes?

  • Docker Compose - beschrijft een stack (bijv. broker, historian, Grafana, OPC UA-gateway) in één YAML-bestand op één host; ideaal voor een enkele edge-gateway of testopstelling
  • Docker Swarm - eenvoudige clustering in Docker zelf, weinig gebruikt in nieuwe projecten
  • Kubernetes en distributies als het lichte K3s of het enterprise-platform OpenShift - orchestration over veel nodes met self-healing en uitrol via GitOps

Kubernetes verwijderde in versie 1.24 (mei 2022) de koppeling met Docker Engine (dockershim) en gebruikt sindsdien containerd of CRI-O. Met Docker gebouwde images blijven daar gewoon werken, omdat het OCI-images zijn. Docker blijft vooral het hulpmiddel om images te bouwen en lokaal te testen, ook in OTAP-straten en simulatielabs.


🔐 Welke securityrisico’s brengt Docker mee in OT?

De risico’s zitten minder in containertechniek zelf dan in configuratie en herkomst van images. Voor Cybersecurity in OT zijn dit de belangrijkste:

Risico Voorbeeld Impact
Open daemon-API dockerd op TCP-poort 2375 zonder TLS Volledige controle over de host
Docker-socket in container /var/run/docker.sock gemount in een app Container kan andere containers en de host overnemen
Privileged containers --privileged of host-namespaces Isolatie vrijwel weg
Container breakout runc-lekken CVE-2019-5736 en CVE-2024-21626 (“Leaky Vessels”, opgelost in runc 1.1.12) Code-uitvoering op de host
Onbetrouwbare images Willekeurige images van Docker Hub, latest-tags Malware, cryptominers, supply-chainaanval
Verouderde images Base image met bekende CVE’s Kwetsbaarheden blijven jaren staan
Schaduwcontainers Door leveranciers of engineers zelf gestarte stacks Onzichtbaar voor beheer en Security Monitoring

Toegang tot de Docker-daemon staat gelijk aan rootrechten op de host. Wie in de docker-groep zit of de client-certificaten heeft, is in feite beheerder.


🛡️ Hoe beveiligt u Docker in een OT-omgeving stap voor stap?

  1. Inventariseer - leg per host vast welke containers, images (met digest) en versies draaien; neem ze op in uw assetbeheer en Configuration Management.
  2. Segmenteer - plaats container-hosts in de juiste zone volgens IEC 62443 en het Purdue Model; edge-gateways die data naar IT of Cloud sturen horen vaak in of naast de DMZ, afgeschermd met een Industrial Firewall en Netwerksegmentatie.
  3. Sluit de daemon af - geen TCP-poort 2375; beheer op afstand alleen via SSH of TLS op poort 2376, en beperk de docker-groep volgens Least Privilege.
  4. Hard de containers - non-root gebruikers, rootless mode waar mogelijk, read-only bestandssystemen, geen --privileged, minimale capabilities en resource-limieten. De CIS Docker Benchmark en CIS Benchmarks geven concrete checks (Hardening).
  5. Beheer de supply chain - gebruik een private registry, minimale en ondertekende images, vaste versies of digests in plaats van latest, Vulnerability Scanning in de buildstraat en een SBOM per image.
  6. Monitor en log - stuur container- en daemonlogs naar centrale Logging, gebruik RBAC en MFA op registry en beheerplatform, en overweeg Application Whitelisting op de host.
  7. Patch in de OTAP-straat - test nieuwe images eerst, rol uit met een terugvaloptie en neem host-OS, runtime en images op in Patchmanagement en Lifecycle Management.

NIST SP 800-190 (Application Container Security Guide, september 2017) is een veelgebruikte leidraad voor containerbeveiliging en sluit aan op NIST SP 800-82, ISO 27001 en het NIST CSF. Leveranciers die containerized software op de EU-markt brengen vallen onder de Cyber Resilience Act: zij moeten kwetsbaarheden in hun images, inclusief open-source lagen, actief beheren. De meldplicht voor actief misbruikte kwetsbaarheden geldt vanaf 11 september 2026, de volledige verplichtingen vanaf 11 december 2027.


🧱 Waar moet u op letten bij beheer en licenties?

  • Persistente data - de schrijflaag van een container verdwijnt zodra de container wordt verwijderd of vervangen, bijvoorbeeld bij een update. Historians, alarmen, auditlogs en trends horen daarom in volumes, met back-up.
  • Versiebeheer - bewaar Dockerfiles en Compose-bestanden in Version Control, zodat elke installatie reproduceerbaar is.
  • Licenties - Docker Engine is gratis, maar Docker Desktop vereist een betaald abonnement voor organisaties met 250 of meer medewerkers of een jaaromzet van 10 miljoen dollar of meer. Op Linux-servers en edge-devices gebruikt u daarom meestal alleen de Engine.
  • Docker Hub-limieten - anonieme pulls zijn begrensd per tijdsvenster; edge-devices die zelf images ophalen lopen daar tegenaan. Een eigen registry of mirror voorkomt dat, en is in OT sowieso aan te raden.
  • Offline werking - veel OT-netwerken hebben geen internettoegang. Zorg dat images vooraf in een lokale registry staan, zodat een herstart nooit afhangt van een externe download.

❓ Veelgestelde vragen

Is Docker gratis te gebruiken in de industrie?

Docker Engine is open source onder de Apache 2.0-licentie en gratis te gebruiken op Linux-servers, industriële pc’s en edge-gateways. Alleen Docker Desktop, de ontwikkelomgeving voor Windows en macOS, vereist een betaald abonnement voor organisaties met 250 of meer medewerkers of een jaaromzet van 10 miljoen dollar of meer.

Kan een PLC in een Docker-container draaien?

Een soft PLC kan in een Docker-container draaien, bijvoorbeeld CODESYS Virtual Control SL op een Linux-host. Voor voorspelbare cyclustijden zijn een realtime kernel (PREEMPT_RT), vaste CPU-cores en een passend netwerk nodig. Voor snelle motion control en veiligheidsfuncties blijven hardware-PLC’s en safety controllers gebruikelijk.

Is Docker veilig genoeg voor OT-netwerken?

Docker kan veilig worden ingezet in OT als de daemon niet via het netwerk open staat, containers zonder rootrechten draaien en images uit een gecontroleerde registry komen. Containers isoleren minder sterk dan virtuele machines, dus netwerksegmentatie volgens IEC 62443 blijft nodig. Leidraden zijn NIST SP 800-190 en de CIS Docker Benchmark.

Wat is het verschil tussen Docker en Kubernetes?

Docker bouwt en draait containers op één host, terwijl Kubernetes containers over een cluster van meerdere machines verdeelt, bewaakt en automatisch herstart. Kubernetes gebruikt sinds versie 1.24 geen Docker Engine meer als runtime, maar draait met Docker gebouwde images gewoon via containerd of CRI-O.

Draait Docker ook op Windows?

Docker draait op Windows via Docker Desktop, dat Linux-containers uitvoert in een lichtgewicht virtuele machine op basis van WSL 2. Daarnaast bestaan native Windows-containers voor Windows-applicaties. In industriële edge-omgevingen draait Docker vrijwel altijd direct op Linux.

Waarom worden containers veel gebruikt op edge-gateways?

Containers maken het mogelijk om meerdere onafhankelijke diensten, zoals een MQTT-broker, een OPC UA-gateway en een dashboard, op één edge-gateway te draaien en ze apart te updaten. Een update is een nieuw image dat bij problemen snel kan worden teruggedraaid. Platformen als Siemens Industrial Edge zijn daarom op Docker gebaseerd.


📌 Samengevat

Docker verpakt applicaties met hun afhankelijkheden in lichte, reproduceerbare containers en is daarmee de standaardmanier geworden om edge- en datadiensten in OT uit te rollen. Het levert snelheid, Schaalbaarheid en eenvoudige updates voor IIoT-architecturen, maar vraagt om een afgesloten daemon, gecontroleerde images, persistente volumes, realtime-tuning waar nodig en een plek in de zones van IEC 62443. Met Compliance en Security vanaf het begin meegenomen, wordt Docker een betrouwbare bouwsteen tussen IT en OT, On-Premise of aan de edge.