Podman vs Docker: Vilken ska man välja?

Om du är intresserad av virtualiserings- och containeriseringsvärlden har du förmodligen stött på Podman och Docker och du kanske undrar hur de skiljer sig från varandra.

I det här inlägget kommer vi att utforska skillnaderna mellan Docker och Podman och försöka hitta vilken som är det rätta valet för dig!

Hamnarbetare

Docker är en containeriseringsteknologi som underlättar beroendehantering inom ett projekt på alla nivåer (utveckling och driftsättning).

Dockers mekanism, som är tillgänglig på Linux, Windows och Mac OS, är centrerad kring containrar och deras orkestrering, och det är här containerisering skiljer sig från virtualisering.

Docker har två huvudbyggnadsblock: Docker CLI och Docker Daemon.

Docker Daemon:

Det är en konstant bakgrundsprocess som hjälper till att hantera Docker-bilder, behållare, nätverk och lagringsvolymer. Docker använder sin Docker Engine REST API för att interagera med Docker-demonen, som nås via HTTP-protokoll.

Docker CLI:

Bildkredit: Redhat

Det är Dockers kommandoradsklient för att interagera med Docker-demonen. Det är vad du använder när du kör ett Docker-kommando.

Driften av Docker är baserad på Linux-kärnan och funktionerna i denna kärna, såsom cgroups och namnutrymmen. Dessa funktioner separerar processerna så att de kan köras oberoende, eftersom syftet med containrar är att köra flera processer och applikationer separat.

Det är detta som gör det möjligt att optimera användningen av infrastrukturen utan att minska säkerhetsnivån jämfört med de separata systemen.

Alla containerverktyg som Docker kommer med en bildbaserad implementeringsmodell. Denna modell förenklar delning av en applikation eller uppsättning tjänster över flera miljöer.

Dessutom hjälper Docker till att automatisera distributionen av applikationer i en containermiljö. Med dessa olika verktyg får användare full tillgång till applikationer och kan påskynda distributionen, kontrollera versioner och tilldela dem.

Podman

Podman (POD MANager) bygger, kör och hanterar OCI-behållare och containeravbildningar. Den utvecklades av Red Hat och var ursprungligen avsedd för företagets Linux 8. Den används för containerhantering och fungerar som den officiella efterträdaren till Docker.

Red Hat avbröt följaktligen stödet för Docker men försäkrade att bytet skulle vara enkelt för användarna eftersom Podman är baserat på Docker även om det ursprungligen bara var tänkt som ett felsökningsverktyg.

Den hanterar hela behållarens ekosystem med hjälp av libpod-biblioteket. Eftersom Podman bara fungerar på Linux-plattformar, är ett REST API och klienter för närvarande under utveckling för att tillåta Mac- och Windows-system att anropa tjänsten.

Men det finns för närvarande en Varlink-baserad fjärrklient som fungerar på Mac- eller Windows-plattformar som tillåter fjärrkommunikation med en Linux-baserad Podman-server. Libpod-biblioteket stöder flera metoder för att ladda upp bilder på ett säkert sätt, inklusive förtroende och bildverifiering.

Den stöder också pods för att hantera grupper av behållare tillsammans och flera bildformat, inklusive OCI- och Docker-bildformat.

I mycket små och hanterbara miljöer kan Podman till och med fungera som en föregångare till Kubernetes. Det överbryggar klyftan mellan den unika hanteringen av enskilda instanser från de första åren av containerhypen och modern orkestrering med Kubernetes.

Ambitiösa containeranvändare kan redan njuta av nästa nivå med poddarna. Konstruktion och drift av ett Kubernetes-kluster är inte längre nödvändigt. I det enklaste fallet kan nydesignade pods testas och förbättras i enskilda operationer. Även en efterföljande överföring till Kubernetes är möjlig.

Kommandot podman generera kube tillhandahåller motsvarande konfigurationsfiler. Dessa fungerar sedan en-till-en som input för Kubernetes-verktyget kubectl.

Aktuella versioner av Podman kan till och med skapa konfigurationsfiler för systemd – en njutning för alla som använder den allestädes närvarande init-efterföljaren för containerorkestrering.

Podman vs Docker: Skillnader

Docker har snabbt etablerat sig som hobbyhästen för att hantera containrar. Docker har dock många fördelar och framför allt den snabbt växande repertoaren av bilder, samt nackdelar och eventuella säkerhetsrisker. Docker stöds inte längre som en behållare för Kubernetes.

Att containrar, till skillnad från virtuella system, inte kräver sin kärna brukar ses som en av de stora fördelarna. Det utgör dock en stor säkerhetsrisk med Docker eftersom Docker-behållare endast kan köras med root-privilegier.

Det tillåter processer som körs i behållarna att komma åt kärnan med root-privilegier och därmed attackera värdsystemet.

Den första skillnaden är uppenbar när du först använder den. Medan Docker kräver att Docker-demonen startas först, kan en Podman-behållare startas direkt från kommandoraden. Så det finns ingen bakgrundsprocess, och applikationen körs bara när det behövs.

