Podman vs Docker: Který si vybrat?

Pokud jste ve světě virtualizace a kontejnerizace, pravděpodobně jste se setkali s Podmanem a Dockerem a možná vás zajímá, jak se od sebe liší.

V tomto příspěvku prozkoumáme rozdíly mezi Dockerem a Podmanem a pokusíme se zjistit, který z nich bude pro vás tou správnou volbou!

Přístavní dělník

Docker je technologie kontejnerizace, která usnadňuje správu závislostí v rámci projektu na všech úrovních (vývoj a nasazení).

Mechanismus Dockeru, který je dostupný na Linuxu, Windows a Mac OS, se soustředí na kontejnery a jejich orchestraci, a to je místo, kde se kontejnerizace liší od virtualizace.

Docker má dva hlavní stavební bloky: Docker CLI a Docker Daemon.

Docker Daemon:

Je to neustálý proces na pozadí, který pomáhá spravovat obrazy, kontejnery, sítě a svazky úložiště Docker. Docker používá své rozhraní Docker Engine REST API k interakci s démonem Docker, ke kterému se přistupuje prostřednictvím protokolu HTTP.

Docker CLI:

Obrazový kredit: Redhat

Je to klient příkazového řádku Docker pro interakci s démonem Docker. To je to, co používáte, když spustíte jakýkoli příkaz Docker.

Provoz Dockeru je založen na linuxovém jádře a funkcích tohoto jádra, jako jsou cgroups a jmenné prostory. Tyto funkce oddělují procesy, aby mohly běžet nezávisle, protože účelem kontejnerů je spouštět více procesů a aplikací odděleně.

To umožňuje optimalizovat využití infrastruktury bez snížení úrovně zabezpečení ve srovnání se samostatnými systémy.

Všechny kontejnerové nástroje, jako je Docker, přicházejí s modelem nasazení založeným na obrázcích. Tento model zjednodušuje sdílení aplikace nebo sady služeb napříč více prostředími.

Docker navíc pomáhá automatizovat nasazení aplikací v prostředí kontejneru. Pomocí těchto různých nástrojů uživatelé získají plný přístup k aplikacím a mohou urychlit nasazení, ovládat verze a přiřazovat je.

Podman

Podman (POD MANager) vytváří, spouští a spravuje kontejnery OCI a obrazy kontejnerů. Byl vyvinut společností Red Hat a původně určen pro svůj podnikový Linux 8. Používá se pro správu kontejnerů a funguje jako oficiální nástupce Dockeru.

  Může můj iPhone nebo iPad dostat virus?

Red Hat následně ukončil podporu pro Docker, ale ujistil, že přechod bude pro uživatele snadný, protože Podman je založen na Dockeru, ačkoli původně byl zamýšlen pouze jako ladicí nástroj.

Spravuje celý ekosystém kontejnerů pomocí knihovny libpod. Protože Podman funguje pouze na platformách Linux, REST API a klienti jsou v současné době ve vývoji, aby umožnily systémům Mac a Windows volat službu.

V současnosti však existuje vzdálený klient založený na Varlinku, který funguje na platformách Mac nebo Windows a umožňuje vzdálenou komunikaci se serverem Podman založeným na Linuxu. Knihovna libpod podporuje několik metod pro bezpečné nahrávání obrázků, včetně důvěryhodnosti a ověřování obrázků.

Podporuje také moduly pro společnou správu skupin kontejnerů a více formátů obrázků, včetně formátů obrázků OCI a Docker.

Ve velmi malých a spravovatelných prostředích může Podman sloužit dokonce jako předchůdce Kubernetes. Překlenuje propast mezi jedinečnou správou jednotlivých instancí z prvních let humbuku kontejnerů a moderní orchestrací s Kubernetes.

Ambiciózní uživatelé kontejnerů si již mohou užít další úroveň s pody. Konstrukce a provoz clusteru Kubernetes již nejsou nutné. V nejjednodušším případě lze nově navržené pody testovat a vylepšovat v jednotlivých provozech. I následný převod na Kubernetes je možný.

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

Současné verze Podman mohou dokonce vytvářet konfigurační soubory pro systemd – lahůdka pro každého, kdo používá všudypřítomného nástupce init pro orchestraci kontejnerů.

Podman vs Docker: Rozdíly

Docker se rychle etabloval jako koníček pro správu kontejnerů. Docker má však mnoho výhod a především rychle rostoucí repertoár obrázků, ale i nevýhody a možná bezpečnostní rizika. Navíc Docker již není podporován jako kontejner pro Kubernetes.

