Úvod
Kontejnerizace nabízí vývojářům způsob, jak efektivně testovat, sestavovat a nasazovat aplikace. Mezi výhody kontejnerů patří přenositelnost, konzistence, efektivita a menší režie ve srovnání s tradičními virtuálními počítači.
Po dlouhou dobu je Docker nejoblíbenějším enginem pro správu kontejnerů na trhu. Jak se však kontejnerizace stala ve světě DevOps standardem, objevili se konkurenti jako Podman.
Tento článek porovná dva nástroje pro správu kontejnerů – Docker a Podman. Pomůže vám také vybrat správný motor pro vaše potřeby.

Podman vs Docker:Definice
Co je Docker?
Docker je oblíbená platforma pro vytváření, nasazování a správu kontejnerů. Kontejnery Docker umožňují vývojářům aplikovat systémově agnostický přístup k nasazení softwaru. Vzhledem k tomu, že Docker spouští stejné kontejnery dockerů na jakémkoli operačním systému, kontejnerizované aplikace jsou multiplatformní.
Co je Podman?
Podman je kontejnerový engine bez démonů a kořenů vyvinutý společností RedHat, navržený jako alternativa k Dockeru. Modulární konstrukce umožňuje společnosti Podman používat jednotlivé systémové komponenty pouze v případě potřeby. Jeho přístup ke správě kontejnerů bez kořenů umožňuje, aby kontejnery spouštěli uživatelé bez oprávnění root.
Podman vs. Docker:Srovnání
V následující části se článek bude věnovat podobnostem a rozdílům mezi Podmanem a Dockerem do hloubky.
Docker | Podman | |
---|---|---|
Démon | Používá démona Docker | Architektura bez démonů |
Root | Spouští kontejnery pouze jako root | Spouští kontejnery jako root i jako non-root |
Obrázky | Umí vytvářet obrázky kontejnerů | Používá Buildah k vytvoření obrázků kontejnerů |
Monolitická platforma | Ano | Ne |
Docker-swarm | Podporováno | Nepodporováno |
Docker-compose | Podporováno | Podporováno |
Běží nativně na | Linux, macOS, Windows | Linux, macOS, Windows (s WSL) |
Architektura
Docker využívá architekturu klient-server. Démon Docker je trvalý proces na pozadí, který spravuje kontejnery a udržuje komunikaci mezi klientem a serverem. Výstup docker version
zobrazí samostatné sekce pro klientskou a serverovou verzi.

Podman spravuje kontejnery pomocí modelu fork-exec. Protože Podman je proces a nepoužívá paradigma klient-server, nevyžaduje ke spuštění démona. Kontejnery Podman jsou podřízené procesy hlavního procesu Podman. Pomocí podman version
ukazuje, že Podman uvádí pouze jedno číslo verze.

Hlavní jednotkou architektury Podman je kontejner. Podman však také představuje koncept pod. Stejně jako moduly Kubernetes jsou moduly Podman skupiny jednoho nebo více kontejnerů, které sdílejí stejné systémové prostředky. Modul se skládá z hlavního kontejneru a kontejnerů postranního vozíku, které jej podpírají.
Snadné použití
Docker obsahuje komplexní sadu přímých a intuitivních příkazů. Pomocí Dockeru mohou vývojáři snadno vytvářet, nasazovat a spravovat kontejnerizované aplikace.
Podman byl vytvořen tak, aby hladce nahradil Docker v pracovním postupu vývoje softwaru, takže jeho příkazy jsou většinou stejné jako příkazy Dockeru. Například docker pull
příkaz se změní na podman pull
:

Kromě toho, že Podman zdědil snadnost použití Dockeru, podobnost mezi těmito dvěma nástroji také znamená, že migrace z Dockeru na Podman vyžaduje jen malé úsilí.
Kořenová oprávnění
Docker vyžaduje oprávnění root ke komunikaci s démonem, protože démon vždy běží jako uživatel root. Pokud uživatel není členem docker
Unix, musí spouštět příkazy Docker pomocí příkazu sudo. Spuštění Dockeru v režimu rootless je možné, ale vyžaduje instalaci dalších balíčků a specifických ovladačů úložiště.
Podman je podle návrhu bez kořenů. Díky modulární architektuře je možné udělit různá oprávnění různým uživatelům.
Obrázky budov
Docker používá docker build
příkaz k vytvoření obrázků kontejneru z dockerfile a kontextu sestavení. Kontext sestavení je sada souborů zadaných v dockerfile, který se používá při vytváření kontejneru.
Podman obsahuje podman build
příkaz, který pracuje se syntaxí podobnou docker build
.

