Hoe Docker en Portainer op een VPS te draaien (2026 Gids)

Gepubliceerd: door Dallas Kashuba
Hoe Docker en Portainer op een VPS te draaien (2026 Gids) thumbnail

Heb je ooit gehoord van Dockerception?

Nou, houd je vast aan je hoed. We gaan het konijnenhol in.

Portainer, de web UI die je gaat installeren bovenop Docker, is zelf een Docker-container.

Het is een tool die draait op precies datgene wat het beheert. Je start het met één docker run-regel, en het eerste wat het doet is terugreiken door een klein gat in de host (een socketbestand) en de Docker-daemon vragen om elke container op de machine te tonen — inclusief zichzelf. Vanuit dat browsertabblad beheer je al je andere Docker-containers.

De UI waar je naar kijkt, staat in zijn eigen containerlijst.

Op een VPS waar je al betaalt voor de box en al vertrouwd bent met SSH, past Portainer naadloos bovenop Docker zonder dat er iets aan de onderliggende werking verandert.

Dat is de waarde.

Een 4 GB box kan een startpunt zijn voor Docker en Portainer, maar de applicaties die je toevoegt bepalen of die capaciteit genoeg is. Denk aan de huisautomatisering, de familiefotoverzameling, de AI-assistent en de nieuwsbrief die je al zo lang wilt lanceren — op één server die je echt bezit.

Zo krijg je het draaiend, beveilig je het en haal je er waarde uit.

Wat Is Portainer Precies?

Portainer-architectuur 1x

Portainer is een webinterface die als een Docker-container draait en je andere containers beheert via de Docker-socket.

Het is in wezen een browsergebaseerde frontend (een Docker-GUI) voor dezelfde Docker-commando’s die je anders met de hand zou typen, plus stackbeheer, op rollen gebaseerde toegang (als je upgradet naar Business Edition) en een dashboardweergave van CPU en geheugen.

De socketverbinding is wat het werk doet. De binding ziet eruit als -v /var/run/docker.sock:/var/run/docker.sock in het installatiecommando, en die ene regel doet al het zware werk. Zonder die regel is Portainer een UI voor een lege Docker-host. Met die regel is Portainer de afstandsbediening van de Docker-host.

Eén ding om in gedachten te houden: elk proces dat /var/run/docker.sock kan bereiken, kan de Docker-daemon besturen, en de eigen beveiligingsdocumentatie van Docker zegt onomwonden dat alleen vertrouwde gebruikers dat mogen doen: een container die via de daemon is gestart, kan het volledige bestandssysteem van de host mounten en zonder beperkingen wijzigen. Dat is een functie wanneer het Portainer is die het vraagt en een probleem wanneer het een container is die je vorige week hebt opgezet en waarvan je vergeten bent dat je hem sockettoegang had gegeven.

Behandel het binden van de socket als een bevoorrechte capaciteit en controleer elke andere container die er een wil.

Ontvang inhoud rechtstreeks in uw inbox

Meld u nu aan om alle laatste updates rechtstreeks in uw inbox te ontvangen.

Heb Je Portainer Nodig Als Je Al Docker Hebt?

Nee. Docker werkt prima vanuit de terminal, en veel mensen draaien jarenlang een paar containers zonder ooit een UI erbovenop te installeren.

Je wilt Portainer als:

  • Je jongleert met meer dan twee of drie Docker-containers voor verschillende apps.
  • Je klikt liever op “herstarten” dan om 23:00 uur een Compose-commando opnieuw te typen. 
  • Je deelt toegang met iemand die niet in een terminal leeft. 
  • Je wilt stack-updates vanuit een Git-repo implementeren zonder een implementatiescript te schrijven. 

Sla Portainer over als:

  • Je draait één of twee containers die zelden veranderen. 
  • Je bent al vertrouwd met Docker Compose en je blijft daar graag.

Docker zelf is mainstream genoeg dat dit geen randbeslissing is. In de Stack Overflow Developer Survey 2025 gaf 71% van de respondenten aan Docker te gebruiken — het hoogste resultaat onder technologieën voor cloudontwikkeling en infrastructuur, na een sprong van 17 procentpunten ten opzichte van 2024. Het Portainer-project heeft per augustus 2026 meer dan 38.000 sterren op GitHub.

Er bestaan andere opties. Dokploy bijvoorbeeld gaat verder richting een volledig zelfgehoste PaaS en regelt apps, databases en SSL voor je. Portainer blijft dichter bij gewone Docker: dezelfde Compose-bestanden, dezelfde images, alleen met een UI erbovenop.

Als je in tmux woont en één app draait, sluit dan deze tab. Je zit goed. Als je vier zelfgehoste apps draait en je deze maand twee keer hebt gegoogeld: “Wat waren Docker-logs ook alweer?”, blijf dan lezen.

