Podman je kontejnerový motor, který je kompatibilní se specifikací OCI Containers. Podman je součástí RedHat Linuxu, ale lze jej nainstalovat i na jiné distribuce.
Protože je kompatibilní s OCI, lze Podman použít jako náhradu za známější runtime Docker. Většinu příkazů Dockeru lze přímo přeložit na příkazy Podman.
Zde je pohled na to, jak se obě běhová prostředí skládají.
Co je runtime?
Pro mnoho lidí je „kontejner“ stále „dockerovým kontejnerem“. Toto není přesné znázornění aktuálního kontejnerového ekosystému. Docker vytváří obrazy kontejnerů OCI, které lze použít s jinými kompatibilními runtimemi. Kubernetes je jeden příklad, zatímco Podman je jiný.
V důsledku toho mají Podman a Docker překrývající se základní funkce. Oba vytvářejí obrázky, které může druhý použít ke spouštění kontejnerů. Tyto dva běhové moduly pak k základním funkcím kontejnerizace přidají své vlastní specializace.
Jak nainstalovat Podman
Pokud používáte RedHat Linux, Podman je v extras
úložiště. Použijte subscription-manager
pro přidání úložiště. Poté budete moci použít yum
k instalaci Podmana.
su - subscription-manager repos --enable rhel-7-server-extras-beta-rpms yum -y install podman
Většina dalších populárních distribucí Linuxu také zahrnuje Podman ve svých výchozích úložištích. Můžete apt install podman
, dnf install podman
nebo pacman -S podman
k instalaci.
Práce s kontejnery a obrázky
Podmanovo CLI je záměrně sladěno s Dockerovým. To znamená, že k interakci s kontejnery Podman můžete používat známé příkazy Dockeru:
podman pull my-image:latest podman run my-image:latest --name my-container podman ps podman rm my-container
Podman by měl být uživatelům Dockeru okamžitě známý. Můžete alias docker
na podman
a nevšimnout si rozdílu v každodenním používání. Samozřejmě, že ne všechny funkce jsou dostupné – pokus o použití příkazů Docker Swarm vyvolá chybu, protože Podman nemá nic ekvivalentního k Swarmu.
V čem je Podman jiný?
I když to vypadá podobně jako Docker, Podman má několik rozlišovacích rozdílů. První a pravděpodobně nejvýznamnější je jeho architektura. Podman je bez démonů —neexistuje žádný dlouhodobý proces správy vašich kontejnerů.
Když spustíte podman
příkazu, propojujete se přímo s procesem, který spouští vaše kontejnery a načítá vaše obrázky. CLI Dockeru je závislé na připojení k démonu Docker. CLI posílá příkazy démonovi a démon na ně poté působí a vytváří kontejnery.
Podmanův model pomáhá řešit některé obavy týkající se zabezpečení Dockeru. Absence démona výrazně snižuje plochu útoku na kontejner. Pokud potřebujete vzdálený přístup, Podman zpřístupní REST API, které vám umožní komunikovat se všemi podporovanými typy zdrojů.
Pody
Podman přichází s jedinečnými funkcemi, které Docker zcela postrádá. V Podmanu mohou kontejnery tvořit „lusky“, které fungují společně. Je to podobné jako u konceptu Kubernetes Pod.
Chcete-li vytvořit pod, použijte pod create
příkaz:
podman pod create --name my-pod
Kontejnery se do Podů přidávají zahrnutím --pod
vlajku pomocí podman run
:
podman run --pod my-pod --name image-1 my-image:latest podman run --pod my-pod --name image-2 another-image:latest
Kontejnery v podu lze spravovat souhrnně pomocí podman pod
příkazy:
podman kill my-pod # Kill all containers podman restart my-pod # Restart all containers podman stop my-pod # Stop all containers
Koncept pod je výkonný, protože vám umožňuje spravovat více kontejnerů dohromady. Můžete vytvořit kontejnery aplikací, jako je frontend, backend a databáze, přidat je do podu a spravovat je společně.
Nejblíže se k tomu Docker dostane s Compose. Použití Compose vyžaduje, abyste napsali docker-compose.yml
a použijte samostatný docker-compose
binární. Podman vám umožňuje vytvářet Pody pomocí jednoho příkazu, aniž byste museli opustit terminál.
Když potřebujete exportovat definici podu, Podman vytvoří manifest YAML kompatibilní s Kubernetes. Můžete vzít manifest a použít jej přímo na cluster Kubernetes. Tím se zužuje propast mezi spuštěním kontejneru ve vývoji a jeho spuštěním do produkční infrastruktury.
podman generate kube
Kontejnery bez kořenů
Podman podporuje kontejnery bez kořenů. To vám pomůže uzamknout zabezpečení tím, že zabrání spuštění kontejnerů jako root
hostitele uživatel. Docker nyní podporuje režim bez root jako možnost konfigurace démona. Podman měl rootless před Dockerem a klade větší důraz na jeho použití.
Nejprve nainstalujte slirp4netns
:
yum install slirp4netns
Dále nakonfigurujte množství síťových jmenných prostorů s rozsahem uživatele:
echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.conf sysctl -p /etc/sysctl.d/userns.conf
Tento příkaz umožňuje použití síťových jmenných prostorů, aniž by byl root
.
Nyní jste připraveni spustit kontejner bez kořenů! Připojte se k serveru jako běžný uživatel. Spusťte nový kontejner pomocí podman run
. Bude vytvořen s UID vašeho uživatelského účtu namísto root
.
Kromě plně bezkořenových jmenných prostorů, podman
je ve výchozím nastavení omezena na aktuálního uživatele. Vaše obrázky a kontejnery jsou uloženy v $HOME
vašeho uživatele složka. Když spustíte podman ps
nebo podman images
, uvidíte pouze vaše obsahu namísto každého zdroje v systému.
Závěr
Podman je kontejnerový runtime kompatibilní s OCI, který funguje bez démona. CLI implementuje všechny základní příkazy Dockeru. Můžete snadno přejít na Podman nebo jej použít spolu se stávající instalací Docker.
Na rozdíl od Dockeru má Podman prvotřídní podporu pro správu více kontejnerů. Model Pod usnadňuje práci se zásobníkem služeb. Všechny přidružené kontejnery můžete zastavit, restartovat a odstranit pomocí příkazů na úrovni pod.
Podman je také připraven pomoci vám přejít na služby orchestrace kontejnerů. Schopnost exportovat YAML kompatibilní s Kubernetes dělá Podman blíže k mnoha kontejnerovým produkčním prostředím. Vývojáři a operátoři mohou používat stejný nástroj ke správě svých kontejnerů, což umožňuje lepší spolupráci a flexibilitu.