Podman auf Ubuntu: Container mit Dockerfile bauen und ausführen (Einsteiger‑ bis Praxisleitfaden)

目次

1. Einführung

Die Entwicklung der Containertechnologie und warum sie wichtig ist

In den letzten Jahren hat die Bedeutung von Containertechnologie in der Anwendungsentwicklung und im Betrieb rasant zugenommen. Insbesondere die Möglichkeit, Reproduzierbarkeit zu gewährleisten, indem Entwicklungs‑ und Produktionsumgebungen aufeinander abgestimmt werden, findet starken Anklang bei Ingenieuren.

Docker war lange Zeit die dominierende Lösung in diesem Bereich, doch in den letzten Jahren hat Podman als leistungsstarke Alternative an Bedeutung gewonnen. Podman bietet ein nahezu identisches CLI (Command Line Interface) zu Docker und gleichzeitig entscheidende Vorteile wie eine daemonlose Architektur, einen schlanken Betrieb und rootlose Ausführung ohne Administratorrechte.

Warum „Podman + Dockerfile + Ubuntu“?

Dieser Artikel erklärt moderne Container‑Operationen unter Linux, indem er drei wesentliche Elemente kombiniert: Podman, Dockerfile und Ubuntu.

  • Ubuntu ist eine weit verbreitete Linux‑Distribution, die sowohl für Einsteiger als auch für fortgeschrittene Nutzer geeignet ist,
  • Dockerfile dient als Bauplan zum Erstellen von Container‑Images,
  • Und Podman ist ein Next‑Generation‑Tool, das eine flexiblere und sicherere Containerverwaltung ermöglicht.

Mit wachsendem Sicherheitsbewusstsein hat sich die Nutzung von Podman mit Dockerfile auf Ubuntu zu einer populären Wahl sowohl für einzelne Entwickler als auch für Unternehmensumgebungen entwickelt.

Ziel und Zielgruppe

Ziel dieses Artikels ist es, schrittweise zu erklären, wie Dockerfiles erstellt und praktische Container mit Podman auf Ubuntu gebaut werden.

Der Artikel richtet sich an Leser wie:

  • Personen mit Docker‑Erfahrung, die an Podman interessiert sind
  • Ubuntu‑Nutzer, die Container sicher verwalten möchten
  • Ingenieure, die planen, Containertechnologie in ihrer Arbeit einzusetzen
  • Einsteiger, die Dockerfiles schreiben und Images mit Podman bauen wollen

Neben den Grundlagen wird in diesem Artikel auch auf Fehlersuche, zentrale Unterschiede zu Docker und Migrationsstrategien eingegangen.

2. Was ist Podman?

Grundüberblick über Podman

Podman (Pod Manager) ist ein Next‑Generation‑Container‑Management‑Tool, das von der Red‑Hat‑geführten Community entwickelt wurde. Wie Docker kann es OCI‑ (Open Container Initiative) konforme Container bauen, ausführen und verwalten, doch seine Design‑Philosophie und Architektur unterscheiden sich deutlich.

Das auffälligste Merkmal ist, dass Podman keinen Daemon benötigt. Das ermöglicht leichtgewichtigen und sicheren Betrieb. Podman unterstützt zudem den rootlosen Modus, sodass reguläre Nutzer Container verwalten können, ohne Privilegien zu erhöhen. Die CLI‑Kompatibilität zu Docker ist sehr hoch, was die Migration unkompliziert macht.

Hauptfunktionen von Podman

Im Folgenden einige der wichtigsten Funktionen von Podman:

Daemonlose Architektur

Podman greift nicht auf einen Hintergrund‑Daemon‑Prozess zurück, um Container zu verwalten. Das führt zu einer effizienteren Ressourcennutzung ohne unnötige Hintergrunddienste.

Unterstützung für rootlose (unprivilegierte) Benutzer

Podman ermöglicht nicht‑administrativen Benutzern das Starten und Verwalten von Containern. Das erhöht die Sicherheit in Multi‑User‑ oder Server‑Umgebungen erheblich und reduziert Sicherheitsrisiken deutlich.

Docker‑kompatibles CLI

