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?
- Inventariseer - leg per host vast welke containers, images (met digest) en versies draaien; neem ze op in uw assetbeheer en Configuration Management.
- 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.
-
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. -
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). -
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. - 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.
- 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.
