Podman Compose: een rootless alternatief voor Docker Compose
Podman Compose is een op Python gebaseerde tool die Docker Compose-bestanden leest en multi-containerapplicaties draait met de rootless, daemonloze architectuur van Podman voor security-gerichte ontwikkelomgevingen.
Stel, je hebt een docker-compose.yml-bestand dat al maanden werkt. Maar nu moet je Podman gebruiken in plaats van Docker, en je weet niet zeker of je het bestand moet bewerken of helemaal opnieuw moet beginnen. Je lokale ontwikkelomgeving hangt af van dat Compose-bestand, en je hele setup opnieuw opbouwen is niet bepaald iets waar je tijd voor hebt.
Het goede nieuws is dat Podman Compose je in staat stelt om bestaande Compose-bestanden met Podman in plaats van Docker te draaien. Het is een op Python gebaseerde compatibiliteitslaag die je Compose-definities vertaalt naar Podman-commando's, zodat je het multi-containerworkflow kunt blijven gebruiken dat je gewend bent.
In dit artikel laat ik je zien wat Podman Compose is, hoe je het installeert en hoe je er je eerste multi-containerapplicatie mee draait. Als sommige concepten nieuw voor je zijn, schrijf je dan in voor onzeContainerization and Virtualization Concepts-cursus om de basis onder de knie te krijgen.
Wat is Podman Compose?
Podman Compose is een op Python gebaseerde tool die je docker-compose.yml-bestanden leest en ze vertaalt naar Podman-commando's.
Je schrijft nog steeds een standaardDocker Compose-bestand met services, netwerken en volumes. Podman Compose parseert dat bestand en voert de equivalente podman-commando's uit om je containers te starten. Het doet het vertaalwerk voor je, zodat je de Compose-syntaxis niet handmatig naar Podman-CLI-commando's hoeft om te zetten.
Het is belangrijk om te benadrukken dat Podman Compose geen drop-in vervanging is voor Docker Compose.
Het is een compatibiliteitslaag. Sommige Docker Compose-functies werken direct, andere vragen om aanpassingen, en een paar werken helemaal niet. De tool streeft naar compatibiliteit, maar reproduceert niet elk afzonderlijk gedrag van Docker Compose.
Nog een manier om ernaar te kijken: Docker Compose praat rechtstreeks met de Docker-daemon. Podman Compose praat met de Podman-CLI, die vervolgens containers beheert zonder daemon. Het eindresultaat lijkt op elkaar, maar de onderliggende werking is anders.
Dit betekent dat je de meeste van je bestaande Compose-bestanden kunt hergebruiken, maar je moet wel begrijpen waar de verschillen zitten.
Waarom Podman Compose gebruiken?
Met Podman Compose kun je multi-containerapplicaties draaien zonder Docker te installeren.
Vergeleken met Docker krijg je standaard rootless containers. Podman draait containers zonder rootrechten. Simpel gezegd: er is minder risico als een container gecompromitteerd raakt. Docker vereist dat de daemon als root draait, zelfs als je daarbovenop rootless containers gebruikt.
Dit maakt Podman Compose geschikter voor omgevingen met focus op veiligheid. Werk je op streng afgeschermde Linux-servers of in omgevingen waar een daemon op rootniveau niet is toegestaan, dan biedt Podman Compose de multi-containerworkflow die je nodig hebt.
Het is ook handig voor ontwikkeling en testen. Je kunt lokale omgevingen opzetten, containerconfiguraties testen en je Compose-bestanden valideren zonder Docker te installeren. Ideaal voor lichtgewicht deployments waarbij je geen volledige orkestratie nodig hebt.
Maar het is goed om te beseffen dat Podman Compose niet in elke situatie ideaal is.
Voor productie op schaal wil je eerder Kubernetes of Docker Swarm. Podman Compose heeft ook zwakkere ondersteuning op macOS en Windows vergeleken met Linux, waardoor cross-platform ontwikkeling minder soepel is. En als je team al in het Docker-ecosysteem heeft geïnvesteerd met eigen plugins en tooling, betekent overstappen op Podman Compose dat je delen van die workflow opnieuw moet opbouwen.
Kortom: gebruik Podman Compose wanneer je rootless containers nodig hebt, security-first omgevingen, of een ontwikkelsetup zonder Docker.
Podman Compose installeren
Podman Compose werkt het best op Linux, waar Podman native draait.
Je kunt het op macOS en Windows installeren, maar dan moet je Podman eerst in een virtuele machine draaien. Dat voegt complexiteit toe en is niet zo soepel als op Linux. Reken op macOS of Windows op extra stappen en mogelijke netwerkquirks.
Installeren op Linux
De makkelijkste manier om Podman Compose te installeren is via pip.
Dit installeert de nieuwste versie van PyPI. Je hoeft je geen zorgen te maken over Python-versiebeheer: als je Python 3 hebt geïnstalleerd, zit je goed.
Sommige Linux-distributies leveren Podman Compose ook via hun repositories. Op Fedora, RHEL en CentOS kun je gebruiken:
Versies via de pakketmanager lopen vaak achter op PyPI, dus mogelijk krijg je niet meteen de nieuwste features.
Installeren op macOS en Windows
Op macOS en Windows moet je eerst Podman Desktop opzetten of podman machine gebruiken om een Linux-VM te maken. Zodra die draait, installeer je Podman Compose met pip binnen die omgeving.
De eerste stap is dus verbinding maken met de machine:
Je zou het versienummer in de terminal moeten zien. Krijg je een "command not found"-fout, zorg er dan voor dat je Python-bin-directory in je PATH staat.
Dat is alles wat je nodig hebt om met Podman Compose aan de slag te gaan.
Een Compose-bestand draaien met Podman Compose
Je hebt Podman Compose geïnstalleerd—nu laat ik je zien hoe je een echte applicatie draait.
Een bestaand Docker Compose-bestand gebruiken
Podman Compose leest standaard docker-compose.yml-bestanden. Je hoeft niets te hernoemen of het formaat te wijzigen.
Hier is een eenvoudige FastAPI-applicatie gedefinieerd in een Compose-bestand:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return{"message":"Hello from FastAPI"}
@app.get("/health")
def health_check():
return{"status":"healthy"}Mogelijk gemaakt door
De meeste Docker Compose-functies werken out-of-the-box met Podman Compose. Dit omvat:
Images pullen en containers aanmaken
Poortkoppelingen
Volumemounts (zowel named volumes als bind mounts)
Omgevingsvariabelen
Basisnetwerken tussen services
Maar sommige functies vragen om aanpassingen. Als je Compose-bestand Docker-specifieke plugins, custom netwerkdrivers of geavanceerde build-argumenten gebruikt, moet je die secties waarschijnlijk wijzigen.
Podman Compose gaat ook anders met networking om—services resolven elkaar niet automatisch op basis van servicenamen zoals Docker Compose dat doet.
Dit pullt images, maakt containers aan en start alles wat in je Compose-bestand staat. Voeg -d toe om in detached-modus te draaien als je geen logs in je terminal wilt zien.
Podman-uitvoer
Je kunt de app nu openen op poort 8000 op je machine (of op een externe Ubuntu-instance zoals ik gebruik). Je ziet het volgende:
FastAPI-applicatie draaiend via Podman
Om draaiende services te stoppen, voer je het volgende uit:
De commando's spiegelen de syntaxis van Docker Compose, dus als je docker-compose al kent, voel je je meteen thuis.
Podman Compose vs. Docker Compose en anderen
Podman Compose en Docker Compose hebben hetzelfde doel, maar werken onder de motorkap anders. Laat me uitleggen hoe.
Rootless uitvoering
Docker Compose vereist dat de Docker-daemon als root draait. Zelfs wanneer je rootless containers configureert, heeft de daemon zelf verhoogde rechten nodig. Podman Compose draait standaard volledig zonder roottoegang. Je containers starten als jouw gebruiker, niet als een systeemservice, wat het aanvalsoppervlak verkleint en Podman Compose veiliger maakt in multi-useromgevingen.
Netwerkgedrag
Docker Compose maakt een standaard bridge-netwerk voor je services. Containers kunnen elkaar automatisch via servicenamen bereiken.
Podman Compose gebruikt pod-gebaseerde networking. Alle containers in je Compose-bestand worden gegroepeerd in één Podman-pod en delen dezelfde netwerk-namespace. Dit betekent dat containers via localhost communiceren in plaats van via servicenamen, wat Docker-gebruikers kan verrassen.
Als je app verwacht een database te bereiken op db:5432, moet je dat wijzigen naar localhost:5432 wanneer je met Podman Compose draait.
Pod-gebaseerde groepering
Docker Compose beheert individuele containers. Podman Compose maakt een pod, een door Kubernetes geïnspireerde groepering waarbij containers networking delen en opslag kunnen delen. Dit podmodel sluit Podman Compose aan op Kubernetes-patronen, waardoor migreren naar orkestratie later makkelijker wordt als je dat nodig hebt.
systemd-integratie
Podman integreert met systemd om containers als system services te beheren. Je kunt systemd unit-bestanden genereren van draaiende containers en ze beheren als elke andere Linux-service. Docker biedt geen native systemd-integratie op containerniveau.
Andere opties
Als Podman Compose niet bij je past, heb je deze alternatieven:
Native Podman met systemd laat je containers als services beheren, helemaal zonder Compose-bestanden
Kubernetes geeft je volledige orkestratie als je productie op schaal draait, al is het veel zwaarder dan Compose-achtige tools
Podman Compose zit ergens tussen simpele containercommando's en volledige orkestratie in. Het biedt je multi-containerworkflows zonder de daemonvereiste van Docker.
Netwerken en volumes in Podman Compose (wat is anders)
Docker-gebruikers die overstappen op Podman Compose klagen meestal over twee dingen: networking en volumes. In dit deel bespreek ik de verschillen.
Communicatie tussen services
In Docker Compose verbind je met andere services via hun servicenaam. Als je een webservice en een databaseservice genaamd db hebt, verbindt je app met db:5432.
Podman Compose plaatst alle services in één pod. Containers in dezelfde pod delen een netwerk-namespace, wat betekent dat ze allemaal localhost gebruiken. Je database-connection string verandert dus van db:5432 naar localhost:5432.
Dit overvalt veel mensen. Je app start, probeert te verbinden met db:5432 en faalt omdat die hostnaam niet resolveert. Je moet je connection strings of omgevingsvariabelen bijwerken om localhost te gebruiken.
Standaardnetwerken
Docker Compose maakt een bridge-netwerk voor je services. Elke container krijgt een eigen IP-adres op dat netwerk, en de DNS-resolver van Docker handelt naamresolutie van services af.
Podman Compose maakt standaard geen aparte netwerken aan. Het podmodel betekent dat containers op een lager niveau networking delen. Als je custom netwerken in je Compose-bestand definieert, probeert Podman Compose die aan te maken, maar het gedrag komt mogelijk niet exact overeen met Docker.
Gedrag van volumes en bind mounts
Volumes en bind mounts werken grotendeels hetzelfde tussen Docker Compose en Podman Compose. Je definieert ze in je Compose-bestand en Podman maakt ze aan.
Maar er is een permissievalkuil.
Podman draait standaard rootless, dus bestands-eigenaarschap en permissies kunnen anders uitpakken. Een bind mount die in Docker prima werkt kan in Podman permissiefouten geven omdat de containergebruiker niet overeenkomt met de UID van je hostgebruiker.
Je merkt ook dat volumelocaties verschillen. Docker slaat volumes op in /var/lib/docker/volumes/terwijl Podman ze opslaat in ~/.local/share/containers/storage/volumes/ voor rootless containers.
De oplossingen zijn makkelijk als je weet wat er gebeurt. Pas dus connection strings aan voor networking en controleer bestandsrechten bij volumeproblemen.
Veelvoorkomende beperkingen en valkuilen
Podman Compose werkt goed voor basisopstellingen met meerdere containers, maar heeft beperkingen die je moet kennen voordat je je erop vastlegt.
Niet-ondersteunde Compose-functies
Niet elke Docker Compose-functie vertaalt naar Podman Compose. Build-contexten met complexe argumenten falen vaak of gedragen zich anders. Docker Compose-plugins en -extensies werken helemaal niet. Functies zoals GPU-passthrough, geavanceerde health checks en sommige netwerkmodes werken niet of vereisen workarounds.
Als je Compose-bestand intensief gebruikmaakt van docker-compose.yml-versie 3.x-functies, reken dan op wat trial-and-error.
Netwerkverwachtingen die afwijken van Docker
Services communiceren niet via servicenamen—ze gebruiken in plaats daarvan localhost. Dit breekt apps die servicenamen hardcoderen in connection strings.
Aangepaste bridgenetwerken gedragen zich niet hetzelfde als in Docker. DNS-resolutie werkt anders door het podmodel.
Verwacht dat je wat tijd besteedt aan het updaten van configs en omgevingsvariabelen om aan het netwerkmodel van Podman te voldoen, maar dat is een eenmalige klus.
Platformbeperkingen op macOS/Windows
Podman Compose draait het best op Linux. Op macOS en Windows draai je alles binnen een Linux-VM, wat extra lagen complexiteit toevoegt. Bestandsynchronisatie tussen je host en de VM kan trager zijn. Networking tussen je host en containers vereist extra configuratie.
Als je team macOS- of Windows-machines gebruikt voor ontwikkeling, is Docker Compose meestal de soepelere optie.
Volwassenheid van de tool en hiaten in het ecosysteem
Podman Compose is jonger dan Docker Compose. De community is kleiner, dus antwoorden vinden op specifieke problemen kost meer speurwerk. Tools van derden en integraties worden eerst voor Docker gebouwd en pas daarna voor Podman (als dat al gebeurt). IDE-ondersteuning en GUI-tools lopen achter op die van Docker.
Je vindt minder Stack Overflow-antwoorden of GitHub-issues voor Podman Compose-problemen.
Deze beperkingen maken Podman Compose niet onbruikbaar, maar het is wel iets om over na te denken voordat je je erop vastlegt. Docker Compose-gebruikers hebben deze fricties helemaal niet.
Best practices voor het gebruik van Podman Compose
Zo voorkom je de meest voorkomende hoofdpijndossiers met Podman Compose.
Begin met eenvoudige Compose-bestanden. Migreer niet meteen je meest complexe Docker-setup. Begin met een applicatie met één service, verifieer dat die werkt en voeg dan meer toe. Zo kun je problemen isoleren zodra ze opduiken.
Test rootless networking vroeg. Start een app met meerdere services en verifieer dat containers over localhost kunnen communiceren. Verander je connection strings van servicenamen naar localhost. Als networking niet werkt zoals je verwacht, weet je dat meteen.
Wees expliciet met volumes en poorten. Vertrouw niet op defaults. Specificeer volledige paden voor bind mounts. Definieer poortkoppelingen. Stel bestandspermissies expliciet in als je hostmappen mount. Door het rootless model van Podman kunnen aannames die in Docker werkten hier misgaan.
Gebruik Podman Compose vooral voor ontwikkeling en lichtgewicht productie. Het is geschikt voor lokale dev-omgevingen en kleine deployments. Voor productie op schaal heb je Kubernetes of een ander orkestratieplatform nodig. Podman Compose is niet bedoeld voor high-availabilityclusters of complexe service meshes.
Conclusie
Podman Compose biedt een praktische manier om multi-containerapplicaties te draaien met Podman in plaats van Docker. Het leest je bestaande Compose-bestanden en vertaalt ze naar Podman-commando's, zodat je geen compleet nieuwe workflow hoeft te leren. Maar het is geen perfecte kloon van Docker Compose. Networking werkt anders, sommige functies worden niet ondersteund en je moet connection strings en configs aanpassen aan het pod-gebaseerde model van Podman.
Lees tot slot meer over de verschillen tussen Docker en Podman om hun respectieve architectuurbenaderingen en compatibiliteit beter te begrijpen.
Senior Data Scientist, gevestigd in Kroatië. Top Tech-schrijver met meer dan 700 gepubliceerde artikelen en meer dan 10 miljoen weergaven. Auteur van het boek Machine Learning Automation with TPOT.
Docker Compose FAQ's
Wat is Podman Compose?⌄
Podman Compose is een op Python gebaseerde tool die Docker Compose-bestanden leest en ze vertaalt naar Podman-commando's. Het laat je multi-containerapplicaties draaien met Podman in plaats van Docker, zodat je dezelfde Compose-workflow houdt zonder een daemon of rootrechten nodig te hebben.
Kan ik Docker Compose-bestanden gebruiken met Podman Compose?⌄
Ja, Podman Compose leest standaard docker-compose.yml-bestanden. De meeste basisfuncties van Docker Compose werken out-of-the-box, al moet je connection strings aanpassen van servicenamen naar localhost vanwege het pod-gebaseerde netwerkmodel van Podman.
Wat is het belangrijkste verschil tussen Podman Compose en Docker Compose?⌄
Podman Compose draait standaard rootless en vereist geen daemon, terwijl Docker Compose de Docker-daemon nodig heeft die als root draait. Podman Compose gebruikt ook pod-gebaseerde networking, waarbij containers localhost delen, terwijl Docker Compose elke service een eigen hostnaam geeft.
Waarom slagen mijn services er niet in verbinding te maken met Podman Compose?⌄
Podman Compose plaatst alle services in één pod die een netwerk-namespace deelt, waardoor containers communiceren via localhost in plaats van servicenamen. Je moet connection strings zoals db:5432 wijzigen in localhost:5432 in je applicatieconfiguraties.
Werkt Podman Compose op macOS en Windows?⌄
Ja, maar je moet eerst Podman binnen een Linux-VM draaien met Podman Desktop of podman machine. Dat voegt complexiteit toe vergeleken met Linux, waar Podman native draait, en je kunt te maken krijgen met tragere bestandsynchronisatie en netwerkquirks.
Stel, je hebt een
docker-compose.yml-bestand dat al maanden werkt. Maar nu moet je Podman gebruiken in plaats van Docker, en je weet niet zeker of je het bestand moet bewerken of helemaal opnieuw moet beginnen. Je lokale ontwikkelomgeving hangt af van dat Compose-bestand, en je hele setup opnieuw opbouwen is niet bepaald iets waar je tijd voor hebt.Het goede nieuws is dat Podman Compose je in staat stelt om bestaande Compose-bestanden met Podman in plaats van Docker te draaien. Het is een op Python gebaseerde compatibiliteitslaag die je Compose-definities vertaalt naar Podman-commando's, zodat je het multi-containerworkflow kunt blijven gebruiken dat je gewend bent.
In dit artikel laat ik je zien wat Podman Compose is, hoe je het installeert en hoe je er je eerste multi-containerapplicatie mee draait. Als sommige concepten nieuw voor je zijn, schrijf je dan in voor onze Containerization and Virtualization Concepts-cursus om de basis onder de knie te krijgen.
Wat is Podman Compose?
Podman Compose is een op Python gebaseerde tool die je
docker-compose.yml-bestanden leest en ze vertaalt naar Podman-commando's.Je schrijft nog steeds een standaard Docker Compose-bestand met services, netwerken en volumes. Podman Compose parseert dat bestand en voert de equivalente
podman-commando's uit om je containers te starten. Het doet het vertaalwerk voor je, zodat je de Compose-syntaxis niet handmatig naar Podman-CLI-commando's hoeft om te zetten.Het is belangrijk om te benadrukken dat Podman Compose geen drop-in vervanging is voor Docker Compose.
Het is een compatibiliteitslaag. Sommige Docker Compose-functies werken direct, andere vragen om aanpassingen, en een paar werken helemaal niet. De tool streeft naar compatibiliteit, maar reproduceert niet elk afzonderlijk gedrag van Docker Compose.
Nog een manier om ernaar te kijken: Docker Compose praat rechtstreeks met de Docker-daemon. Podman Compose praat met de Podman-CLI, die vervolgens containers beheert zonder daemon. Het eindresultaat lijkt op elkaar, maar de onderliggende werking is anders.
Dit betekent dat je de meeste van je bestaande Compose-bestanden kunt hergebruiken, maar je moet wel begrijpen waar de verschillen zitten.
Waarom Podman Compose gebruiken?
Met Podman Compose kun je multi-containerapplicaties draaien zonder Docker te installeren.
Vergeleken met Docker krijg je standaard rootless containers. Podman draait containers zonder rootrechten. Simpel gezegd: er is minder risico als een container gecompromitteerd raakt. Docker vereist dat de daemon als root draait, zelfs als je daarbovenop rootless containers gebruikt.
Dit maakt Podman Compose geschikter voor omgevingen met focus op veiligheid. Werk je op streng afgeschermde Linux-servers of in omgevingen waar een daemon op rootniveau niet is toegestaan, dan biedt Podman Compose de multi-containerworkflow die je nodig hebt.
Het is ook handig voor ontwikkeling en testen. Je kunt lokale omgevingen opzetten, containerconfiguraties testen en je Compose-bestanden valideren zonder Docker te installeren. Ideaal voor lichtgewicht deployments waarbij je geen volledige orkestratie nodig hebt.
Maar het is goed om te beseffen dat Podman Compose niet in elke situatie ideaal is.
Voor productie op schaal wil je eerder Kubernetes of Docker Swarm. Podman Compose heeft ook zwakkere ondersteuning op macOS en Windows vergeleken met Linux, waardoor cross-platform ontwikkeling minder soepel is. En als je team al in het Docker-ecosysteem heeft geïnvesteerd met eigen plugins en tooling, betekent overstappen op Podman Compose dat je delen van die workflow opnieuw moet opbouwen.
Kortom: gebruik Podman Compose wanneer je rootless containers nodig hebt, security-first omgevingen, of een ontwikkelsetup zonder Docker.
Podman Compose installeren
Podman Compose werkt het best op Linux, waar Podman native draait.
Je kunt het op macOS en Windows installeren, maar dan moet je Podman eerst in een virtuele machine draaien. Dat voegt complexiteit toe en is niet zo soepel als op Linux. Reken op macOS of Windows op extra stappen en mogelijke netwerkquirks.
Installeren op Linux
De makkelijkste manier om Podman Compose te installeren is via
pip.Podman compose installeren op Linux
Dit installeert de nieuwste versie van PyPI. Je hoeft je geen zorgen te maken over Python-versiebeheer: als je Python 3 hebt geïnstalleerd, zit je goed.
Sommige Linux-distributies leveren Podman Compose ook via hun repositories. Op Fedora, RHEL en CentOS kun je gebruiken:
Op Ubuntu en Debian-gebaseerde systemen voer je het volgende uit:
Versies via de pakketmanager lopen vaak achter op PyPI, dus mogelijk krijg je niet meteen de nieuwste features.
Installeren op macOS en Windows
Op macOS en Windows moet je eerst Podman Desktop opzetten of
podman machinegebruiken om een Linux-VM te maken. Zodra die draait, installeer je Podman Compose metpipbinnen die omgeving.De eerste stap is dus verbinding maken met de machine:
SSH'en naar Podman-VM
Omdat de VM op Fedora is gebaseerd, kun je dit commando uitvoeren om Podman Compose te installeren:
Podman Compose installeren
Dit tweestappenproces betekent dat je Podman Compose niet rechtstreeks op je host-OS draait, maar binnen de Linux-VM die Podman aanmaakt.
Installatie verifiëren
Voer dit commando uit om te controleren of Podman Compose correct is geïnstalleerd:
Installatie van Podman Compose verifiëren
Je zou het versienummer in de terminal moeten zien. Krijg je een "command not found"-fout, zorg er dan voor dat je Python-
bin-directory in je PATH staat.Dat is alles wat je nodig hebt om met Podman Compose aan de slag te gaan.
Een Compose-bestand draaien met Podman Compose
Je hebt Podman Compose geïnstalleerd—nu laat ik je zien hoe je een echte applicatie draait.
Een bestaand Docker Compose-bestand gebruiken
Podman Compose leest standaard
docker-compose.yml-bestanden. Je hoeft niets te hernoemen of het formaat te wijzigen.Hier is een eenvoudige FastAPI-applicatie gedefinieerd in een Compose-bestand:
Met de applicatiecode in
src/main.py:De meeste Docker Compose-functies werken out-of-the-box met Podman Compose. Dit omvat:
Maar sommige functies vragen om aanpassingen. Als je Compose-bestand Docker-specifieke plugins, custom netwerkdrivers of geavanceerde build-argumenten gebruikt, moet je die secties waarschijnlijk wijzigen.
Podman Compose gaat ook anders met networking om—services resolven elkaar niet automatisch op basis van servicenamen zoals Docker Compose dat doet.
Basiscommando's voor Podman Compose
Je kunt je services nu starten met dit commando:
Dit pullt images, maakt containers aan en start alles wat in je Compose-bestand staat. Voeg
-dtoe om in detached-modus te draaien als je geen logs in je terminal wilt zien.Podman-uitvoer
Je kunt de app nu openen op poort 8000 op je machine (of op een externe Ubuntu-instance zoals ik gebruik). Je ziet het volgende:
FastAPI-applicatie draaiend via Podman
Om draaiende services te stoppen, voer je het volgende uit:
Dit stopt en verwijdert containers. Volumes blijven bestaan tenzij je
--volumestoevoegt om ze ook te verwijderen.Om je servicelogs te bekijken, voer je dit commando uit:
Voeg
-ftoe om logs in realtime te volgen, of geef een servicenaam op om alleen de logs van die container te zien.Om alles op te ruimen, inclusief containers, netwerken en volumes, voer je dit uit:
De commando's spiegelen de syntaxis van Docker Compose, dus als je
docker-composeal kent, voel je je meteen thuis.Podman Compose vs. Docker Compose en anderen
Podman Compose en Docker Compose hebben hetzelfde doel, maar werken onder de motorkap anders. Laat me uitleggen hoe.
Rootless uitvoering
Docker Compose vereist dat de Docker-daemon als root draait. Zelfs wanneer je rootless containers configureert, heeft de daemon zelf verhoogde rechten nodig. Podman Compose draait standaard volledig zonder roottoegang. Je containers starten als jouw gebruiker, niet als een systeemservice, wat het aanvalsoppervlak verkleint en Podman Compose veiliger maakt in multi-useromgevingen.
Netwerkgedrag
Docker Compose maakt een standaard bridge-netwerk voor je services. Containers kunnen elkaar automatisch via servicenamen bereiken.
Podman Compose gebruikt pod-gebaseerde networking. Alle containers in je Compose-bestand worden gegroepeerd in één Podman-pod en delen dezelfde netwerk-namespace. Dit betekent dat containers via
localhostcommuniceren in plaats van via servicenamen, wat Docker-gebruikers kan verrassen.Als je app verwacht een database te bereiken op
db:5432, moet je dat wijzigen naarlocalhost:5432wanneer je met Podman Compose draait.Pod-gebaseerde groepering
Docker Compose beheert individuele containers. Podman Compose maakt een pod, een door Kubernetes geïnspireerde groepering waarbij containers networking delen en opslag kunnen delen. Dit podmodel sluit Podman Compose aan op Kubernetes-patronen, waardoor migreren naar orkestratie later makkelijker wordt als je dat nodig hebt.
systemd-integratie
Podman integreert met systemd om containers als system services te beheren. Je kunt systemd unit-bestanden genereren van draaiende containers en ze beheren als elke andere Linux-service. Docker biedt geen native systemd-integratie op containerniveau.
Andere opties
Als Podman Compose niet bij je past, heb je deze alternatieven:
Podman Compose zit ergens tussen simpele containercommando's en volledige orkestratie in. Het biedt je multi-containerworkflows zonder de daemonvereiste van Docker.
Netwerken en volumes in Podman Compose (wat is anders)
Docker-gebruikers die overstappen op Podman Compose klagen meestal over twee dingen: networking en volumes. In dit deel bespreek ik de verschillen.
Communicatie tussen services
In Docker Compose verbind je met andere services via hun servicenaam. Als je een webservice en een databaseservice genaamd
dbhebt, verbindt je app metdb:5432.Podman Compose plaatst alle services in één pod. Containers in dezelfde pod delen een netwerk-namespace, wat betekent dat ze allemaal
localhostgebruiken. Je database-connection string verandert dus vandb:5432naarlocalhost:5432.Dit overvalt veel mensen. Je app start, probeert te verbinden met
db:5432en faalt omdat die hostnaam niet resolveert. Je moet je connection strings of omgevingsvariabelen bijwerken omlocalhostte gebruiken.Standaardnetwerken
Docker Compose maakt een bridge-netwerk voor je services. Elke container krijgt een eigen IP-adres op dat netwerk, en de DNS-resolver van Docker handelt naamresolutie van services af.
Podman Compose maakt standaard geen aparte netwerken aan. Het podmodel betekent dat containers op een lager niveau networking delen. Als je custom netwerken in je Compose-bestand definieert, probeert Podman Compose die aan te maken, maar het gedrag komt mogelijk niet exact overeen met Docker.
Gedrag van volumes en bind mounts
Volumes en bind mounts werken grotendeels hetzelfde tussen Docker Compose en Podman Compose. Je definieert ze in je Compose-bestand en Podman maakt ze aan.
Maar er is een permissievalkuil.
Podman draait standaard rootless, dus bestands-eigenaarschap en permissies kunnen anders uitpakken. Een bind mount die in Docker prima werkt kan in Podman permissiefouten geven omdat de containergebruiker niet overeenkomt met de UID van je hostgebruiker.
Je merkt ook dat volumelocaties verschillen. Docker slaat volumes op in
/var/lib/docker/volumes/terwijl Podman ze opslaat in~/.local/share/containers/storage/volumes/voor rootless containers.De oplossingen zijn makkelijk als je weet wat er gebeurt. Pas dus connection strings aan voor networking en controleer bestandsrechten bij volumeproblemen.
Veelvoorkomende beperkingen en valkuilen
Podman Compose werkt goed voor basisopstellingen met meerdere containers, maar heeft beperkingen die je moet kennen voordat je je erop vastlegt.
Niet-ondersteunde Compose-functies
Niet elke Docker Compose-functie vertaalt naar Podman Compose. Build-contexten met complexe argumenten falen vaak of gedragen zich anders. Docker Compose-plugins en -extensies werken helemaal niet. Functies zoals GPU-passthrough, geavanceerde health checks en sommige netwerkmodes werken niet of vereisen workarounds.
Als je Compose-bestand intensief gebruikmaakt van
docker-compose.yml-versie 3.x-functies, reken dan op wat trial-and-error.Netwerkverwachtingen die afwijken van Docker
Services communiceren niet via servicenamen—ze gebruiken in plaats daarvan
localhost. Dit breekt apps die servicenamen hardcoderen in connection strings.Aangepaste bridgenetwerken gedragen zich niet hetzelfde als in Docker. DNS-resolutie werkt anders door het podmodel.
Verwacht dat je wat tijd besteedt aan het updaten van configs en omgevingsvariabelen om aan het netwerkmodel van Podman te voldoen, maar dat is een eenmalige klus.
Platformbeperkingen op macOS/Windows
Podman Compose draait het best op Linux. Op macOS en Windows draai je alles binnen een Linux-VM, wat extra lagen complexiteit toevoegt. Bestandsynchronisatie tussen je host en de VM kan trager zijn. Networking tussen je host en containers vereist extra configuratie.
Als je team macOS- of Windows-machines gebruikt voor ontwikkeling, is Docker Compose meestal de soepelere optie.
Volwassenheid van de tool en hiaten in het ecosysteem
Podman Compose is jonger dan Docker Compose. De community is kleiner, dus antwoorden vinden op specifieke problemen kost meer speurwerk. Tools van derden en integraties worden eerst voor Docker gebouwd en pas daarna voor Podman (als dat al gebeurt). IDE-ondersteuning en GUI-tools lopen achter op die van Docker.
Je vindt minder Stack Overflow-antwoorden of GitHub-issues voor Podman Compose-problemen.
Deze beperkingen maken Podman Compose niet onbruikbaar, maar het is wel iets om over na te denken voordat je je erop vastlegt. Docker Compose-gebruikers hebben deze fricties helemaal niet.
Best practices voor het gebruik van Podman Compose
Zo voorkom je de meest voorkomende hoofdpijndossiers met Podman Compose.
Begin met eenvoudige Compose-bestanden. Migreer niet meteen je meest complexe Docker-setup. Begin met een applicatie met één service, verifieer dat die werkt en voeg dan meer toe. Zo kun je problemen isoleren zodra ze opduiken.
Test rootless networking vroeg. Start een app met meerdere services en verifieer dat containers over
localhostkunnen communiceren. Verander je connection strings van servicenamen naarlocalhost. Als networking niet werkt zoals je verwacht, weet je dat meteen.Wees expliciet met volumes en poorten. Vertrouw niet op defaults. Specificeer volledige paden voor bind mounts. Definieer poortkoppelingen. Stel bestandspermissies expliciet in als je hostmappen mount. Door het rootless model van Podman kunnen aannames die in Docker werkten hier misgaan.
Gebruik Podman Compose vooral voor ontwikkeling en lichtgewicht productie. Het is geschikt voor lokale dev-omgevingen en kleine deployments. Voor productie op schaal heb je Kubernetes of een ander orkestratieplatform nodig. Podman Compose is niet bedoeld voor high-availabilityclusters of complexe service meshes.
Conclusie
Podman Compose biedt een praktische manier om multi-containerapplicaties te draaien met Podman in plaats van Docker. Het leest je bestaande Compose-bestanden en vertaalt ze naar Podman-commando's, zodat je geen compleet nieuwe workflow hoeft te leren. Maar het is geen perfecte kloon van Docker Compose. Networking werkt anders, sommige functies worden niet ondersteund en je moet connection strings en configs aanpassen aan het pod-gebaseerde model van Podman.
Lees tot slot meer over de verschillen tussen Docker en Podman om hun respectieve architectuurbenaderingen en compatibiliteit beter te begrijpen.