To, že kontejnery na rozdíl od virtuálních systémů nevyžadují své jádro, je obvykle považováno za jednu z velkých výhod. S Dockerem však představuje velké bezpečnostní riziko, protože kontejnery Docker lze spouštět pouze s oprávněními root.

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

  Jak přistihnout někoho, kdo podvádí na Snapchatu

První rozdíl je patrný 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ého řádku. Neexistuje tedy žádný proces na pozadí a aplikace se spustí pouze v případě potřeby.

Z hlediska zabezpečení je to dobré, protože Podman je méně zranitelný vůči útoku, pokud démon nemusí běžet 24/7 s oprávněními superuživatele. Podman nevyžaduje proces na pozadí kvůli architektuře, která se zásadně liší od Dockeru.

Zatímco Docker se řídí modelem klient-server, kde klient Docker komunikuje s démonem Docker prostřednictvím API, Podman se řídí modelem fork-exec. Každý kontejner běží jako podřízený proces Podman.

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

V souladu s tím má kontejner Podman pouze práva, 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, ale ty nejsou viditelné pro ostatní uživatele a superuživatele.

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

Hostitel může použít příkaz mount/unmount k připojení souborového systému kontejneru, například pro přístup k souborům nebo jejich změnu a poté je znovu odpojit.

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

Podman navíc poskytuje příkaz podman generovat systemd, který vygeneruje odpovídající službu systemd pro příslušný kontejner a ulehčí tak uživateli vytváření služeb systemd, což znamená, že je k dispozici integrace na hostitelský systém.

Dalším zásadním rozdílem mezi Podmanem a Dockerem je to, že Docker nemění pravidla brány firewall ani aktuální instalaci dnsmasq kvůli své schopnosti vytvořit vnitřní síť. Naproti tomu Docker musí přepsat pravidla brány firewall, aby umožnil komunikaci mezi kontejnery.

PodmanDockerArchitecture DaemonDaemon lessServis Management SystemdDocker EngineFirewall CompatibilityPřepisuje pravidla firewalluRespektuje pravidla firewalluPlatformníNativní podpora pro linuxLinux, Windows a Mac

  Své AirPods za 160 $ ​​budete muset vyměnit každých pár let

Kdy byste měli migrovat z Dockeru na Podman

Pokud nasazujete kontejnery v prostředí založeném na RHEL, v takovém případě nemáte mnoho možností kromě použití Podman, protože je nativní RHEL. Pokud máte malá nasazení s několika kontejnery, můžete také migrovat nebo zvolit Podman před Dockerem.

Pokud však chcete být ještě složitější, mějte více kontejnerů a hromadu koordinačních kontejnerů s docker-compose/podman-compose přes síť. Je lepší používat Docker, protože mnohem lépe zvládá práci v síti.

Podobně, pokud právě začínáte vstupovat do světa kontejnerů, v tom případě je Docker lepší volbou, protože je stabilní, dobře zavedený s náležitou dokumentací a má mělkou křivku učení ve srovnání s Podmanem, který stále postrádá stabilitu a nemá přesně definovanou dokumentaci.

Migrace z Podman do Docker

Pokud jste na příkazovém řádku, je docela snadné přepnout z Docker Engine na Podman. Ve své nejjednodušší podobě většinou funguje alias $ docker=podman.

To samozřejmě předpokládá, že je v systému nainstalován příslušný software. V případě Linuxu to také není problém; pro komerčně dostupné distribuce jsou k dispozici hotové softwarové balíčky.

Windows nebo macOS mezi podporované operační systémy nepatří. Přístup aliasů funguje, protože mnoho příkazů Dockeru má ekvivalent Podman.

Existují však také výjimky, protože některé příkazy Dockeru nemají ve světě Podman žádný protějšek. Podobně se některé příkazy chovají jinak v Dockeru než ve vesmíru Podman. V tuto chvíli to ovlivňuje pouze manipulaci s již nastavenými svazky.

Přepínání je o něco obtížnější, když se používají grafické nástroje, jako je Docker Desktop. Mělo by se to dotknout zejména těch vývojářů, kteří pracují s Windows nebo macOS.

Uživatelé Docker Desktopu si budou muset zvyknout na příkazový řádek a totéž platí pro Docker compose. Existuje však projekt podman-compose. Software napsaný v Pythonu slouží jako náhrada za Docker compose.

Závěrečná slova

Nahrazení Dockera Podmanem lze považovat za téměř hotové. Pro uživatele a správce je většina aspektů této změny snadná. Mnoho funkcí Dockeru má v Podmanu stejné 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ů. Sluší se však zmínit, že hlavní technologií ohledně kontejnerů zůstává Docker, což se ale s největší pravděpodobností z dlouhodobého hlediska změní.

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