Podman verwendet nahezu dieselbe Befehlsstruktur wie Docker. Zum Beispiel funktionieren die folgenden Docker‑Befehle in Podman fast identisch:

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

Damit können Docker‑Nutzer mit minimalem Aufwand migrieren.

Pod‑Funktionalität

Podman integriert das Kubernetes‑„Pod“-Konzept, sodass mehrere Container als eine logische Einheit verwaltet werden können. Das macht Podman stark kompatibel zu Kubernetes und ermöglicht reibungslose Übergänge von lokaler Entwicklung zu Cloud‑Umgebungen.

Kompatibilität mit Ubuntu

Während Podman in Fedora und RHEL‑basierten Distributionen weit verbreitet ist, läuft es auch stabil unter Ubuntu. Es kann aus den offiziellen Repositorys mit relativ einfacher Konfiguration installiert werden. Seit Ubuntu 20.04 LTS hat sich die Paketunterstützung deutlich verbessert, wodurch die Einstiegshürde gesenkt wird.

3. Installation von Podman unter Ubuntu

Vor dem Start: Voraussetzungen

Bevor Sie Podman unter Ubuntu installieren, prüfen Sie zunächst Ihre Ubuntu‑Version. Podman wird offiziell für Ubuntu 20.04 LTS oder neuer empfohlen. Auf älteren Versionen sind die erforderlichen Pakete möglicherweise nicht in den offiziellen Repositorys verfügbar.

Sie können Ihre Ubuntu‑Version mit folgendem Befehl prüfen:

lsb_release -a

Die Installation von Podman erfordert sudo‑Rechte. Selbst wenn Sie Podman im rootless‑Modus verwenden möchten, sind Administratorrechte während der Installation weiterhin nötig.

Installation von Podman aus dem offiziellen Ubuntu‑Repository

Auf aktuellen Ubuntu‑Versionen wie 20.04 oder 22.04 kann Podman einfach über APT installiert werden.

sudo apt update
sudo apt install -y podman

Nach der Installation prüfen Sie, ob Podman korrekt installiert wurde, indem Sie die Version abfragen:

podman --version

Installation der neuesten Version über das offizielle PPA

Die in Ubuntus Standard‑Repository enthaltene Podman‑Version ist häufig leicht veraltet. Wenn Sie die neuesten Funktionen nutzen möchten, können Sie Podman aus dem offiziellen PPA installieren.

. /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

Mit dieser Methode können Sie die neuesten Podman‑Versionen verwenden, die denen auf Red Hat‑ und Fedora‑Systemen entsprechen.

Grundlegender Podman‑Funktionstest

Nach der Installation führen Sie einen einfachen Test durch, um zu bestätigen, dass Podman korrekt funktioniert:

podman info

Dieser Befehl zeigt Podmans Konfiguration, Version und unterstützte Features wie den rootless‑Modus an.

Sie können auch die Ausführung eines Containers testen, indem Sie ein offizielles Alpine‑Linux‑Image starten:

podman run --rm -it alpine sh

Wenn die Shell erfolgreich startet, funktioniert Podman einwandfrei.

4. Grundlagen von Dockerfiles und deren Verwendung mit Podman

Was ist ein Dockerfile?

Ein Dockerfile ist eine Blaupause zum Erstellen von Container‑Images. Es ist eine Textdatei, die Anweisungen definiert, z. B. das Basis‑Image, welche Pakete installiert werden sollen und welche Dateien kopiert werden.

Auf Basis dieser Datei können Container‑Tools wie Podman und Docker automatisch eine konsistente Umgebung erstellen.

Übliche Dockerfile‑Anweisungen umfassen:

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"]

Dieses Beispiel installiert Pakete auf einem Ubuntu‑Basis‑Image, kopiert ein Skript und definiert den Standard‑Ausführungsbefehl.

Verwendung von Dockerfiles mit Podman

Podman kann Container‑Images aus Dockerfiles auf dieselbe Weise wie Docker bauen.

1. Vorbereitung des Projektverzeichnisses

Erstellen Sie die folgende Verzeichnisstruktur:

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

Die Datei app.sh kann ein einfaches Skript enthalten:

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

Machen Sie das Skript ausführbar:

chmod +x app.sh

2. Image mit Podman bauen

Führen Sie im Verzeichnis, das das Dockerfile enthält, folgenden Befehl aus:

podman build -t mypodmanapp .

Damit wird ein Container‑Image namens mypodmanapp erstellt.

3. Überprüfung des erstellten Images

Sie können die verfügbaren Images auflisten mit:

podman images

4. Ausführen des Containers

Starten Sie einen Container mit dem erstellten Image:

podman run --rm mypodmanapp

Wenn es korrekt konfiguriert ist, wird die Ausgabe Hello from Podman container! angezeigt.

Dockerfile vs Containerfile

In Podman können Dateien, die die Dockerfile‑Syntax verwenden, ebenfalls Containerfile genannt werden. Diese Benennung spiegelt den Wunsch nach einer Docker‑unabhängigen Terminologie wider.

Es gibt keinen funktionalen Unterschied zwischen Dockerfile und Containerfile. Beide werden von Podman vollständig unterstützt.

podman build -f Containerfile -t myimage .

Sie können den Dateinamen explizit mit der Option -f angeben.

5. Praktisches Beispiel: Erstellen eines Ubuntu‑basierten Containers

Erstellen eines Dockerfiles basierend auf Ubuntu

Im Folgenden führen wir ein praktisches, schrittweises Beispiel zum Erstellen eines Dockerfiles basierend auf Ubuntu und zum Erstellen und Ausführen eines Container‑Images mit Podman durch.

Zuerst erstellen Sie das folgende einfache 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"]

Dieses Dockerfile führt die folgenden Aktionen aus:

  • Verwendet das offizielle Ubuntu‑22.04‑Image als Basis
  • Installiert das Paket curl
  • Kopiert hello.sh vom Host in den Container
  • Setzt hello.sh als Standardskript für die Ausführung

Als Nächstes erstellen Sie ein einfaches Shell‑Skript mit dem Namen hello.sh:

#!/bin/bash
echo "Hello, this output is from a Podman container!"

Gewähren Sie dem Skript Ausführungsrechte:

chmod +x hello.sh

Erstellen des Images mit Podman

Sobald die Dateien bereit sind, erstellen Sie das Image mit dem folgenden Befehl:

podman build -t ubuntu-hello .

Die Option -t ubuntu-hello weist dem Image einen Tag‑Namen zu, und das abschließende . gibt das Verzeichnis an, das das Dockerfile enthält.

Wenn der Build erfolgreich abgeschlossen ist, wird das Image lokal gespeichert.

podman images

Sie können diesen Befehl verwenden, um zu überprüfen, ob das Image erstellt wurde.

Ausführen und Verifizieren des erstellten Images

Starten Sie einen Container aus dem neu erstellten Image mit dem folgenden Befehl:

podman run --rm ubuntu-hello

Beispielausgabe:

Hello, this output is from a Podman container!

Die Option --rm entfernt den Container nach der Ausführung automatisch, was sie ideal für Testzwecke macht.

Optional: Ausführen eines interaktiven Containers

Wenn Sie direkt mit dem Container interagieren möchten, können Sie ihn mit der Option -it starten und Bash aufrufen:

podman run -it ubuntu-hello bash

Damit können Sie den Container als leichtgewichtige, Ubuntu‑basierte Entwicklungsumgebung nutzen.

6. Nützliche Podman‑Funktionen und Tipps

Stärken von Podman: Flexibilität und Sicherheit

Während Podman Docker‑Kompatibilität beibehält, bietet es Funktionen, die flexiblere und sicherere Container‑Operationen ermöglichen. Dieser Abschnitt stellt praktische Funktionen und Tipps vor, die im täglichen Arbeitsablauf besonders nützlich sind.

Sichere Operation im Rootless‑Modus

Eine der leistungsstärksten Funktionen von Podman ist der Rootless‑Modus, der normale Benutzern ermöglicht, Container ohne Administratorrechte zu starten, zu stoppen und zu verwalten.

Sie können Container ohne sudo ausführen, wie unten gezeigt:

podman run -it ubuntu bash