Hoe Groot Moet Een VPS Zijn Om Docker En Portainer Te Draaien?

Portainer publiceert geen RAM-minimum. Een 4 GB VPS kan geschikt zijn voor een kleine stack, maar bepaal de grootte op basis van de gecombineerde vereisten van het besturingssysteem, de Docker-daemon en elke container die je wilt draaien.

De eigen pagina met vereisten van Portainer zegt verrassend weinig over RAM: de Server wordt geleverd als een lichtgewicht container, en de prestatierichtlijnen in de documentatie gaan over opslag (daarover hieronder meer). De echte RAM-rekensom zijn je werklasten — reken het besturingssysteem, de Docker-daemon en elke container die je wilt draaien mee. Reken ook schijfruimte in voor logs: de standaard logdriver json-file van Docker doet geen logrotatie, dus de logs van een spraakzame container kunnen na verloop van tijd flink wat schijfruimte opslokken. De logdocumentatie van Docker raadt in plaats daarvan de driver local aan. Zodra Docker is geïnstalleerd (stap 2 hieronder), maak je de configuratiemap van Docker aan, stel je de logdriver local in en herstart je Docker: voer sudo install -d -m 0755 /etc/docker uit, daarna printf '%s\n' '{ "log-driver": "local" }' | sudo tee /etc/docker/daemon.json > /dev/null en daarna sudo systemctl restart docker. Doe dit voordat je langlopende apps implementeert: de driver local roteert logs standaard, en de wijziging geldt alleen voor containers die daarna worden aangemaakt.

Zo ziet dat er bij echte werklasten uit:

Tabel met VPS-dimensionering voor Docker en Portainer: één kleine app-stack met Ghost, n8n, Postgres en een reverse proxy past op DreamHost Stack 4 met 4 GB RAM; grotere plannen worden gedimensioneerd op basis van gedocumenteerde werklastvereisten

Het rekenblad is simpele optelling: zoek de gedocumenteerde RAM-vereiste op voor elke app die je wilt draaien, tel het besturingssysteem en de Docker-daemon erbij op en houd daarna ruimte over voor gebruikspieken. Portainer zelf publiceert geen RAM-minimum, dus het zijn de apps — niet de UI — die de box vullen.

Bij DreamHost is onze VPS Hosting beschikbaar in vier op RAM gebaseerde Stack-plannen (Stack 4, 8, 16 en 32). Het instapplan Stack 4 (2 vCPU’s, 4 GB RAM, 75 GB NVMe SSD, volledige root-toegang) is een logische keuze voor een kleine Docker-host. Bij maandelijkse facturering kost het $8,99/maand voor de eerste 3 maanden en wordt het daarna automatisch verlengd tegen $15,99/maand (per augustus 2026; de volledige termijn plus belastingen wordt bij het afrekenen in rekening gebracht — actuele prijzen staan altijd op de Docker + Portainer VPS-pagina).

Als je twijfelt of self-hosting de moeite waard is, is Stack 4 de grootte om mee te beginnen: groot genoeg om erachter te komen, klein genoeg dat je niet betaalt voor ruimte die je niet gebruikt. Als je rekenblad eroverheen groeit, kun je naar een hoger plan overstappen en verhuist je omgeving mee — maar let op: terugschalen naar een kleinere Stack wordt momenteel niet ondersteund, dus begin bewust klein.

Een opmerking over opslag: het datavolume van Portainer bevat zijn eigen database en configuratie, plus een kloon van elke Git-repository waaruit je stacks implementeert — de documentatie van Portainer waarschuwt dat grote of meerdere repo’s veel schijfruimte kunnen innemen. De prestatierichtlijnen in de documentatie gaan over opslag, niet over geheugen: prestaties op SSD-niveau (≈3,5 MB/s, 30.000 IOPS of meer, minder dan 10ms schrijflatentie) noemen ze ideaal. Stack 4 bevat 75 GB NVMe SSD-opslag.

Hoe Installeer Je Docker En Portainer Op Een VPS?

Portainer.io-formulier voor de eerste installatie om een beheerdersaccount met gebruikersnaam aan te maken

Het zijn zeven stappen. De download- en installatietijd hangt af van je VPS en je netwerkverbinding. De commando’s in stap 2 tot en met 6 zijn geschreven voor Ubuntu en kun je op een schone server in volgorde plakken; de enige plek waar een commando een waarde nodig heeft die alleen jij kent (je eigen IP-adres, in stap 4), wordt in die stap aangegeven. (Wil je de hele lijst overslaan? De app-bibliotheek van DreamHost VPS Hosting bevat een Docker + Portainer-image waarin beide vooraf zijn geconfigureerd.)

