Podman vs Docker: Který si vybrat?

Pokud se pohybujete ve sféře virtualizace a kontejnerizace, s velkou pravděpodobností jste narazili na technologie Podman a Docker. Možná vás napadá otázka, jak se tyto dva nástroje odlišují.

V tomto článku si podrobně rozebereme rozdíly mezi Dockerem a Podmanem a pokusíme se zjistit, který z nich bude pro vás ideální volbou!

Docker

Docker představuje technologii kontejnerizace, která zjednodušuje správu závislostí v projektech, a to jak během vývoje, tak i při nasazení.

Docker, fungující na operačních systémech Linux, Windows a macOS, se primárně zaměřuje na kontejnery a jejich orchestraci. V tom spočívá hlavní rozdíl mezi kontejnerizací a virtualizací.

Docker se skládá ze dvou základních stavebních prvků: Docker CLI a Docker Daemon.

Docker Daemon:

Jedná se o trvalý proces běžící na pozadí, který zajišťuje správu obrazů, kontejnerů, sítí a svazků úložiště v rámci Dockeru. Pro komunikaci s démonem Docker používá rozhraní Docker Engine REST API, ke kterému se přistupuje prostřednictvím protokolu HTTP.

Docker CLI:

Obrázek: Redhat

Jedná se o klienta příkazové řádky, který slouží k interakci s démonem Docker. Právě s jeho pomocí zadáváte veškeré příkazy Dockeru.

Základem fungování Dockeru je linuxové jádro a jeho funkce, jako jsou cgroups a jmenné prostory. Tyto prvky oddělují jednotlivé procesy, aby mohly běžet nezávisle na sobě. Kontejnery slouží ke spouštění více procesů a aplikací odděleně.

Tím se optimalizuje využití hardwarové infrastruktury bez snížení úrovně zabezpečení v porovnání se samostatnými systémy.

Všechny nástroje pro práci s kontejnery, včetně Dockeru, využívají model nasazení založený na obrazech. Tento přístup zjednodušuje sdílení aplikací či sad služeb napříč různými prostředími.

Docker dále automatizuje nasazování aplikací do kontejnerových prostředí. S využitím těchto nástrojů získávají uživatelé plnou kontrolu nad aplikacemi a mohou zrychlit jejich nasazování, správu verzí a přidělování.

Podman

Podman (zkratka pro POD MANager) je nástroj, který vytváří, spouští a spravuje kontejnery OCI a obrazy kontejnerů. Vyvinula jej společnost Red Hat, původně pro svůj podnikový systém Linux 8. Používá se pro správu kontejnerů a bývá označován za oficiálního nástupce Dockeru.

Společnost Red Hat následně ukončila podporu Dockeru, nicméně ujišťovala uživatele, že přechod na Podman bude snadný, protože vychází z Dockeru. Původně byl Podman zamýšlen pouze jako nástroj pro ladění.

Podman spravuje celý ekosystém kontejnerů pomocí knihovny libpod. Aktuálně funguje pouze na platformách Linux. REST API a klienti pro systémy macOS a Windows jsou teprve ve vývoji.

V současné době existuje vzdálený klient založený na Varlinku, který funguje na platformách macOS a Windows a umožňuje vzdálenou komunikaci se serverem Podman běžícím na Linuxu. Knihovna libpod podporuje několik metod pro zabezpečené načítání obrazů, včetně důvěryhodnosti a ověřování.

Dále podporuje moduly pro společnou správu skupin kontejnerů a různé formáty obrazů, včetně formátů OCI a Docker.

V menších a snadno spravovatelných prostředích může Podman dokonce zastat roli předchůdce Kubernetes. Překlenuje mezeru mezi individuální správou jednotlivých instancí a moderní orchestrací pomocí Kubernetes.

Uživatelé, kteří se chtějí posunout dál, mohou vyzkoušet další úroveň s pody. Konstrukce a provoz clusteru Kubernetes už nejsou nutností. V nejjednodušším případě lze nově navržené pody testovat a zdokonalovat v jednotlivých provozních režimech. Možný je i následný převod na Kubernetes.

Příkaz podman generation kube vygeneruje odpovídající konfigurační soubory. Ty pak slouží jako vstup pro nástroj Kubernetes kubectl.

Současné verze Podman dokáží vytvářet i konfigurační soubory pro systemd – což ocení každý, kdo používá tento nástroj pro orchestraci kontejnerů.

Podman vs Docker: Rozdíly

Docker se rychle stal standardem pro správu kontejnerů. Má mnoho výhod, především rychle rostoucí repozitář obrazů, ale také některé nevýhody a potenciální bezpečnostní rizika. Navíc už není podporován jako kontejner pro Kubernetes.

Skutečnost, že kontejnery, na rozdíl od virtuálních systémů, nepotřebují vlastní jádro, se obvykle uvádí jako jedna z hlavních výhod. V případě Dockeru to ale představuje i bezpečnostní riziko, protože kontejnery Docker lze spouštět pouze s oprávněním roota.

To umožňuje procesům běžícím v kontejnerech přistupovat k jádru s právy roota a potenciálně tak zaútočit na hostitelský systém.

První rozdíl je patrný hned při prvním použití. Zatímco Docker vyžaduje, aby byl nejprve spuštěn démon Docker, kontejner Podman lze spustit přímo z příkazové řádky. Není tedy potřeba žádný proces na pozadí a aplikace se spustí pouze v případě potřeby.

