Podman vs. Docker: Hvilken containerteknologi passer best for deg?

Dersom du har interesse for virtualisering og containerisering, har du trolig støtt på både Podman og Docker, og du lurer kanskje på hvordan de skiller seg fra hverandre.

I denne artikkelen skal vi se nærmere på forskjellene mellom Docker og Podman, og prøve å finne ut hvilken av dem som passer best for deg!

Docker

Docker er en teknologi for containerisering som forenkler håndtering av avhengigheter i et prosjekt, på alle nivåer (utvikling og distribusjon).

Docker er tilgjengelig for Linux, Windows og macOS, og mekanismen sentrerer seg rundt containere og deres orkestrering. Det er her containerisering skiller seg fra virtualisering.

Docker har to hovedkomponenter: Docker CLI og Docker Daemon.

Docker Daemon:

Dette er en bakgrunnsprosess som kontinuerlig kjører og hjelper til med å administrere Docker-bilder, containere, nettverk og lagringsvolumer. Docker benytter Docker Engine REST API for å kommunisere med Docker-demonen, tilgjengelig via HTTP-protokollen.

Docker CLI:

Bildekreditt: Redhat

Dette er Docker sin kommandolinjeklient for å samhandle med Docker-demonen. Det er denne du benytter når du utfører en Docker-kommando.

Driften av Docker er basert på Linux-kjernen og dens funksjoner, som cgroups og navnerom. Disse funksjonene isolerer prosesser slik at de kan kjøre uavhengig av hverandre, ettersom hensikten med containere er å kjøre flere prosesser og applikasjoner separat.

Dette muliggjør optimal bruk av infrastrukturen uten at det går på bekostning av sikkerheten, sammenlignet med separate systemer.

Alle containerverktøy, inkludert Docker, benytter en bildebasert distribusjonsmodell. Denne modellen gjør det enkelt å dele en applikasjon eller et sett med tjenester på tvers av flere miljøer.

I tillegg hjelper Docker med å automatisere utrullingen av applikasjoner i et containermiljø. Med disse verktøyene får brukerne full tilgang til applikasjoner og kan akselerere distribusjon, kontrollere versjoner og tildele dem.

Podman

Podman (POD MANager) bygger, kjører og håndterer OCI-containere og containerbilder. Det ble utviklet av Red Hat og var opprinnelig tiltenkt deres Enterprise Linux 8. Det brukes til containeradministrasjon og fungerer som den offisielle etterfølgeren til Docker.

Red Hat avsluttet derfor støtten for Docker, men forsikret om at overgangen ville være enkel for brukerne siden Podman er basert på Docker, selv om det opprinnelig kun var ment som et feilsøkingsverktøy.

Det håndterer hele containerøkosystemet ved hjelp av libpod-biblioteket. Siden Podman kun fungerer på Linux-plattformer, er det en REST API og klienter under utvikling som skal gjøre det mulig for Mac- og Windows-systemer å bruke tjenesten.

Det finnes imidlertid en Varlink-basert ekstern klient som fungerer på Mac- eller Windows-plattformer som tillater ekstern kommunikasjon med en Linux-basert Podman-server. Libpod-biblioteket støtter flere metoder for å laste opp bilder sikkert, inkludert tillit og bildeverifisering.

Det støtter også pods for å administrere grupper av containere sammen, og flere bildeformater, inkludert OCI og Docker bildeformater.

I svært små og overkommelige miljøer kan Podman til og med fungere som en forløper til Kubernetes. Det bygger bro mellom den enestående håndteringen av individuelle forekomster fra de første årene med containerhypen, og moderne orkestrering med Kubernetes.

Ambisjonsrike containerbrukere kan allerede glede seg over neste nivå med pods. Konstruksjon og drift av en Kubernetes-klynge er ikke lenger nødvendig. I det enkleste tilfellet kan nydesignede pods testes og forbedres i individuelle operasjoner. Selv en påfølgende overføring til Kubernetes er mulig.

Kommandoen «podman generate kube» leverer de tilsvarende konfigurasjonsfilene. Disse fungerer en-til-en som input for Kubernetes-verktøyet «kubectl».

Nåværende versjoner av Podman kan til og med lage konfigurasjonsfiler for systemd – en godbit for alle som bruker den allestedsnærværende init-etterfølgeren for containerorkestrering.

Podman vs Docker: Forskjeller

Docker har raskt etablert seg som førstevalget for håndtering av containere. Docker har imidlertid mange fordeler, og fremfor alt et raskt voksende repertoar av bilder. Likevel finnes det også ulemper og mulige sikkerhetsrisikoer. Dessuten er ikke Docker lenger støttet som beholder for Kubernetes.

Det faktum at containere, i motsetning til virtuelle systemer, ikke krever sin egen kjerne, blir som regel sett på som en av de store fordelene. Det utgjør imidlertid en stor sikkerhetsrisiko med Docker fordi Docker-containere kun kan kjøres med root-privilegier.

Dette gjør at prosesser som kjører i containerne kan få tilgang til kjernen med root-privilegier og dermed angripe vertssystemet.

Den første forskjellen blir tydelig når du begynner å bruke det. Mens Docker krever at Docker-demonen startes først, kan en Podman-container startes direkte fra kommandolinjen. Dermed er det ingen bakgrunnsprosess, og applikasjonen kjører kun når det er nødvendig.