Da dieser Vorgang auf das Home‑Verzeichnis des Benutzers beschränkt ist, wird die systemweite Auswirkung minimiert. Der Rootless‑Modus ist besonders nützlich auf gemeinsam genutzten Servern und in Entwicklungsumgebungen.

Automatischer Start mit systemd‑Integration

Podman unterstützt die native Integration mit systemd, wodurch Container automatisch als Linux‑Dienste laufen können.

Sie können eine systemd‑Service‑Unit für einen Container mit dem folgenden Befehl erzeugen:

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

Dieser Befehl erstellt Unit‑Dateien unter ~/.config/systemd/user/. Nach der Erstellung aktivieren und starten Sie den Dienst wie folgt:

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

Diese Konfiguration stellt sicher, dass Container automatisch beim Systemstart starten.

Verwaltung mehrerer Container mit podman-compose

Zusätzlich zur Verwaltung einzelner Container unterstützt Podman die Orchestrierung mehrerer Container. Durch die Verwendung von podman-compose können Sie eine Funktionalität erreichen, die Docker Compose ähnelt.

Installieren Sie podman-compose mit pip:

pip install podman-compose

Da es weitgehend mit docker-compose.yml-Dateien kompatibel ist, können Sie häufig vorhandene Konfigurationen wiederverwenden.

Das Starten von Diensten ist so einfach wie das Ausführen von:

podman-compose up -d

Dies ermöglicht es Ihnen, vollständige Entwicklungsumgebungen sofort zu reproduzieren, selbst wenn Sie Podman verwenden.

Weitere nützliche Befehle und Tipps

Aufräumen nicht verwendeter Images und Container

podman system prune -a

Dieser Befehl entfernt nicht verwendete Container, Images und temporäre Dateien und hilft, Ihren Speicher sauber zu halten.

Aktivieren der Befehlsvervollständigung (bash/zsh)

Sie können die Unterstützung der Befehlsvervollständigung mit dem folgenden Paket installieren:

sudo apt install podman-docker

Dies ermöglicht Docker-ähnliche Befehlsvervollständigung für Podman und steigert die Produktivität.

7. Migrationsleitfaden: Von Docker zu Podman

Warum die Migration zu Podman an Aufmerksamkeit gewinnt

Docker ist seit langem gleichbedeutend mit Containertechnologie, aber in den letzten Jahren hat eine Verlagerung hin zu Podman als leichtere und sicherere Alternative an Schwung gewonnen. Insbesondere Red Hat Enterprise Linux (RHEL) und Fedora haben die Docker-Unterstützung reduziert und Podman als Standard-Container-Engine übernommen, was viele Organisationen dazu veranlasst, eine Migration in Betracht zu ziehen.

Dieser Abschnitt erklärt praktische Schritte und wichtige Überlegungen für eine reibungslose Migration von Docker zu Podman.

Befehlskompatibilität zwischen Docker und Podman

Podman bewahrt ein hohes Maß an CLI-Kompatibilität mit Docker, sodass die meisten Befehle direkt ohne Änderungen ersetzt werden können.

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

Damit ist es möglich, zu Podman zu wechseln, ohne Ihren Arbeitsablauf zu ändern, was einer seiner größten Vorteile ist.

Vollständige Kompatibilität mit podman-docker erreichen

Wenn vorhandene Skripte, CI/CD-Pipelines oder Tools die Existenz des docker-Befehls voraussetzen, können Sie das podman-docker-Paket installieren, um Podman als sofort einsetzbaren Ersatz zu nutzen.

sudo apt install podman-docker

Nach der Installation wird der docker-Befehl zu einem symbolischen Link zu Podman:

which docker
# → /usr/bin/docker → symbolic link to podman

Damit können bestehende Docker-basierte Skripte auf Podman ohne Änderungen ausgeführt werden.

Ersetzen von docker-compose durch podman-compose

Für Projekte, die Docker Compose zur Definition von Multi-Container-Umgebungen verwenden, bietet podman-compose eine kompatible Alternative.

Obwohl die Kompatibilität im Allgemeinen hoch ist, beachten Sie die folgenden Einschränkungen:

  • Einige Compose-Optionen (wie depends_on) können nicht unterstützt werden oder sich anders verhalten
  • Unterschiede können im Ereignisprotokoll und im Verhalten von Gesundheitsprüfungen bestehen