Ur ett säkerhetsperspektiv är detta bra eftersom Podman är mindre sårbar för attacker om demonen inte behöver köra 24/7 med superanvändarprivilegier. Podman kräver ingen bakgrundsprocess på grund av arkitekturen, som skiljer sig fundamentalt från Docker.

Medan Docker följer klient-server-modellen, där Docker-klienten kommunicerar med Docker-demonen via ett API, följer Podman fork-exec-modellen. Varje behållare körs som en underordnad process av Podman.

Ett användarnamnutrymme skapas vid första användningen när Podman körs med normala användarbehörigheter. I användarnamnutrymmet körs Podman med root-privilegier och har rättigheter att montera filsystem och skapa behållare.

Följaktligen har Podman-behållaren endast de rättigheter som den körande användaren har. Att använda användarnamnrymder innebär att varje användare kan skapa och hantera sina egna behållare, men dessa är inte synliga för andra användare och superanvändaren.

Eftersom Podman drivs oberoende av Docker har utvecklarna ett stort spelrum och kan svara på communityns önskemål. Intressanta tillägg till Podman inkluderar kommandot mount/unmount och systemd integrering.

Värden kan använda kommandot mount/unmount för att montera containerns filsystem, till exempel för att komma åt eller ändra filer och sedan avmontera dem igen.

Även om övervakning av behållarna med systemd inte fungerar på grund av demonen i Docker med Podman, kan behållare startas, övervakas och till och med startas om via systemd.

Dessutom tillhandahåller Podman kommandot podman generera systemd, vilket genererar en motsvarande systemtjänst för respektive behållare och därmed avlastar användaren från skapandet av systemtjänsterna, vilket innebär att integrationen på värdsystemet är tillgänglig.

En annan avgörande skillnad mellan Podman och Docker är att den senare inte ändrar brandväggsreglerna eller nuvarande dnsmasq-installation på grund av dess förmåga att skapa ett internt nätverk. Däremot måste Docker skriva över brandväggsreglerna för att möjliggöra kommunikation mellan behållare.

PodmanDockerArchitecture DaemonDaemon lessServices Management SystemdDocker EngineBrandväggskompatibilitet Skriver över brandväggsregler Respekterar brandväggsreglerPlattformNative support för linuxLinux, Windows och Mac

När ska du migrera från Docker till Podman

Om du distribuerar behållare i en RHEL-baserad miljö har du i så fall inte många alternativ förutom att använda Podman eftersom det är RHEL-native. Du kan också migrera till eller välja Podman över Docker om du har små distributioner med få behållare.

Men om du vill bli mer komplex än så, ha flera behållare och en stack med koordinerande behållare med docker-compose/podman-compose över ett nätverk. Det är bättre att använda Docker eftersom det hanterar nätverk mycket bättre.

På samma sätt, om du precis har börjat komma in i containervärlden, i så fall är Docker ett bättre alternativ eftersom det är stabilt, väletablerat med ordentlig dokumentation och har en ytlig inlärningskurva jämfört med Podman, som fortfarande saknar stabilitet och saknar väldefinierad dokumentation.

Migration från Podman till Docker

Om du är på kommandoraden är det ganska enkelt att byta från Docker Engine till Podman. Som enklast fungerar dock ett $-alias docker=podman-kommando för det mesta.

Naturligtvis förutsätter detta att lämplig programvara är installerad på systemet. I fallet med Linux är detta inte heller något problem; färdiga programvarupaket finns tillgängliga för kommersiellt tillgängliga distributioner.

Windows eller macOS är inte bland de operativsystem som stöds. Aliasmetoden fungerar eftersom många Docker-kommandon har en Podman-motsvarighet.

Men det finns också undantag eftersom vissa Docker-kommandon inte har någon motsvarighet i Podman-världen. På liknande sätt beter sig vissa kommandon annorlunda i Docker än i Podman-universumet. I nuläget påverkar detta endast hanteringen av redan uppsatta volymer.

Bytet är lite svårare när grafiska verktyg som Docker Desktop används. Det bör särskilt påverka de utvecklare som arbetar med Windows eller macOS.

Docker Desktop-användare måste vänja sig vid kommandoraden, och detsamma gäller Docker compose. Däremot finns det podman-compose-projektet. Skrivet i Python fungerar programvaran som en ersättning för Docker compose.

Slutord

Ersättningen av Docker av Podman kan anses nästan klar. För användare och administratörer är de flesta aspekterna av denna förändring enkla. Många Docker-funktioner har identiska motsvarigheter i Podman.

En verklig fördel är avsaknaden av en singulär demonprocess och root-privilegier, för att inte tala om den naturliga användningen av containergrupper. Det är dock värt att nämna att Docker fortfarande är den huvudsakliga tekniken när det gäller containrar, men detta kommer med största sannolikhet att förändras på sikt.

Du kan också utforska några Docker-kommandon för att hantera behållare.