Jak používat Podman, Dockerfile a Ubuntu: Bezpečná a moderní správa kontejnerů v Linuxu

目次

1. Úvod

Evoluce a rostoucí význam technologie kontejnerů

V posledních letech technologie kontejnerů rychle získala na významu v oblasti vývoje aplikací a provozních operací. Zejména schopnost sladit vývojové a produkční prostředí zajišťuje reprodukovatelnost operací, což je klíčová výhoda, která si získala silnou podporu mezi inženýry.

I když Docker zůstává nejpůsobivější platformou pro kontejnery, Podman přitahuje stále větší pozornost jako moderní alternativa. Podman nabízí téměř identické rozhraní příkazového řádku (CLI) jako Docker, ale vyniká svou daemonless a lehkou architekturou a podporou rootless (ne-root) provozu.

Proč „Podman + Dockerfile + Ubuntu“?

V tomto článku vysvětlíme, jak kombinovat Podman, Dockerfile a Ubuntu pro moderní workflowy kontejnerů na Linuxu.

  • Ubuntu je oblíbená distribuce Linuxu používaná od začátečníků po pokročilé uživatele,
  • Dockerfile slouží jako návrh pro budování obrazů kontejnerů,
  • a Podman je nástroj další generace navržený pro flexibilní a bezpečné řízení těchto obrazů.

S rostoucím povědomím o bezpečnosti se přístup použití Podmanu s Dockerfilem na Ubuntu stále častěji adoptuje jak jednotlivými vývojáři, tak týmami v podnicích.

Cíl a cílová skupina

Cílem tohoto článku je poskytnout jasný, krok za krokem průvodce pro budování praktických kontejnerů s Podmanem a Dockerfilem na Ubuntu.

Tento článek je určen pro čtenáře, jako jsou:

  • Vývojáři zkušení s Dockerem, kteří jsou zvědaví na Podman
  • Uživatelé Ubuntu hledající bezpečné řízení kontejnerů
  • Inženýři, kteří chtějí začlenit technologie kontejnerů do svého workflow
  • Začátečníci zajímající se o psaní Dockerfile a budování s Podmanem

Pokryjeme vše od základů a tipů na řešení problémů po klíčové rozdíly s Dockerem a jak migrovat.

2. Co je Podman?

Přehled Podmanu

Podman (Pod Manager) je nástroj pro řízení kontejnerů další generace vyvinutý komunitou vedenou Red Hat. Stejně jako Docker dokáže budovat, spouštět a řídit kontejnery kompatibilní s OCI, ale jeho design a architektura se liší významně.

Největší funkcí Podmanu je, že nevyžaduje pozadí daemon. To umožňuje lehký a bezpečný provoz. Podman také podporuje rootless režim, který umožňuje běžným uživatelům řídit kontejnery bez zvýšených oprávnění. CLI je vysoce kompatibilní s Dockerem, takže většina příkazů je téměř identická.

Klíčové funkce Podmanu

Zde jsou některé pozoruhodné funkce Podmanu:

Architektura bez daemonu

Podman funguje bez pozadí daemonu (rezidentního procesu) pro řízení kontejnerů. To vede k efektivnímu využití zdrojů bez zbytečných pozadí procesů.

Podpora rootless (neprivilegovaní uživatelé)

Podman umožňuje běžným uživatelům spouštět a řídit kontejnery bez administrátorských oprávnění. To umožňuje bezpečný provoz kontejnerů v multiuživatelských nebo serverových prostředích a výrazně snižuje bezpečnostní rizika.

CLI kompatibilní s Dockerem

Podman používá téměř stejnou strukturu příkazů jako Docker. Například následující příkazy Dockeru fungují téměř identicky v Podmanu:

podman build -t myimage .
podman run -it myimage bash

To umožňuje uživatelům obvyklým s Dockerem přejít plynule na Podman.

Funkce Pod

Podman přejímá koncept „Pod“ z Kubernetes, což umožňuje řídit více kontejnerů jako jednu logickou jednotku. To zvyšuje kompatibilitu s Kubernetes a umožňuje plynulou migraci z lokálních do cloudových prostředí.

Kompatibilita s Ubuntu

Ačkoli Podman je široce adoptován na Fedoře a distribucích založených na RHEL, také stabilně běží na Ubuntu. Můžete ho nainstalovat z oficiálních repozitářů a nastavení je jednoduché. Zejména od Ubuntu 20.04 LTS se zlepšila údržba balíčků, což snižuje bariéru pro adopci.

