Podman je bezplatná kontejnerová platforma s otevřeným zdrojovým kódem vytvořená pro vývoj, správu a nasazení kontejnerů a modulů v prostředí Linuxu. Redhat vyvinul Podman v roce 2018. Jde o kontejnerizační engine, který funguje jinak než Docker. Podman není závislý na démonovi, aby fungoval, na rozdíl od Dockeru, který používá Docker CLI a Docker daemon. Být závislý na démonovi vede k jedinému bodu selhání.
Podman je navržen podle standardů OCI (Open Container Initiative), které umožňují Podmanovi přímo interagovat s jádrem, kontejnery a obrázky. Je také bezpečnější než Docker, protože nevyžaduje přístup root. Podman lze použít jako náhradu za Docker, protože oba jsou kompatibilní s OCI.
Tento článek vám ukáže, jak nainstalovat Podman a používat jej k vytváření a správě obrázků a kontejnerů.
Předpoklady
-
Server Rocky Linux
-
Uživatel bez sudo s právy root.
-
Ujistěte se, že je server aktualizován.
$ sudo dnf update
Nainstalovat Podman
Podman je součástí container-tools
modul, spolu s Buildah a Skopeo. Je také k dispozici v úložišti AppStream pro Rocky Linux 8. Budeme používat metodu modulu.
Nainstalujte Podman pomocí dnf module
příkaz.
$ sudo dnf module install container-tools
Zkontrolujte verzi Podman, zda je správně nainstalována.
$ podman --version podman version 3.2.3
Vyhledat a stáhnout obrázky kontejnerů
Chcete-li vyhledat obrázek Nginx, použijte následující příkaz.
$ podman search nginx
Ve výstupu uvidíte název registru, ze kterého obrázek pochází, a popis obrázků.
Ke stažení obrázku použijte jeden z následujících příkazů.
$ podman pull docker.io/library/nginx OR $ podman pull nginx
Stažené obrázky si můžete prohlédnout pomocí následujícího příkazu.
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest f8f4ffc8092c 3 days ago 138 MB
Spustit kontejnery
Pomocí následujícího příkazu spusťte kontejner pomocí obrazu Nginx. Kontejner jsme pojmenovali jako webový server .
$ podman run -d --name webserver nginx
Můžeme použít stejný obrázek ke spuštění dalšího kontejneru s jiným názvem.
$ podman run -d --name webserver2 nginx
Můžeme spustit neomezený počet kontejnerů pomocí stejného obrázku.
Vypsat a zastavit kontejnery
Chcete-li zobrazit seznam všech běžících kontejnerů, použijte následující příkaz.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 31 seconds ago Up 31 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 3 seconds ago webserver2
Zastavte běžící kontejner.
$ podman stop webserver webserver
Ověřte, zda se zastavil.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Chcete-li vypsat všechny kontejnery, včetně zastavených, musíte použít -a
vlajka.
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Exited (0) 35 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Spuštění zastaveného kontejneru
Ke spuštění zastaveného kontejneru použijte následující příkaz.
$ podman start webserver webserver
Ověřte, zda se spustilo.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 3 minutes ago Up 16 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Up 2 minutes ago webserver2
Smazat kontejner
Než kontejner smažete, musíte jej zastavit.
$ podman stop webserver2
Smažte kontejner.
$ podman rm webserver2
Spuštěný kontejner můžete odstranit pomocí --force
vlajka.
$ podman rm webserver2 --force 35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
Zabít kontejner
Zastavení a zabití kontejneru jsou dvě různé věci, které nakonec dosáhnou stejné věci. Rozdíl je v tom, že zastavení kontejneru jej elegantně vypne, zatímco zabití kontejneru jej násilně ukončí, což má za následek ztrátu dat.
K ukončení kontejneru použijte následující příkaz.
$ podman kill -s 9 webserver2
Výše uvedený příkaz používá SIGNAL 9 (SIGKILL)
možnost zabít kontejner.
Chcete-li zabít všechny kontejnery, použijte --all
nebo -a
příznak a chcete-li zabít pouze nejnovější kontejner, použijte --latest
nebo -l
vlajka.
Smazat obrázek
Obrázky můžete smazat pomocí rmi
příkaz.
$ podman rmi registry.redhat.io/rhel8/rsyslog
Více obrázků můžete smazat tak, že je oddělíte čárkami.
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
Chcete-li odstranit všechny obrázky ve vašem systému, použijte -a
vlajka.
$ podman rmi -a
Zobrazit protokoly kontejneru
Chcete-li zobrazit protokoly kontejneru, použijte následující příkaz.
$ podman logs webserver /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up ......
Záznamy můžete omezit na posledních 5 řádků pomocí --tail
možnost.
$ podman logs --tail=5 webserver 2021/10/05 10:13:52 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/10/05 10:13:52 [notice] 1#1: OS: Linux 4.18.0-305.19.1.el8_4.x86_64 2021/10/05 10:13:52 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 262144:262144 2021/10/05 10:13:52 [notice] 1#1: start worker processes 2021/10/05 10:13:52 [notice] 1#1: start worker process 23
Ve výchozím nastavení nebudete mít v protokolech žádná časová razítka. Použijte -t
příznak pro přidání časových razítek do vašich protokolů.
$ podman logs -t webserver 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ 2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf .....
Kontrola kontejnerů
Kontrola kontejneru vytiskne informace o kontejneru.
$ podman inspect webserver [ { "Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59", "Created": "2021-10-05T09:25:01.784949744Z", "Path": "/docker-entrypoint.sh", "Args": [ "nginx", "-g", "daemon off;" ], "State": { "OciVersion": "1.0.2-dev", "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4423, ....
Výchozí příkaz vytiskne dlouhý výstup ve formátu JSON. Chcete-li filtrovat výstup, musíte použít --format
volba. Chcete-li zjistit, kdy byl kontejner spuštěn, spusťte následující příkaz.
$ podman inspect webserver --format '{{.State.StartedAt}}' 2021-10-05 10:13:52.794806322 +0000 UTC
Přístup k shellu kontejneru
K výzvě Shell libovolného kontejneru se dostanete pomocí exec
možnost.
$ podman exec -it webserver2 /bin/bash
Pody
Podman má unikátní funkci, kterou Docker postrádá. Podman může vytvářet lusky z kontejnerů, které fungují společně. To vám umožní spravovat více kontejnerů dohromady.
K vytvoření podu použijte následující příkaz.
$ podman pod create --name mypod
Přidejte kontejnery do nově vytvořeného pod.
$ podman run --pod mypod --name myimage1 image:latest $ podman run --pod mypod --name myimage2 diff-image:latest
Nyní můžete spravovat kontejnery pomocí jednoduchých jednořádkových příkazů.
$ podman kill mypod # Kill all containers $ podman restart mypod # Restart all containers $ podman stop mypod # Stop all containers $ podman pod ps # List all pods $ podman pod top mypod # Display running processes in a pod $ podman pod inspect mypod # Inspect a Pod $ podman pod rm mypod # Remove the pod
Závěr
Tímto končí náš tutoriál o instalaci a používání aplikace Podman ke spouštění kontejnerů. S Podmanem můžete dělat spoustu věcí, které jsme neprobrali. Pokud máte nějaké dotazy, napište je do komentářů níže.