Fra et sikkerhetsperspektiv er dette positivt fordi Podman er mindre sårbar for angrep dersom demonen ikke trenger å kjøre 24/7 med superbrukerrettigheter. Podman krever ingen bakgrunnsprosess på grunn av arkitekturen, som skiller seg fundamentalt fra Docker.

Mens Docker følger klient-server-modellen, der Docker-klienten kommuniserer med Docker-demonen via en API, følger Podman en fork-exec-modell. Hver container kjører som en underordnet prosess av Podman.

Et brukernavneområde opprettes ved første gangs bruk når Podman kjøres med vanlige brukerrettigheter. I brukernavneområdet kjører Podman med root-privilegier og har rettighetene til å montere filsystemer og lage containere.

Følgelig har Podman-containeren kun rettighetene som den utførende brukeren har. Bruken av brukernavneområder betyr at hver bruker kan opprette og administrere sine egne beholdere, men disse er ikke synlige for andre brukere eller superbrukeren.

Fordi Podman drives uavhengig av Docker, har utviklerne større spillerom og kan svare på fellesskapets ønsker. Interessante tillegg til Podman inkluderer kommandoene for mount/unmount, og integrasjon med systemd.

Verten kan bruke kommandoen mount/unmount til å montere containerens filsystem, for eksempel for å få tilgang til eller endre filer, og deretter demontere dem igjen.

Mens overvåkning av containerne ved hjelp av systemd ikke fungerer på grunn av demonen i Docker, kan containere startes, overvåkes og til og med startes på nytt via systemd med Podman.

I tillegg gir Podman kommandoen «podman generate systemd», som genererer en tilsvarende systemtjeneste for den respektive containeren, og dermed avlaster brukeren fra opprettelsen av systemtjenestene, noe som betyr at integrasjonen på vertssystemet er tilgjengelig.

En annen avgjørende forskjell mellom Podman og Docker er at sistnevnte ikke endrer brannmurreglene eller den eksisterende dnsmasq-installasjonen på grunn av evnen til å opprette et internt nettverk. I motsetning til dette må Docker overskrive brannmurreglene for å muliggjøre kommunikasjon mellom containere.

Podman Docker
Arkitektur Daemon-less Daemon
Tjenesteadministrasjon Systemd Docker Engine
Brannmurkompatibilitet Respekterer brannmurregler Overskriver brannmurregler
Plattform Native støtte for Linux Linux, Windows og Mac

Når bør du migrere fra Docker til Podman

Hvis du distribuerer containere i et RHEL-basert miljø, har du ikke mange alternativer utenom å bruke Podman, siden det er RHEL-native. Du kan også migrere til eller velge Podman fremfor Docker dersom du har små distribusjoner med få beholdere.

Men hvis du ønsker å ha mer komplekse distribusjoner, med flere containere og en stabel med koordinerende containere med docker-compose/podman-compose over et nettverk, er det bedre å bruke Docker, ettersom det håndterer nettverk mye bedre.

Dersom du akkurat begynner å utforske containerverdenen, er Docker et bedre alternativ da det er stabilt, veletablert, har god dokumentasjon og en enkel læringskurve sammenlignet med Podman, som fortsatt mangler stabilitet og ikke har like godt definert dokumentasjon.

Migrering fra Podman til Docker

Dersom du benytter kommandolinjen, er det relativt enkelt å bytte fra Docker Engine til Podman. I de enkleste tilfellene fungerer kommandoen $-alias docker=podman som regel.

Dette forutsetter selvfølgelig at riktig programvare er installert på systemet. I tilfellet Linux er ikke dette et problem, da ferdige programvarepakker er tilgjengelige for kommersielt tilgjengelige distribusjoner.

Windows eller macOS er ikke blant de støttede operativsystemene. Alias-tilnærmingen fungerer fordi mange Docker-kommandoer har en Podman-ekvivalent.

Det finnes også unntak, da enkelte Docker-kommandoer ikke har en tilsvarende kommando i Podman-verdenen. På samme måte oppfører enkelte kommandoer seg annerledes i Docker enn i Podman. Foreløpig påvirker dette kun håndteringen av volumer som allerede er satt opp.

Overgangen er litt vanskeligere når grafiske verktøy som Docker Desktop er i bruk. Det vil særlig påvirke de utviklerne som jobber med Windows eller macOS.

Docker Desktop-brukere må venne seg til kommandolinjen, og det samme gjelder Docker compose. Det finnes imidlertid podman-compose-prosjektet. Denne programvaren er skrevet i Python og fungerer som en erstatning for Docker compose.

Siste ord

Erstatningen av Docker med Podman kan anses som nesten fullført. For brukere og administratorer er de fleste aspektene ved denne endringen enkle. Mange Docker-funksjoner har identiske ekvivalenter i Podman.

En reell fordel er mangelen på en enkelt demonprosess og root-privilegier, for ikke å nevne den naturlige bruken av containergrupper. Det er imidlertid verdt å nevne at Docker fortsatt er den ledende teknologien innen containere, men dette vil trolig endre seg på sikt.

Du kan også utforske noen Docker-kommandoer for å administrere containere.