3. Instalace Podman na Ubuntu

Před zahájením: kontrolní seznam před instalací

Než nainstalujete Podman na Ubuntu, nejprve zkontrolujte verzi Ubuntu. Podman se doporučuje pro Ubuntu 20.04 LTS nebo novější. Starší verze mohou postrádat požadované balíčky v oficiálním repozitáři.

Zkontrolujte verzi Ubuntu pomocí následujícího příkazu:

lsb_release -a

Instalace Podman vyžaduje oprávnění sudo. I když plánujete používat režim bez rootu, pro počáteční instalaci jsou potřebná administrátorská oprávnění, takže se ujistěte, že je máte.

Instalace Podman (oficiální repozitář Ubuntu)

Na Ubuntu 20.04, 22.04 nebo novějším můžete Podman snadno nainstalovat pomocí APT:

sudo apt update
sudo apt install -y podman

Po instalaci zkontrolujte verzi, abyste potvrdili úspěšné nastavení:

podman --version

Jak získat nejnovější verzi (oficiální PPA)

Balíček Podman v standardním repozitáři Ubuntu nemusí být nejnovější. Pokud chcete nejnovější funkce, použijte oficiální Personal Package Archive (PPA):

. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt update
sudo apt install -y podman

Tím získáte přístup k nejnovějšímu vydání Podman, ekvivalentnímu ekosystémům Red Hat a Fedora.

Základní test funkčnosti Podman

Po instalaci spusťte rychlou kontrolu:

podman info

Tento příkaz zobrazí verzi Podman, konfiguraci a podporované funkce, jako je režim bez rootu.

Otestujte stažení a spuštění oficiálního kontejneru Alpine Linux:

podman run --rm -it alpine sh

Pokud se shell spustí úspěšně, vaše nastavení Podman funguje správně.

4. Použití Dockerfile s Podman

Co je Dockerfile?

Dockerfile je šablona pro vytváření obrazů kontejnerů. Jedná se o textový soubor, který uvádí základní obraz, balíčky k instalaci, soubkopírování a další instrukce v pořadí.

Nástroje pro kontejnery jako Podman a Docker mohou automaticky vytvořit konzistentní prostředí na základě tohoto souboru.

Příklad instrukcí:

FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]

Tím se instalují balíčky, kopírují skripty a definuje, co se má ve výsledném obrazu spouštět jako výchozí.

Jak použít Dockerfile s Podman

Obrazy kontejnerů můžete z Dockerfile vytvářet pomocí Podman, téměř stejně jako s Docker.

1. Připravte adresář

Nastavte své soubory takto:

project/
├── Dockerfile
└── app.sh

app.sh může být jednoduchý skript:

#!/bin/bash
echo "Hello from Podman container!"

Udělejte skript spustitelným:

chmod +x app.sh

2. Sestavte pomocí Podman

S Dockerfile ve vašem aktuálním adresáři spusťte:

podman build -t mypodmanapp .

Tím se vytvoří obraz kontejneru s názvem mypodmanapp.

3. Zkontrolujte výsledek sestavení

Zobrazte vytvořený obraz pomocí:

podman images

4. Spusťte kontejner

Spusťte kontejner z vytvořeného obrazu:

podman run --rm mypodmanapp

Pokud je vše nastaveno správně, uvidíte: Hello from Podman container!

Rozdíl s Containerfile

Podman podporuje soubory pojmenované Containerfile, které používají stejnou syntaxi jako Dockerfile. Jedná se jen o neutrální název, nespojený s brandingem Dockeru.

Funkčnost je identická. Ať už soubor pojmenujete Dockerfile nebo Containerfile, Podman jej použije:

podman build -f Containerfile -t myimage .

Stačí v případě potřeby specifikovat název souboru pomocí volby -f.

5. Praktický příklad: Vytvoření kontejneru založeného na Ubuntu

Vytvoření Dockerfile založeného na Ubuntu

Pojďme krok za krokem projít tvorbou Dockerfile založeného na Ubuntu a vytvořením a spuštěním kontejnerového obrazu pomocí Podmanu.

Zde je jednoduchý příklad Dockerfile:

FROM ubuntu:22.04

RUN apt update && 
    apt install -y curl && 
    apt clean

COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh

CMD ["/usr/local/bin/hello.sh"]

Tento Dockerfile:

  • Používá oficiální obraz Ubuntu 22.04
  • Instaluje balíček curl
  • Zkopíruje hello.sh z hostitele do kontejneru
  • Nastaví hello.sh jako výchozí skript

Nyní vytvořte jednoduchý skript hello.sh:

#!/bin/bash
echo "Hello from a Podman container!"

Dejte mu právo spouštět:

chmod +x hello.sh

Vytvoření obrazu pomocí Podmanu

Jakmile jsou vaše soubory připravené, vytvořte obraz pomocí:

podman build -t ubuntu-hello .

Příznak -t ubuntu-hello označí (otaguje) váš obraz; . určuje adresář pro sestavení.

Pokud bude úspěšné, uvidíte svůj nový obraz v seznamu:

podman images

Spuštění a testování obrazu

Spusťte kontejner z vašego nového obrazu:

podman run --rm ubuntu-hello

Ukázkový výstup:

Hello from a Podman container!

Volba --rm automaticky odstraní kontejner po jeho ukončení, což je ideální pro testování.

Tip: Interaktivní přístup do kontejneru

Pokud chcete pracovat interaktivně uvnitř kontejneru, použijte volbu -it pro spuštění Bash:

podman run -it ubuntu-hello bash

Tím získáte lehké vývojové prostředí Ubuntu uvnitř vašeho kontejneru.

6. Funkce a tipy pro Podman

Silné stránky Podmanu: Flexibilita a bezpečnost

Podman poskytuje větší flexibilitu a zvýšenou bezpečnost, přičemž zůstává kompatibilní s Dockerem. Zde jsou některé užitečné funkce a tipy pro každodenní používání.

Bezpečné operace v rootless režimu

Jednou z klíčových silných stránek Podmanu je rootless režim, který umožňuje ne‑root uživatelům spouštět, zastavovat a spravovat kontejnery.

Například můžete používat Podman bez sudo:

podman run -it ubuntu bash

Operace jsou omezeny na domovský adresář uživatele, snižují riziko pro systém. To je zvláště cenné na sdílených serverech nebo v vývojových prostředích.

Integrace se systemd pro automatické spouštění

Podman se může nativně integrovat se systemd, což umožňuje kontejnerům spouštět se automaticky jako Linuxové služby.

Vytvořte soubor systemd jednotky pomocí:

podman generate systemd --name mycontainer --files --restart-policy=always

Tím se vytvoří soubor jednotky v ~/.config/systemd/user/. Povolit a spustit pomocí:

systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service

Kontejnery se nyní automaticky restartují i po restartu serveru.

Správa více kontejnerů pomocí podman‑compose

Kromě operací s jedním kontejnerem Podman podporuje správu více kontejnerů. Pomocí podman‑compose můžete spravovat složité projekty podobně jako Docker Compose.

Nainstalujte pomocí pip:

pip install podman-compose

Protože je kompatibilní se soubory docker-compose.yml, migrace projektů je snadná.

Pro spuštění služeb stačí spustit:

podman-compose up -d

Podman vám umožní okamžitě reprodukovat vývojová prostředí.

Další užitečné příkazy a tipy

Vyčištění nepoužívaných obrazů a kontejnerů

podman system prune -a

Odstraňte nepoužívané soubory a obrazy, abyste uvolnili úložiště.

Dokončování příkazů v shellu (bash/zsh)

Nainstalujte skripty pro dokončování příkazů Podmanu pro snazší používání CLI:

sudo apt install podman-docker

To umožní dokončování příkazů, podobně jako u Dockeru, pro příkaz podman.

7. Migr Dockeru na Podman

Proč je migrace na Podman v trendu

Zatímco Docker byl dlouho de facto standardem pro kontejnery, Podman získává na popularitě díky své lehkosti a vyšší bezpečnosti. Red Hat Enterprise Linux (RHEL) a Fedora přešly z Dockeru na Podman jako výchozí, což vede mnoho týmů k úvahám o migraci.

Tato sekce pokrývá praktické kroky a body, které je třeba zvážit při migraci z Dockeru na Podman.

Kompatibilita příkazů: Docker vs. Podman

Podman je vysoce kompatibilní s příkazy Dockeru, takže je můžete obecně nahradit přímo:

DockerPodman
docker build -t myapp .podman build -t myapp .
docker run -it myapppodman run -it myapp
docker imagespodman images
docker pspodman ps

Tato bezproblémová kompatibilita CLI je hlavní výhodou Podmanu.

Dosáhnutí plné kompatibility s podman-docker

Pokud vaše skripty nebo CI/CD pipeline používají příkazy docker, instalace balíčku podman-docker umožní Podmanu fungovat jako přímá náhrada:

sudo apt install podman-docker

Tím se nastaví příkaz docker jako symbolický odkaz na Podman:

which docker
# → /usr/bin/docker → podman symlink

Pak můžete spouštět Docker skr úprav.

Alternativa k Docker Compose: podman-compose

Pokud používáte Docker Compose pro multi‑container projekty, podman-compose poskytuje podobnou funkčnost.

Je vysoce kompatibilní, ale některé možnosti Compose se mohou lišit (např. depends_on) a logování událostí nebo kontrola zdraví mohou fungovat odlišně. Pro základní web + DB stacky je migrace obecně plynulá.

Migrace obrazů a svazků

Lokální Docker obrazy nejsou pro Podman ve výchozím nastavení viditelné. Můžete:

Možnost 1: Znovu stáhnout pomocí Podman

podman pull ubuntu:22.04

Možnost 2: Export z Dockeru → Import do Podman

# Export with Docker
docker save myimage > myimage.tar

# Import with Podman
podman load < myimage.tar

Tím se Docker‑vytvořené obrazy zpřístupní v Podmanu.

Další úvahy

  • Rootless provoz: Docker obvykle běží jako root, zatímco Podman je navržen pro rootless provoz ve výchozím nastavení
  • Struktura démona: Podman je bez démona, takže správa procesů se liší
  • Umístění logů a úložiště dat se mohou lišit — během migrace zkontrolujte konfigurace

8. Často kladené otázky (FAQ)

Q1. Jaké jsou hlavní rozdíly mezi Podman a Dockerem?

A1. Největší rozdíl je, že Podman je „bez démona“ (nevyžaduje žádný proces na pozadí), což ho činí lehčím a bezpečnějším. Podman také podporuje rootless režim, který uživatelům umožňuje spravovat kontejnery bez zvýšených oprávnění. Kompatibilita CLI je vysoká, takže většina příkazů je stejná.

Q2. Existuje rozdíl mezi Dockerfile a Containerfile?

A2. Neexistuje žádný funkční rozdíl. Oba jsou soubory popisující, jak vytvořit kontejnery, se stejnou syntaxí. Některé projekty upřednostňují „Containerfile“ jako neutrální název, ale můžete použít kterýkoli název s Podmanem.

Q3. Mohu použít Docker Compose soubory s Podmanem?

A3. Podman nativně nepodporuje Docker Compose, ale můžete použít podman-compose (Python nástroj) k interpretaci a spuštění souborů docker-compose.yml v prostředí Podman.

Některé možnosti Compose (depends_on atd.) mohou mít omezení, takže složitější nastavení otestujte předem.

Q4. Je Podman stabilní na Ubuntu?

A4. Ano, Podman běží spolehlivě na Ubuntu 20.04 LTS a novějším. Je dostupný v oficiálních Ubuntu repozitářích a lze jej nainstalovat pomocí apt. Pro nejnovější verzi můžete použít oficiální PPA.

Q5. Existují omezení přístupu v rootless režimu?

A5. V rootless režimu jsou některé privilegované operace a navázání na porty pod 1024 omezené. Přesměrování portů může toto omezení obejít. Pro většinu případů použití je rootless režim praktický a doporučený.

Q6. Může Podman stahovat obrazy z Docker Hubu?

A6. Ano, Podman může ve výchozím nastavení stahovat obrazy z Docker Hubu. Někdy může být potřeba zadat úplnou cestu k registru, např. docker.io/library/ubuntu:

podman pull docker.io/library/ubuntu

Podman také podporuje registry jako Quay.io a GitHub Container Registry.

Q7. Je Podman vhodný pro produkční nasazení?

A7. Ano, Podman zahrnuje koncepty podů kompatibilní s Kubernetes a integraci se systemd pro automatické spouštění, což jej činí vhodným pro produkční prostředí — zejména tam, kde je potřeba vysoká bezpečnost. Podman je nyní výchozí na Red Hat Enterprise Linux a Fedora, s širokým přijetím.

年収訴求