Für typische Konfigurationen wie eine Kombination aus Webserver und Datenbank ist die Migration in der Regel unkompliziert.

Migration von Images und Volumes

Docker-Images, die lokal gespeichert sind, können nicht direkt von Podman aus zugegriffen werden. Sie müssen sie entweder erneut ziehen oder exportieren und importieren.

Option 1: Images mit Podman erneut ziehen

podman pull ubuntu:22.04

Option 2: Export aus Docker und Import in Podman

# Export from Docker
docker save myimage > myimage.tar

# Import into Podman
podman load < myimage.tar

Damit können mit Docker erstellte Images in Podman wiederverwendet werden.

Weitere Migrationsüberlegungen

  • Unterschiede beim rootlosen Betrieb: Docker geht typischerweise von der Nutzung als root aus, während Podman für den rootlosen Betrieb konzipiert ist
  • Daemon-Architektur: Podman ist daemonlos, was die Verwaltung von Hintergrundprozessen verändert
  • Log- und Datenspeicherorte unterscheiden sich und sollten bei der Migration überprüft werden.

8. Häufig gestellte Fragen (FAQ)

Q1. Was ist der Hauptunterschied zwischen Podman und Docker?

A1. Der bedeutendste Unterschied ist, dass Podman ohne Daemon arbeitet. Das ermöglicht einen leichteren und sichereren Betrieb. Podman unterstützt außerdem den rootlosen Modus, der die Containerverwaltung ohne Privilegienerhöhung ermöglicht. Die CLI‑Kompatibilität mit Docker ist sehr hoch.

Q2. Was ist der Unterschied zwischen Dockerfile und Containerfile?

A2. Es gibt keinen funktionalen Unterschied. Beide Dateien beschreiben Container‑Build‑Anweisungen mit identischer Syntax.
Der Name Containerfile wird in OCI‑konformen Projekten bevorzugt, um Docker‑spezifische Terminologie zu vermeiden. In der Praxis funktioniert Dockerfile perfekt mit Podman.

Q3. Kann Docker Compose mit Podman verwendet werden?

A3. Docker Compose wird nicht direkt unterstützt, aber Sie können podman-compose als Alternative verwenden. Es interpretiert docker-compose.yml‑Dateien in einer Podman‑Umgebung.

Einige Optionen wie depends_on sind eingeschränkt, daher wird für komplexe Setups empfohlen, Tests durchzuführen.

Q4. Läuft Podman stabil auf Ubuntu?

A4. Ja. Podman läuft stabil auf Ubuntu 20.04 LTS und neuer. Es ist in den offiziellen Ubuntu‑Repositories verfügbar und kann einfach mit apt installiert werden. Für neuere Versionen ist die Verwendung eines PPA ebenfalls eine Option.

Q5. Gibt es Einschränkungen beim Einsatz des rootlosen Modus?

A5. Der rootlose Modus schränkt bestimmte privilegierte Operationen und das Binden an Ports unter 1024 ein. Diese Einschränkungen können jedoch häufig mittels Port‑Forwarding umgangen werden. Für die meisten Anwendungsfälle ist der rootlose Modus voll praktikabel.

Q6. Kann Podman dieselben Images wie Docker Hub ziehen?

A6. Ja. Podman kann standardmäßig Images von Docker Hub ziehen. In manchen Umgebungen müssen Sie möglicherweise das Registry und den Namespace explizit angeben:

podman pull docker.io/library/ubuntu

Podman unterstützt außerdem andere Registries wie Quay.io und GitHub Container Registry.

Q7. Ist Podman für Produktionsumgebungen geeignet?

A7. Ja. Podman enthält Funktionen, die für den Produktionseinsatz erforderlich sind, wie kubernetes‑kompatible Pod‑Konzepte und Systemd‑Integration. In sicherheitskritischen Umgebungen kann Podman eine bessere Wahl als Docker sein.

Podman ist bereits die Standard‑Container‑Engine in RHEL und Fedora und hat eine umfangreiche Produktionsakzeptanz.

年収訴求