1. Kies een Linux-distributie

Deze gids gebruikt Ubuntu 24.04 LTS. Docker Engine ondersteunt Ubuntu 22.04, 24.04 en 26.04 LTS (per augustus 2026). Ubuntu is een van de vooraf geïnstalleerde besturingssystemen op DreamHost VPS Hosting.

Debian en distributies uit de RHEL-familie zoals AlmaLinux werken ook, maar ze hebben hun eigen installatiepaden in de documentatie van Docker, en de commando’s hieronder zijn niet zomaar over te nemen. Nog een extra aandachtspunt bij de RHEL-familie: de installatiedocumentatie van Portainer gaat ervan uit dat SELinux is uitgeschakeld en zegt dat je --privileged aan Docker moet meegeven bij het implementeren van Portainer als je SELinux ingeschakeld nodig hebt. Als die zin je niets zei, gebruik dan Ubuntu.

Weet je niet welke versie van Ubuntu je gebruikt? Ontdek vijf manieren om dit te controleren.

2. Installeer Docker vanuit de officiële repository

Doe geen apt install docker.io, en installeer Docker ook niet via snap — de officiële installatiedocumentatie van Docker noemt docker.io bij de onofficiële pakketten die je moet verwijderen voordat je Docker Engine installeert, en de installatiedocumentatie van Portainer waarschuwt dat het snap-pakket compatibiliteitsproblemen kan veroorzaken.

Verwijder eerst eventuele conflicterende pakketten. Dit is het verwijdercommando uit de huidige installatiedocumentatie van Docker, en op een schone server vindt het meestal niets om te verwijderen — de documentatie merkt op dat apt kan melden dat je geen van deze pakketten hebt geïnstalleerd:

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)

Voeg vervolgens de GPG-sleutel van Docker toe (elke regel hieronder is een apart commando):

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Voeg daarna de apt-repository van Docker toe. Dit schrijft de repository-definitie naar /etc/apt/sources.list.d/docker.sources — het bestand dat de installatiedocumentatie van Docker gebruikt — waarbij je Ubuntu-versie en CPU-architectuur automatisch worden ingevuld:

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update

Installeer tot slot Docker Engine en de Compose-plugin in één keer:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. Controleer of Docker draait

Voer sudo docker run hello-world uit.

Als je het bericht “Hello from Docker!” niet krijgt, repareer dan de daemon voordat je Portainer eroverheen legt.

4. Koppel UFW aan Docker voordat je Portainer start

Hier is het deel dat de meeste gidsen aan het einde zetten, als het te laat is: wanneer Docker een poort publiceert, wordt het verkeer ernaartoe omgeleid voordat het de ketens bereikt die UFW filtert, waardoor een gepubliceerde poort vanaf het openbare internet bereikbaar is, zelfs als UFW zegt dat hij geweigerd wordt. (De volledige uitleg staat hieronder.) Zodra je Portainer start, is poort 9443 openbaar — precies tijdens het vijfminutenvenster waarin degene die er als eerste bij is het admin-account mag aanmaken. Regel de firewall dus eerst.

Als UFW nog niet actief is, sta dan SSH toe en schakel het in. (Als je SSH op een aangepaste poort draait, sta dan die poort toe in plaats van 22, anders is dit de stap waarin je jezelf buitensluit.)

sudo ufw allow 22/tcp
sudo ufw enable

Installeer daarna chaifeng/ufw-docker, een tool van derden die de benodigde regels toevoegt aan /etc/ufw/after.rules, zodat verkeer naar de gepubliceerde poorten van Docker via de DOCKER-USER-keten wordt gefilterd. De commando’s hieronder pinnen de release 251123 van het project (november 2025) in plaats van te halen uit de steeds veranderende master-branch, en ze gebruiken curl, dat je al in stap 2 hebt geïnstalleerd:

sudo curl -fsSL -o /usr/local/bin/ufw-docker \
  https://github.com/chaifeng/ufw-docker/raw/251123/ufw-docker
sudo chmod +x /usr/local/bin/ufw-docker
sudo ufw-docker install
sudo ufw reload

Na het herladen worden gepubliceerde containerpoorten via UFW gefilterd. Als je beleid voor gerouteerd verkeer inkomende verbindingen weigert en geen bestaande regel de poort toestaat, blijven openbare verbindingen geblokkeerd totdat je ze expliciet toestaat. (Het ufw-docker-project merkt op dat een herstart van de server helpt als de regels na een herstart van UFW niet werken.)

Keur nu vooraf je eigen toegang tot de Portainer UI goed. Vervang YOUR_HOME_IP door het openbare IP-adres waarvandaan je gaat browsen:

sudo ufw route allow proto tcp from YOUR_HOME_IP to any port 9443

