Podman vs Docker: Hvilken skal du velge?

Hvis du er interessert i virtualiserings- og containeriseringsverdenen, har du sannsynligvis møtt Podman og Docker, og du lurer kanskje på hvordan de er forskjellige fra hverandre.

I dette innlegget vil vi utforske forskjellene mellom Docker og Podman og prøve å finne hvilken som vil være det riktige valget for deg!

Docker

Docker er en containeriseringsteknologi som letter avhengighetsstyring i et prosjekt på alle nivåer (utvikling og distribusjon).

Tilgjengelig på Linux, Windows og Mac OS, Dockers mekanisme sentrerer rundt containere og deres orkestrering, og det er her containerisering skiller seg fra virtualisering.

Docker har to hovedbyggeblokker: Docker CLI og Docker Daemon.

Docker Daemon:

Det er en konstant bakgrunnsprosess som hjelper til med å administrere Docker-bilder, containere, nettverk og lagringsvolumer. Docker bruker Docker Engine REST API for å samhandle med Docker-daemonen, tilgjengelig via HTTP-protokollen.

Docker CLI:

Bildekreditt: Redhat

Det er Docker-kommandolinjeklienten for å samhandle med Docker-demonen. Det er det du bruker når du kjører en Docker-kommando.

Operasjonen til Docker er basert på Linux-kjernen og funksjonene til denne kjernen, for eksempel cgroups og navnerom. Disse funksjonene skiller prosessene slik at de kan kjøres uavhengig, da hensikten med containere er å kjøre flere prosesser og applikasjoner separat.

Det er dette som gjør det mulig å optimalisere bruken av infrastrukturen uten å redusere sikkerhetsnivået sammenlignet med de separate systemene.

Alle containerverktøy som Docker kommer med en bildebasert distribusjonsmodell. Denne modellen forenkler deling av en applikasjon eller et sett med tjenester på tvers av flere miljøer.

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

Podman

Podman (POD MANageren) bygger, kjører og administrerer OCI-beholdere og beholderbilder. Den ble utviklet av Red Hat og opprinnelig ment for sin Enterprise Linux 8. Den brukes til containeradministrasjon og fungerer som den offisielle etterfølgeren til Docker.

  13 grunner til å velge AWS som din skyleverandør

Red Hat avviklet følgelig støtten for Docker, men forsikret at svitsjen ville være enkel for brukere siden Podman er basert på Docker, selv om den opprinnelig bare var ment som et feilsøkingsverktøy.

Den administrerer hele containerøkosystemet ved å bruke libpod-biblioteket. Siden Podman bare fungerer på Linux-plattformer, er en REST API og klienter under utvikling for å tillate Mac- og Windows-systemer å ringe tjenesten.

Imidlertid er det for tiden 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.

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

I svært små og håndterbare 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 av containerhypen og moderne orkestrering med Kubernetes.

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

Kommandoen podman generer kube leverer de tilsvarende konfigurasjonsfilene. Disse fungerer så 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 hobbyhesten for håndtering av containere. Docker har imidlertid mange fordeler og fremfor alt det raskt voksende repertoaret av bilder, samt ulemper og mulige sikkerhetsrisikoer. Dessuten er Docker ikke lenger støttet som en beholder for Kubernetes.

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

Den lar prosesser som kjører i containerne få tilgang til kjernen med root-privilegier og dermed angripe vertssystemet.

Den første forskjellen er tydelig når du først bruker den. Mens Docker krever at Docker-demonen startes først, kan en Podman-beholder startes direkte fra kommandolinjen. Så det er ingen bakgrunnsprosess, og applikasjonen kjøres kun når det er nødvendig.

  8 beste digitale sertifikatprodusenter og -utstederplattformer for å belønne studenter og ansatte

Fra et sikkerhetsperspektiv er dette bra fordi Podman er mindre sårbar for angrep hvis 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 fork-exec-modellen. Hver beholder kjører som en underordnet prosess av Podman.

Et brukernavnområ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-beholderen bare rettighetene som den utførende brukeren har. Bruk av brukernavneområder betyr at hver bruker kan opprette og administrere sine egne beholdere, men disse er ikke synlige for andre brukere og superbrukeren.

Fordi Podman drives uavhengig av Docker, har utviklerne mye spillerom og kan svare på fellesskapets ønsker. Interessante tillegg til Podman inkluderer mount/unmount-kommandoen og systemd integrering.

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

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

I tillegg gir Podman kommandoen podman generer 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 gjeldende dnsmasq-installasjon på grunn av dens evne til å opprette et internt nettverk. I motsetning til dette må Docker overskrive brannmurreglene for å muliggjøre kommunikasjon mellom containere.

PodmanDockerArchitecture DaemonDaemon lessServices Management SystemdDocker EngineBrannmurkompatibilitet Overskriver brannmurregler Respekterer brannmurreglerPlattformNative støtte for linuxLinux, Windows og Mac

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

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

  6 beste WordPress-tilgjengelighetsplugins i 2022

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

Tilsvarende, hvis du akkurat begynner å gå inn i containerverdenen, i så fall, er Docker et bedre alternativ siden det er stabilt, veletablert med riktig dokumentasjon og har en grunn læringskurve sammenlignet med Podman, som fortsatt mangler stabilitet og har ikke veldefinert dokumentasjon.

Migrering fra Podman til Docker

Hvis du er på kommandolinjen, er det ganske enkelt å bytte fra Docker Engine til Podman. På det enkleste fungerer en $-alias docker=podman-kommando mesteparten av tiden.

Dette forutsetter selvfølgelig at riktig programvare er installert på systemet. I tilfellet med Linux er dette heller ikke noe problem; 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.

Men det er også unntak ettersom noen Docker-kommandoer ikke har noen motpart i Podman-verdenen. På samme måte oppfører noen kommandoer seg annerledes i Docker enn i Podman-universet. Foreløpig påvirker dette kun håndteringen av volumer som allerede er satt opp.

Bryteren er litt vanskeligere når grafiske verktøy som Docker Desktop er i bruk. Det bør spesielt påvirke de utviklerne som jobber med Windows eller macOS.

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

Siste ord

Erstatningen av Docker med Podman kan anses som nesten ferdig. 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 hovedteknologien når det gjelder containere, men dette vil mest sannsynlig endre seg på sikt.

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