Podman však používá Buildah , další open-source nástroj, k provedení procesu budování. Když podman build
je spuštěn, buildah bud
(build-using-dockerfile) je volán příkaz k emulaci docker build
příkaz.
Spuštěné kontejnery
Když je Docker přijme příkaz spuštění dockeru, provede několik akcí:
- Zkontroluje, zda uživatel zadaný obrázek lokálně existuje. Pokud ne, stáhne obrázek z nakonfigurovaných registrů.
- Vytvoří nad obrazem zapisovatelnou vrstvu kontejneru.
- Spustí kontejner.
Provoz kontejnerů s Podman se provádí pomocí podman run
příkaz, který funguje stejně jako docker run
. Jednou z hlavních výhod Podman ve srovnání s Dockerem je, že Podman se plně integruje s systemd ve výchozím stavu. To umožňuje Podmanovi spouštět systemd v kontejneru hned po vybalení.
Docker Swarm a Docker Compose
Docker Swarm je platforma pro orchestraci kontejnerů používaná ke správě kontejnerů Docker. Umožňuje vývojářům spouštět cluster uzlů Docker a nasazovat škálovatelnou aplikaci bez nutnosti dalších závislostí.
Podman nepodporuje Docker Swarm. Uživatelé Podman však mohou používat nástroje, jako je Nomad, který je dodáván s ovladačem Podman.
Docker Compose je nástroj pro správu prostředí vícekontejnerových aplikací. Automatizuje spouštění a správu kontejnerů, díky čemuž je užitečný jako součást životního cyklu vývoje softwaru (SDLC).
Od verze 3.0 Podman podporuje Docker Compose. Předchozí verze Podman neměly způsob, jak simulovat démona Docker nezbytného pro fungování Docker Compose, takže používaly méně uživatelsky přívětivé alternativy, jako je Podman Compose. Podman 3.0 však zavádí podman.socket
, soket UNIX, který nahrazuje démona Docker.
Zabezpečení
Docker je podle návrhu považován za bezpečný nástroj, zvláště když procesy provádějí neprivilegovaní uživatelé. Spouštění kontejnerů v privilegovaném režimu se z hlediska zabezpečení nedoporučuje.
Stejně jako jakýkoli jiný nástroj se Docker stane ještě bezpečnější, pokud uživatelé použijí osvědčené bezpečnostní postupy. Zabezpečení Dockeru lze dále zvýšit povolením aplikací AppArmor, SELinux a GRSEC.
Podman Architektura fork-exec z něj dělá ještě bezpečnější řešení než Docker. Model fork-exec umožňuje systému správně zaznamenat uživatele upravující systémové soubory, zatímco přístup klient-server používaný Dockerem nikoli. Proto Podman umožňuje podrobnější protokolování auditu.
Rootless kontejnery jsou další funkcí Podman, která zlepšuje celkové zabezpečení systému. Možnost přiřadit konkrétní oprávnění konkrétním uživatelům umožňuje správcům lépe řídit přístup ke kritickým komponentám serveru.
Podman vs Docker:Jak si vybrat
Vyberte Docker, pokud:
- Dáváte přednost dobře zdokumentovanému nástroji . Hlavní výhodou Dockeru oproti Podmanu je jeho široké použití. Velké množství podpory související s Dockerem dostupné online znamená, že vyhledávání na internetu může vyřešit mnoho potenciálních problémů.
- Potřebujete podporu orchestrace kontejnerů . Podpora Docker Swarm je další důležitou výhodou Dockeru. Uživatelé, kteří chtějí organizovat kontejnery Podman, se musí uchýlit k alternativám, které nejsou tak bohaté na funkce jako Docker Swarm, nebo se ponořit do Kubernetes, který má strmou křivku učení a může se ukázat jako příliš složitý pro jednodušší projekty.
Vyberte Podman, pokud:
- Důraz kladete na bezpečnost . Podmanova architektura je ze své podstaty bezpečnější než architektura Docker.
- Plánujete se přestěhovat do Kubernetes . Podman představuje koncept podu, díky kterému je dobrým výchozím bodem pro Kubernetes.
Protože Docker i Podman jsou kompatibilní s OCI, je také možné je používat vedle sebe. Například robustnost Dockeru lze využít na vývojových strojích, zatímco prostředí dev, int a prod mohou těžit ze zvýšené bezpečnosti Podman.