Met deze regel actief voordat Portainer start, is IPv4-verkeer naar de UI toegestaan vanaf jouw IP en van niemand anders — ook tijdens het venster voor de eerste admin. De regel zoals hij hier staat dekt alleen IPv4. Volgens de documentatie van ufw-docker ondersteunt de tool ook IPv6-netwerken en werkt hij /etc/ufw/after6.rules bij wanneer nodig, maar neem dat niet blind aan: als je VPS reageert op een openbaar IPv6-adres, voer dan de test van buitenaf uit de firewallsectie ook via IPv6 uit voordat je erop vertrouwt. Het nadeel: de meeste thuisverbindingen veranderen af en toe van IP, dus misschien moet je de regel later bijwerken. Als dat je stoort, is een VPN vóór de UI het nettere antwoord op lange termijn (behandeld in de sectie over beveiligen).

5. Maak een persistent volume voor de gegevens van Portainer

Voer vervolgens sudo docker volume create portainer_data uit.

Het bewaren van de database van Portainer op een Docker-volume (niet in de container) betekent dat een upgrade van Portainer je configuratie niet zal wissen.

6. Start Portainer Community Edition

Dit is het commando uit de Linux-installatiedocumentatie van Portainer, min één vlag: de officiële versie publiceert ook poort 8000, een TCP-tunnel die alleen nodig is als je later externe omgevingen via Edge Agents verbindt. Een installatie op één host heeft die niet nodig, dus laten we hem weg:

sudo docker run -d \
  -p 9443:9443 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:lts

Laten we dat regel voor regel bekijken:

  • -d draait het op de achtergrond.
  • -p 9443:9443 is de Portainer web UI op HTTPS — de poort die je in stap 4 voor je IP hebt toegestaan.
  • --restart=always start Portainer opnieuw na een reboot.
  • -v-vlaggen zijn de socketbinding en het persistente volume uit stap 5.
  • :lts zet je vast op de Long Term Support-releaselijn van Portainer — de tag die de eigen installatiedocumentatie van Portainer gebruikt.

7. Open de UI en maak je admin-account aan

Richt je browser op https://YOUR_VPS_IP:9443 (vanaf het IP-adres dat je in stap 4 hebt toegestaan).

Klik door de waarschuwing van het zelfondertekende certificaat. Je komt op het scherm “de eerste administratorgebruiker aanmaken”. Kies een gebruikersnaam die niet admin is, stel een sterk wachtwoord in en bewaar het op een echte plek. En… je bent binnen!

Waarom Gaf Portainer Me Net Een Time-out?

Omdat Portainer precies vijf minuten wacht tot iemand het claimt bij de eerste installatie. Als niemand dat doet, sluit het de deur.

Woordelijk uit de eigen FAQ van Portainer:

“Als veiligheidsmaatregel wacht Portainer, wanneer het voor het eerst geïnstalleerd wordt, 5 minuten op het aanmaken van een administratorgebruiker (onderdeel van de eerste installatie). Als er binnen die 5 minuten geen gebruiker wordt aangemaakt, stopt de Portainer Server met luisteren naar verzoeken.“

Vertaling: als je stap 6 hebt besteed aan het maken van een broodje, weigert je installatie nu met je te praten — en je hebt niets verkeerd gedaan.

De oplossing is eenvoudig. Voer sudo docker restart portainer uit.

Dat start de container opnieuw op, geeft je een nieuw venster van vijf minuten en zet je op het scherm voor het aanmaken van een beheerder. Herhaal indien nodig. Welkom bij self-hosting.

Als je de installatie scriptmatig uitrolt voor een vloot (Ansible, Terraform, een implementatiepijplijn), accepteert Portainer een --admin-password-file-vlag die de admin-gebruiker vanuit een bestand aanmaakt wanneer de container voor het eerst start — zodat er geen scherm voor het aanmaken van een admin is om tegen de klok te halen. De CLI-configuratiedocumentatie van Portainer behandelt de syntaxis. Voor een eenmalige VPS-installatie is de herstarttruc prima.

Hoe Voorkom Je Dat Docker Je Firewall Omzeilt?

Vergelijking van Docker-firewall: zonder DOCKER-USER-regel is onbeperkte toegang tot containers mogelijk

Dat heb je al gedaan, in stap 4. Hier lees je wat er echt is gebeurd, hoe je bewust poorten opent en hoe je bewijst dat het werkt.

Het probleem: wanneer je de poort van een container publiceert met -p 80:80, is die poort bereikbaar vanaf het openbare internet, zelfs als ufw status poort 80 als geweigerd toont. Volgens de packet-filtering-documentatie van Docker: “Docker routeert containerverkeer in de nat-tabel, wat betekent dat pakketten worden omgeleid voordat ze de INPUT- en OUTPUT-ketens bereiken die ufw gebruikt.”