Z hlediska bezpečnosti je to velká výhoda, protože Podman je méně náchylný k útokům, pokud démon nemusí běžet 24/7 s oprávněními superuživatele. Podman nepotřebuje proces na pozadí díky své odlišné architektuře.

Zatímco Docker pracuje na principu klient-server, kde klient Docker komunikuje s démonem Docker prostřednictvím API, Podman využívá model fork-exec. Každý kontejner běží jako podřízený proces Podmanu.

Uživatelský jmenný prostor se vytvoří při prvním spuštění Podmanu s běžnými uživatelskými právy. V uživatelském jmenném prostoru pak Podman běží s právy roota a má práva připojovat systémy souborů a vytvářet kontejnery.

Kontejner Podman má tedy pouze taková oprávnění, která má provádějící uživatel. Použití uživatelských jmenných prostorů znamená, že každý uživatel může vytvářet a spravovat své vlastní kontejnery, které nejsou viditelné pro ostatní uživatele ani superuživatele.

Protože Podman funguje nezávisle na Dockeru, mají vývojáři velkou volnost a mohou reagovat na požadavky komunity. Mezi zajímavé doplňky Podmanu patří příkaz mount/unmount a integrace se systemd.

Hostitel může pomocí příkazu mount/unmount připojit souborový systém kontejneru, například pro přístup k souborům nebo jejich úpravu a následně je odpojit.

Zatímco monitorování kontejnerů pomocí systemd s Dockerem nefunguje kvůli démonu, u Podmanu lze kontejnery spouštět, monitorovat a dokonce restartovat prostřednictvím systemd.

Podman navíc nabízí příkaz podman generovat systemd, který vygeneruje odpovídající službu systemd pro daný kontejner a usnadní tak uživateli vytváření služeb systemd. To znamená, že je k dispozici integrace s hostitelským systémem.

Dalším zásadním rozdílem mezi Podmanem a Dockerem je, že Docker, díky své schopnosti vytvářet vnitřní síť, nemění pravidla brány firewall ani aktuální nastavení dnsmasq. Naproti tomu Docker musí pravidla brány firewall přepsat, aby umožnil komunikaci mezi kontejnery.

Podman Docker
Architektura Daemon less Daemon
Servis Management Systemd Docker Engine
Firewall Compatibility Respektuje pravidla firewallu Přepisuje pravidla firewallu
Platforma Nativní podpora pro Linux Linux, Windows a Mac

Kdy byste měli přejít z Dockeru na Podman

Pokud nasazujete kontejnery v prostředí založeném na RHEL, pak vám nezbývá nic jiného než používat Podman, protože je to nativní nástroj RHEL. Pokud máte menší nasazení s několika kontejnery, můžete také zvážit migraci na Podman nebo jej zvolit jako primární nástroj namísto Dockeru.

Pokud však máte složitější požadavky, více kontejnerů a spoustu koordinačních kontejnerů s docker-compose/podman-compose přes síť, je lepší používat Docker, protože si s prací v síti poradí lépe.

Podobně, pokud teprve začínáte objevovat svět kontejnerů, je Docker lepší volbou, protože je stabilnější, má dobrou dokumentaci a jeho křivka učení je ve srovnání s Podmanem, který stále postrádá stabilitu a nemá přesně definovanou dokumentaci, mírnější.

Migrace z Podmanu na Docker

Pokud pracujete na příkazové řádce, je poměrně snadné přejít z Docker Engine na Podman. V nejjednodušší formě funguje alias $ docker=podman.

Samozřejmě se předpokládá, že máte v systému nainstalován potřebný software. V případě Linuxu to obvykle není problém, pro komerčně dostupné distribuce jsou k dispozici hotové softwarové balíčky.

Windows a macOS mezi podporované operační systémy nepatří. Přístup přes aliasy funguje, protože mnoho příkazů Dockeru má svůj ekvivalent v Podmanu.

Existují ale i výjimky, protože některé příkazy Dockeru nemají v Podmanu svůj protějšek. Podobně se některé příkazy v Dockeru a Podmanu chovají odlišně. V současné době to ovlivňuje pouze manipulaci s již nastavenými svazky.

Přechod je o něco složitější, pokud používáte grafické nástroje, jako je Docker Desktop. Týká se to především vývojářů, kteří pracují na Windows nebo macOS.

Uživatelé Docker Desktopu si budou muset zvyknout na příkazovou řádku, totéž platí pro Docker compose. Existuje ale projekt podman-compose. Software napsaný v Pythonu slouží jako náhrada za Docker compose.

Závěrečná slova

Nahrazení Dockeru Podmanem lze považovat za téměř hotovou záležitost. Pro uživatele i správce je většina aspektů této změny snadná. Mnohé funkce Dockeru mají v Podmanu své ekvivalenty.

Skutečnou výhodou je absence singulárního procesu démona a práv roota, nemluvě o přirozeném používání skupin kontejnerů. Je ale potřeba zmínit, že hlavní technologií v oblasti kontejnerů zůstává Docker, což se ale s velkou pravděpodobností z dlouhodobého hlediska změní.

Můžete se také podívat na některé příkazy Dockeru pro správu kontejnerů.