UFW is niet kapot. Het staat gewoon in de verkeerde gang.

De oplossing waar Docker zelf naar verwijst is de DOCKER-USER iptables-keten — een keten die Docker speciaal aanmaakt voor door gebruikers gedefinieerde regels en die wordt verwerkt vóór de regels in de eigen ketens van Docker. Het ufw-docker-script dat je in stap 4 hebt geïnstalleerd, koppelt UFW aan die keten door een regelblok (tussen de markeringen # BEGIN UFW AND DOCKER en # END UFW AND DOCKER) toe te voegen aan /etc/ufw/after.rules, zodat het samen met de rest van je UFW-configuratie wordt geladen.

Om bewust een containerpoort voor het publiek te openen — bijvoorbeeld een webapp op containerpoort 80 — gebruik je een route-regel:

sudo ufw route allow proto tcp from any to any port 80

Eén valkuil waar de ufw-docker-documentatie op wijst: de regel gebruikt de containerpoort, niet de hostpoort. Als je hebt gepubliceerd met -p 8080:80, is de regel hierboven (poort 80) de juiste, niet poort 8080.

Om van buitenaf te verifiëren, test je vanaf een netwerk dat niet op je toegestane lijst staat — een hotspot op je telefoon werkt. Dit zou een time-out moeten geven in plaats van de inlogpagina van Portainer te tonen:

curl -k --max-time 5 https://YOUR_VPS_IP:9443

# For IPv6, enclose the address in square brackets:
curl -k --max-time 5 'https://[YOUR_VPS_IPV6]:9443'

Voer hetzelfde commando uit vanaf het IP dat je in stap 4 hebt toegestaan, en je zou HTML terug moeten krijgen. Dat UFW “denied” zegt, is een bewering; een time-out vanaf een vreemd netwerk is bewijs.

Om alles ongedaan te maken, voer je sudo ufw-docker uninstall uit, wat volgens de documentatie van het project je UFW-configuratie herstelt en de geïnstalleerde bestanden verwijdert, en daarna sudo ufw reload. Je kunt ook het blok tussen de markeringen # BEGIN UFW AND DOCKER en # END UFW AND DOCKER in /etc/ufw/after.rules met de hand verwijderen en UFW herladen.

Deze valkuil vangt scherpe engineers op persoonlijke machines en productieservers evengoed: UFW zegt het een, het openbare internet zegt iets anders, en de waarheid staat in iptables. Als je liever hebt dat Portainer helemaal geen openbare poort heeft, zet er dan een VPN-tunnel voor zoals WireGuard.

Wat Moet Je Beveiligen Direct Na Het Eerste Inloggen?

Je bent binnen. Vijf dingen die de moeite waard zijn om te doen voordat je dat browsertabblad sluit — de eerste vier komen rechtstreeks uit de eigen beveiligingsgids van Portainer:

  • Zet Force HTTPS only aan. De installatie in deze gids publiceert alleen poort 9443, dus er is sowieso geen HTTP-poort blootgesteld. Door de schakelaar Force HTTPS only onder Settings → SSL Certificate om te zetten, leg je dat vast: volgens de instellingendocumentatie van Portainer schakelt dit het luisteren op de oude HTTP-poort (9000) volledig uit, zodat een toekomstige herimplementatie die -p 9000:9000 toevoegt geen onversleuteld pad kan heropenen.
  • Vervang het zelfondertekende certificaat. Upload een certificaat dat je hebt gegenereerd, of plaats Portainer achter een NGINX reverse proxy met een Let’s Encrypt-certificaat. Na de eerste dag wordt het telkens doorklikken van de browserwaarschuwing een gewoonte waar je spijt van krijgt.
  • Gebruik een echte beheerdersnaam. Als je de standaard gebruikersnaam admin gebruikt, hoeft een aanvaller één inloggegeven minder te achterhalen. Kies iets dat specifiek voor jou is.
  • Beperk de UI tot een VPN. Portainer achter een WireGuard-VPN draaien is het patroon waar de beveiligingsgids van Portainer naar verwijst. Een 9443 die beperkt is tot je bron-IP (stap 4) is goed. Een 9443 die alleen bereikbaar is op een privénetwerk is beter.
  • Audit de Docker-socketkoppeling. Alles met toegang tot /var/run/docker.sock bestuurt de Docker-daemon, en daarmee de host. Mount de socket niet zomaar in andere containers. Elke extra koppeling is een nieuw pad naar de host. Als een container beweert de socket nodig te hebben, vraag dan waarom — en overweeg een socketproxy als het antwoord “voor monitoring” is.

Hoe Gebruik Je Portainer Dagelijks?

De beloning voor het installeren van Portainer is de dag dat je stopt met inloggen via SSH om een ondeugende container te herstarten, en in plaats daarvan op een knop begint te klikken. De grotere beloning is stackbeheer.

Een Portainer-stack is een multi-container app gedefinieerd door een Docker Compose-bestand. Portainer kan ondersteunde Docker Compose-configuraties als stacks implementeren via vier routes die in de officiële stacks-documentatie staan:

  • Plak Compose in de webeditor
  • Upload een Compose-bestand
  • Wijs Portainer naar een Git-repository
  • Implementeer vanuit een aangepaste template
Portainer.io-dashboard met Stack Details, containertabel, logs en statistieken

Het Git-pad is het pad dat telt. Je wijst Portainer naar een publieke of geauthenticeerde repo en een pad naar docker-compose.yml, en zet daarna GitOps-updates aan. Portainer controleert de repo met een ophaalinterval dat jij instelt, of geeft je een webhook-URL om toe te voegen aan je Git-host (bijvoorbeeld getriggerd vanuit een GitHub Action). Wanneer het Compose-bestand upstream verandert, haalt Portainer het op en implementeert het automatisch opnieuw. En ja, dit werkt in Community Edition — op de pagina met stacks-documentatie heeft alleen de optie voor volumes met relatieve paden het Business Edition-label.

Dat is de zelfgehoste versie van “deploy on push” zonder dat je een PaaS voor dat voorrecht hoeft te betalen.

De kleinere dagelijkse voordelen tellen ook mee. Denk aan logs in een paneel in plaats van ze via de opdrachtregel te volgen, herstarts met één klik, het opnieuw opbouwen van een stack met een knop, en resourcegrafieken die je in drie seconden kunt scannen in plaats van Docker stats uit te voeren.

Als je later externe hosts toevoegt via Edge Agents, komt poort 8000 weer in beeld — de FAQ hieronder behandelt de herimplementatie en de firewallregel.

Hoe Maak Je Een Back-up Van Portainer En Je Containers?

Een volume is persistentie, geen back-up. Het volume portainer_data uit stap 5 overleeft containerupgrades, maar staat op dezelfde schijf als al het andere — dus een echt back-upplan bestaat uit drie delen, en alle drie verlaten de VPS.

1. De eigen configuratie van Portainer. Ga in de UI naar Settings → Back up Portainer, laat de standaardoptie Download backup file staan en klik op Download backup. Volgens de instellingendocumentatie van Portainer downloadt dat een tar.gz van alles wat Portainer op zijn /data-volume opslaat, optioneel versleuteld met een wachtwoord, en dat archief is alles wat je nodig hebt om Portainer te herstellen. De documentatie is net zo duidelijk over de reikwijdte: het maakt alleen een back-up van de Portainer-configuratie, niet van de containers, stacks of volumes die je hebt geïmplementeerd. (Geplande back-ups naar S3 bestaan, maar alleen in Business Edition — zet in CE een terugkerende herinnering in je agenda.)

2. Je applicatiegegevens. De volumedocumentatie van Docker noemt benoemde volumes de voorkeursmanier om containergegevens persistent te bewaren, en makkelijker te back-uppen of te migreren dan bind mounts. Een alleen-lezen mount voorkomt alleen dat de back-upcontainer schrijft — de app zelf kan halverwege het archiveren nog steeds naar het volume schrijven en je een inconsistente kopie geven. Stop dus eerst de container van de app (sudo docker stop myapp), of gebruik het eigen ondersteunde back-upmechanisme van de app. Mount het volume daarna alleen-lezen in een wegwerpcontainer, pak het in met tar en start de app daarna weer (vul je eigen namen in):

sudo docker run --rm \
  -v myapp_data:/source:ro \
  -v "$PWD":/backup \
  alpine tar czf /backup/myapp_data.tgz -C /source .

Gebruik voor databases liever de eigen dumptool van de database (pg_dump, mysqldump) dan live databestanden te kopiëren, zodat je geen bestand archiveert dat halverwege een schrijfactie is. Verstuur de archieven daarna volgens een schema van de box af — met rsync of scp naar een andere machine, of push ze naar objectopslag. Een back-up die op de schijf staat waarvan hij een back-up maakt, verdwijnt samen met die schijf.

3. Je Compose-bestanden en secrets. Als je stacks vanuit Git implementeert, staan de Compose-bestanden al buiten de host. Wat Git niet bevat, is alles wat je nooit hebt gecommit: .env-bestanden, API-sleutels en wachtwoorden die je bij het implementeren hebt opgegeven. Mappen die via een bind mount zijn gekoppeld, vallen ook buiten de volumeback-up hierboven. Inventariseer die apart en maak er versleuteld een back-up van.

Test daarna het herstel, voordat je het nodig hebt. Volgens de documentatie van Portainer werkt het herstellen van een configuratie alleen op een nieuwe instantie: implementeer een nieuwe Portainer-container met een leeg datavolume (een wegwerp-VPS of je laptop is prima), kies Restore Portainer from backup tijdens de eerste installatie en controleer of je kunt inloggen met je oude inloggegevens en je stackdefinities ziet. Die oefening dekt alleen deel 1 — de configuratie van Portainer. Deel 2 en 3 hebben per app hun eigen test nodig: herstel een archief in een nieuw volume, start de app ermee en controleer of de gegevens er echt staan. Een ongeteste back-up is niet meer dan hoop met een bestandsnaam.

Wat Kost Portainer? (En Wanneer Is Gratis Niet Meer Gratis?)

Portainer is dubbel gratis. Community Edition is gratis en open source (zlib-licentie), zonder dat je een licentiesleutel nodig hebt. En Portainer Business Edition is voor altijd gratis voor maximaal 3 nodes: alle Business-functies, geen tijdslimiet, geen creditcard. Je registreert je voor een gratis licentiesleutel in plaats van te betalen.

EditieKostenNodesHet beste voor
Community EditionGratis, open-sourceGeen licenties per nodePersoonlijke projecten, homelab, zelf-hosters met één VPS
Business Edition — 3 nodes gratisGratis, zonder tijdslimietTot 3Kleine homelabs die Business-functies zoals RBAC willen
Home & Student$155/jaarTot 15Grotere homelabs en studenten; strikt niet-commercieel
Business StarterVanaf $105/maand5, 10 of 15Kleine teams die echte infrastructuur beheren (communityondersteuning)
Business ScaleVanaf $209/maand5 tot 35Groeiende teams die 9×5-ondersteuning nodig hebben
EnterpriseOfferteOp maatBehoefte aan compliance en ondersteuning met prioriteit

De prijzen komen van de prijspagina van Portainer (per augustus 2026); Starter en Scale vereisen een jaarlijkse verbintenis.

Welke moet je dan kiezen? Voor één VPS met één beheerder: Community Edition. Die is open source, vereist geen registratie en doet alles in deze gids, inclusief Git-implementaties. Als je op rollen gebaseerde toegangscontrole (RBAC) wilt voor een tweede gebruiker, of al twee of drie machines draait, kies dan in plaats daarvan de gratis Business-tier voor 3 nodes — het is dezelfde software met de Business-functies ontgrendeld, gratis zolang je op drie nodes of minder blijft. De betaalde plannen hebben pas zin als je echte aantallen nodes beheert binnen een team — en controleer de ondersteuningsregel voordat je aanneemt dat betaald ook ondersteund betekent: per augustus 2026 vermeldt de prijspagina van Portainer communityondersteuning bij het Starter-plan, 9×5-ondersteuning met reactie op de volgende werkdag vanaf het Scale-plan, en ondersteuning met prioriteit bij Enterprise.

Moet Je Portainer Toevoegen Of Overslaan?

Hier is het eerlijke antwoord in twee zinnen:

✅ Als je deze server gaat delen, vanuit Git gaat implementeren, of over een jaar meer dan drie containers draait, installeer dan Portainer terwijl de host nieuw is en je gewoonten zich er nog omheen vormen.

❌ Als je één rustige app draait en je je prettig voelt in de terminal, zul je de UI die je niet hebt geïnstalleerd niet missen.

De echte vraag is niet Portainer versus geen Portainer. Het gaat erom of self-hosting überhaupt de juiste keuze voor je is — en dat heb je beantwoord toen je deze tab opende.

Een 4 GB VPS, Docker en Portainer CE zijn genoeg om echt te beginnen met self-hosting: kies je apps, tel hun gedocumenteerde vereisten op en laat het rekenblad — niet het verlanglijstje — bepalen wanneer de box moet groeien.

Dat is geen slechte deal.

Veelgestelde Vragen Over Docker En Portainer

Kun je Docker op een VPS draaien?

Ja. Een VPS met root-toegang is een van de meest flexibele plekken om Docker te draaien: je installeert Docker Engine op het Linux-besturingssysteem van de server, en elke app draait in zijn eigen container. Het onderscheid waar mensen over struikelen, is dat de VPS de gehuurde virtuele server is, terwijl Docker de software is die je erop draait om applicaties in containers te isoleren. Elke VPS met root-toegang en genoeg RAM voor je containers werkt — DreamHost VPS Hosting biedt zelfs een vooraf geïnstalleerde Docker + Portainer-image.

Waarvoor wordt Portainer gebruikt?

Portainer wordt gebruikt voor het beheren van Docker-, Docker Swarm- en Kubernetes-containers via een webinterface. Het draait zelf als een Docker-container, maakt verbinding met de Docker-socket van de host en geeft je een browserweergave en controle over elke andere container op de host — het starten en stoppen van containers, het implementeren van multi-container stacks, het bekijken van logs en het beheren van gebruikerstoegang zonder via SSH in te loggen.

Heb ik Portainer nodig als ik Docker heb?

Nee, je hebt Portainer niet nodig om Docker te gebruiken. Docker werkt volledig vanuit de terminal, en veel zelf-hosters installeren nooit een UI erbovenop.

Portainer bewijst zijn waarde als je met meer dan twee of drie containers jongleert, toegang deelt met iemand die niet in een terminal leeft, of stack-updates implementeert vanuit een Git-repository. Sla het over als je één of twee stabiele containers draait en je vertrouwd bent met Docker Compose.

Op welke poort draait Portainer?

Portainer biedt zijn web-UI standaard aan via HTTPS op poort 9443. Het officiële installatiecommando in de Linux-installatiedocumentatie van Portainer publiceert ook poort 8000, een TCP-tunnel die alleen door Edge Agents wordt gebruikt als je later externe Docker-hosts verbindt — die is optioneel, en daarom laat de installatie op één host in deze gids de vlag -p 8000:8000 helemaal weg.

Hoeveel RAM heeft Portainer nodig?

De huidige systeemvereisten van Portainer noemen geen RAM-minimum — de Server draait als een lichtgewicht container, en de prestatierichtlijnen in de documentatie gaan over schijfopslag, niet over geheugen. Bepaal je RAM door de gedocumenteerde vereisten van het besturingssysteem, de Docker-daemon en elke app die je gaat draaien bij elkaar op te tellen, en houd daarna ruimte over voor pieken.

Bij DreamHost wordt ons instapplan voor VPS Hosting, Stack 4, geleverd met 4 GB RAM — een startpunt voor een kleine stack van containers voor zijprojecten zoals Ghost of n8n. Of 4 GB genoeg is, hangt af van de apps die je echt draait; als de rekensom eroverheen groeit, kun je overstappen naar een groter Stack-plan.

Is Portainer gratis?

Ja, zelfs dubbel. Portainer Community Edition is gratis en open-source, zonder dat je een licentiesleutel nodig hebt. Portainer Business Edition (die functies toevoegt zoals op rollen gebaseerde toegangscontrole) is ook gratis voor maximaal 3 nodes, met alle functies en zonder tijdslimiet; je registreert je voor een gratis licentiesleutel in plaats van te betalen. Boven drie nodes begint de Business-prijs bij $105/maand op het Starter-plan volgens de prijspagina van Portainer (per augustus 2026), en een Home & Student-licentie van $155/jaar dekt niet-commerciële homelabs tot 15 nodes.

Kan Portainer meerdere Docker-hosts beheren?

Ja, Portainer beheert meerdere Docker-hosts via Agents en Edge Agents. De standaard Agent luistert op elke externe host op poort 9001; Edge Agents maken in plaats daarvan een uitgaande verbinding met tunnelpoort 8000 van de Portainer Server, en volgens de documentatie over vereisten van Portainer hebben ze zelf geen open inkomende poorten nodig. Voor een zelf-hoster met één VPS is niets daarvan nodig — en daarom laat de installatie in deze gids de vlag voor poort 8000 weg die het officiële commando van Portainer bevat. Op de dag dat je een externe omgeving via een Edge Agent verbindt, implementeer je Portainer opnieuw met -p 8000:8000 erbij, en sta je daarna containerpoort 8000 toe via UFW vanaf het openbare uitgaande IP van elke Edge Agent, waarbij je hier EDGE_AGENT_IP vervangt: sudo ufw route allow proto tcp from EDGE_AGENT_IP to any port 8000.

Omzeilt Docker UFW op een VPS?

Ja, Docker omzeilt standaard UFW omdat Docker het containerverkeer beheert op de iptables NAT-laag, die vóór de INPUT- en OUTPUT-ketens van UFW zit.

Volgens de packet-filtering-documentatie van Docker “worden pakketten omgeleid voordat ze de INPUT- en OUTPUT-ketens bereiken die ufw gebruikt.” De oplossing is om je regels toe te voegen aan de DOCKER-USER iptables-keten, en een communitytool om UFW daaraan te koppelen is chaifeng/ufw-docker — in stap 4 van deze gids geïnstalleerd, nog voordat Portainer ooit start.

VPS

Beheer je volledige stack. Apps, AI, databases en meer.

Houd al je inloggegevens en gesprekken op een server die jij beheert, met ingebouwde NVMe-snelheid en ongelimiteerde bandbreedte.

Bekijk VPS-hostingabonnementen