Jak korzystać z Podmana, Dockerfile i Ubuntu: Bezpieczne i nowoczesne zarządzanie kontenerami w systemie Linux

目次

1. Wprowadzenie

Ewolucja i rosnące znaczenie technologii kontenerów

W ostatnich latach technologia kontenerów szybko zyskała na znaczeniu w dziedzinie tworzenia aplikacji i operacji. W szczególności możliwość dopasowania środowisk deweloperskich i produkcyjnych zapewnia powtarzalność operacji, co jest kluczową zaletą, która zdobyła silne poparcie wśród inżynierów.

Podczas gdy Docker pozostaje najpowszechniej rozpoznawalną platformą kontenerową, Podman przyciąga coraz większą uwagę jako nowoczesna alternatywa. Podman oferuje niemal identyczny interfejs wiersza poleceń (CLI) do Dockera, ale wyróżnia się architekturą bez demona i lekką oraz wsparciem dla operacji bez uprawnień roota (rootless).

Dlaczego „Podman + Dockerfile + Ubuntu”?

W tym artykule wyjaśnimy, jak połączyć Podman, Dockerfile i Ubuntu, aby tworzyć nowoczesne przepływy pracy kontenerów na Linuksie.

  • Ubuntu jest popularną dystrybucją Linuksa używaną zarówno przez początkujących, jak i zaawansowanych użytkowników,
  • Dockerfile służy jako szablon do budowania obrazów kontenerów,
  • a Podman jest narzędziem nowej generacji zaprojektowanym do elastycznego i bezpiecznego zarządzania tymi obrazami.

Wraz ze wzrostem świadomości bezpieczeństwa, podejście używania Podmana z Dockerfile na Ubuntu jest coraz częściej przyjmowane zarówno przez indywidualnych deweloperów, jak i zespoły korporacyjne.

Cel i grupa docelowa

Celem tego artykułu jest przedstawienie jasnego, krok po kroku przewodnika po budowaniu praktycznych kontenerów przy użyciu Podmana i Dockerfile na Ubuntu.

Ten artykuł jest przeznaczony dla czytelników, takich jak:

  • Deweloperzy z doświadczeniem w Dockerze, ciekawi Podmana,
  • Użytkownicy Ubuntu poszukujący bezpiecznego zarządzania kontenerami,
  • Inżynierowie dążący do włączenia technologii kontenerowych do swojego przepływu pracy,
  • Początkujący zainteresowani pisaniem Dockerfile i budowaniem przy użyciu Podmana.

Omówimy wszystko, od podstaw i wskazówek rozwiązywania problemów, po kluczowe różnice w stosunku do Dockera i sposoby migracji.

2. Co to jest Podman?

Przegląd Podmana

Podman (Pod Manager) to narzędzie do zarządzania kontenerami nowej generacji, rozwijane przez społeczność kierowaną przez Red Hat. Podobnie jak Docker, może budować, uruchamiać i zarządzać kontenerami zgodnymi z OCI, ale jego projekt i architektura różnią się w istotny sposób.

Największą cechą Podmana jest to, że nie wymaga on działającego w tle demona. Dzięki temu możliwa jest lekka i bezpieczna operacja. Podman obsługuje także tryb rootless, umożliwiając zwykłym użytkownikom zarządzanie kontenerami bez podwyższonych uprawnień. Interfejs CLI jest wysoce kompatybilny z Dockerem, więc większość poleceń jest prawie identyczna.

Kluczowe funkcje Podmana

Oto niektóre godne uwagi funkcje Podmana:

Architektura bez demona

Podman działa bez demona w tle (procesu rezydentnego) do zarządzania kontenerami. Skutkuje to efektywnym wykorzystaniem zasobów, bez niepotrzebnych procesów w tle.

Wsparcie rootless (użytkownicy nieuprzywilejowani)

Podman pozwala zwykłym użytkownikom uruchamiać i zarządzać kontenerami bez uprawnień administratora. Umożliwia to bezpieczne działanie kontenerów w środowiskach wieloużytkownikowych lub serwerowych, znacząco zmniejszając ryzyko bezpieczeństwa.

CLI kompatybilne z Dockerem

Podman używa niemal takiej samej struktury poleceń jak Docker. Na przykład, poniższe polecenia Docker działają prawie identycznie w Podmanie:

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

Umożliwia to użytkownikom zaznajomionym z Dockerem płynne przejście na Podmana.

Funkcja Pod

Podman przyjmuje koncepcję „Pod” z Kubernetes, pozwalając zarządzać wieloma kontenerami jako jedną logiczną jednostkę. Zwiększa to kompatybilność z Kubernetes i umożliwia płynną migrację z środowisk lokalnych do chmurowych.

Kompatybilność z Ubuntu

Chociaż Podman jest szeroko stosowany w dystrybucjach Fedora i opartych na RHEL, działa również stabilnie na Ubuntu. Można go zainstalować z oficjalnych repozytoriów, a konfiguracja jest prosta. Szczególnie od Ubuntu 20.04 LTS, utrzymanie pakietów uległo poprawie, co obniża próg adopcji.

3. Instalowanie Podmana w Ubuntu

Przed rozpoczęciem: Lista kontrolna przed instalacją

Przed instalacją Podmana w Ubuntu najpierw sprawdź wersję Ubuntu. Podman jest zalecany dla Ubuntu 20.04 LTS lub nowszego. Starsze wersje mogą nie zawierać wymaganych pakietów w oficjalnym repozytorium.

Sprawdź wersję Ubuntu za pomocą następującego polecenia:

lsb_release -a

Instalacja Podmana wymaga uprawnień sudo. Nawet jeśli planujesz używać trybu rootless, potrzebne są uprawnienia administratora do początkowej instalacji, więc upewnij się, że je masz.

Instalowanie Podmana (oficjalne repozytorium Ubuntu)

W Ubuntu 20.04, 22.04 lub nowszym możesz łatwo zainstalować Podmana przy pomocy APT:

sudo apt update
sudo apt install -y podman

Po instalacji sprawdź wersję, aby potwierdzić pomyślne skonfigurowanie:

podman --version

Jak uzyskać najnowszą wersję (oficjalne PPA)

Pakiet Podmana w standardowym repozytorium Ubuntu może nie być najnowszy. Jeśli chcesz najnowsze funkcje, użyj oficjalnego 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

Daje to dostęp do najnowszego wydania Podmana, równoważnego ekosystemom Red Hat i Fedora.

Podstawowy test funkcjonalności Podmana

Po instalacji uruchom szybkie sprawdzenie:

podman info

To polecenie wyświetla wersję Podmana, konfigurację oraz obsługiwane funkcje, takie jak tryb rootless.

Przetestuj pobranie i uruchomienie oficjalnego kontenera Alpine Linux:

podman run --rm -it alpine sh

Jeśli powłoka uruchomi się pomyślnie, Twoja konfiguracja Podmana działa prawidłowo.

4. Używanie Dockerfile z Podmanem

Co to jest Dockerfile?

Dockerfile to szablon do budowania obrazów kontenerów. To plik tekstowy, który wymienia obraz bazowy, pakiety do zainstalowania, pliki do skopiowania oraz inne instrukcje w kolejności.

Narzędzia kontenerowe takie jak Podman i Docker mogą automatycznie tworzyć spójne środowisko na podstawie tego pliku.

Przykładowe instrukcje:

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

Instaluje to pakiety, kopiuje skrypty i definiuje, co ma być uruchamiane domyślnie w powstałym obrazie.

Jak używać Dockerfile z Podmanem

Możesz budować obrazy kontenerów z Dockerfile przy pomocy Podmana, prawie dokładnie tak samo, jak z Dockerem.

1. Przygotuj katalog

Ustaw swoje pliki w następujący sposób:

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

app.sh może być prostym skryptem:

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

Uczyń skrypt wykonywalnym:

chmod +x app.sh

2. Buduj przy pomocy Podmana

Mając Dockerfile w bieżącym katalogu, uruchom:

podman build -t mypodmanapp .

To utworzy obraz kontenera o nazwie mypodmanapp.

3. Sprawdź wynik budowania

Zobacz utworzony obraz za pomocą:

podman images

4. Uruchom kontener

Uruchom kontener z zbudowanego obrazu:

podman run --rm mypodmanapp

Jeśli wszystko jest poprawnie skonfigurowane, zobaczysz: Hello from Podman container!

Różnica w stosunku do Containerfile

Podman obsługuje pliki nazwane Containerfile, które używają tej samej składni co Dockerfile. To po prostu neutralna nazwa, niepowiązana z marką Docker.

Funkcjonalność jest identyczna. Niezależnie od tego, czy nazwiesz plik Dockerfile, czy Containerfile, Podman go użyje:

podman build -f Containerfile -t myimage .

Wystarczy podać nazwę pliku opcją -f, jeśli to konieczne.

5. Praktyczny przykład: budowanie kontenera opartego na Ubuntu

Tworzenie Dockerfile opartego na Ubuntu

Przejdźmy krok po kroku przez tworzenie Dockerfile opartego na Ubuntu oraz budowanie i uruchamianie obrazu kontenera przy użyciu Podmana.

Oto prosty przykład 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"]

Ten Dockerfile:

  • Używa oficjalnego obrazu Ubuntu 22.04
  • Instaluje pakiet curl
  • Kopiuje hello.sh z hosta do kontenera
  • Ustawia hello.sh jako domyślny skrypt

Teraz utwórz prosty skrypt hello.sh:

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

Nadaj mu uprawnienia do wykonywania:

chmod +x hello.sh

Budowanie obrazu przy użyciu Podmana

Gdy pliki są gotowe, zbuduj obraz przy użyciu:

podman build -t ubuntu-hello .

Flaga -t ubuntu-hello oznacza (taguje) twój obraz; . określa katalog budowania.

Jeśli się powiedzie, zobaczysz swój nowy obraz wymieniony przy pomocy:

podman images

Uruchamianie i testowanie obrazu

Uruchom kontener z nowego obrazu:

podman run --rm ubuntu-hello

Przykładowe wyjście:

Hello from a Podman container!

Opcja --rm automatycznie usuwa kontener po zakończeniu, co jest idealne do testów.

Porada: Interaktywny dostęp do kontenera

Jeśli chcesz pracować interaktywnie wewnątrz kontenera, użyj opcji -it, aby uruchomić Bash:

podman run -it ubuntu-hello bash

Daje to lekkie środowisko programistyczne Ubuntu wewnątrz twojego kontenera.

6. Funkcje i wskazówki dotyczące Podmana

Zalety Podmana: elastyczność i bezpieczeństwo

Podman zapewnia większą elastyczność i zwiększone bezpieczeństwo, pozostając jednocześnie kompatybilnym z Dockerem. Oto kilka przydatnych funkcji i wskazówek dotyczących codziennej pracy.

Bezpieczne operacje w trybie bezrootowym

Jedną z kluczowych zalet Podmana jest tryb bezrootowy, który pozwala użytkownikom niebędącym rootem uruchamiać, zatrzymywać i zarządzać kontenerami.

Na przykład, możesz używać Podmana bez sudo:

podman run -it ubuntu bash

Operacje są ograniczone do katalogu domowego użytkownika, minimalizując ryzyko dla systemu. Jest to szczególnie cenne na współdzielonych serwerach lub w środowiskach deweloperskich.

Integracja z systemd w celu automatycznego uruchamiania

Podman może natychmiastowo integrować się z systemd, umożliwiając automatyczne uruchamianie kontenerów jako usług Linux.

Wygeneruj plik jednostki systemd przy pomocy:

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

Tworzy to plik jednostki w ~/.config/systemd/user/. Włącz i uruchom przy pomocy:

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

Kontenery będą teraz automatycznie restartować się nawet po ponownym uruchomieniu serwera.

Zarządzanie wieloma kontenerami przy użyciu podman-compose

Oprócz operacji na pojedynczych kontenerach, Podman obsługuje zarządzanie wieloma kontenerami. Korzystając z podman-compose, możesz zarządzać złożonymi projektami podobnie jak Docker Compose.

Zainstaluj przy pomocy pip:

pip install podman-compose

Ponieważ jest kompatybilny z plikami docker-compose.yml, migracja projektów jest prosta.

Aby uruchomić usługi, po prostu wykonaj:

podman-compose up -d

Podman pozwala natychmiast odtworzyć środowiska deweloperskie.

Inne przydatne polecenia i wskazówki

Czyszczenie nieużywanych obrazów i kontenerów

podman system prune -a

Usuń nieużywane pliki i obrazy, aby zwolnić miejsce.

Uzupełnianie w powłoce (bash/zsh)

Zainstaluj skrypty uzupełniania Podmana, aby ułatwić korzystanie z CLI:

sudo apt install podman-docker

To włącza uzupełnianie poleceń, podobnie jak w Dockerze, dla polecenia podman.

7. Migracja z Dockera do Podmana

Dlaczego migracja do Podmana jest na topie

Podczas gdy Docker od dawna jest de facto standardem dla kontenerów, Podman zyskuje na popularności dzięki mniejszej wadze i wyższemu bezpieczeństwu. Red Hat Enterprise Linux (RHEL) i Fedora przeszły domyślnie z Dockera na Podmana, co skłania wiele zespołów do rozważenia migracji.

Ta sekcja omawia praktyczne kroki i kwestie do rozważenia przy migracji z Dockera do Podmana.

Kompatybilność poleceń: Docker vs. Podman

Podman jest wysoce kompatybilny z poleceniami Dockera, więc możesz ogólnie zastąpić je bezpośrednio:

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

Ta płynna kompatybilność CLI jest główną zaletą Podmana.

Osiąganie pełnej kompatybilności z podman-docker

Jeśli twoje skrypty lub potoki CI/CD używają poleceń docker, zainstalowanie pakietu podman-docker pozwala Podmanowi służyć jako bezpośrednia zamiana:

sudo apt install podman-docker

To konfiguruje polecenie docker jako dowiązanie symboliczne do Podmana:

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

Wtedy możesz uruchamiać skrypty Dockera bez modyfikacji.

Alternatywa dla Docker Compose: podman-compose

Jeśli używasz Docker Compose do projektów wielo-kontenerowych, podman-compose zapewnia podobną funkcjonalność.

Jest wysoce kompatybilny, ale niektóre opcje Compose mogą się różnić (np. depends_on), a logowanie zdarzeń lub sprawdzanie stanu zdrowia może działać inaczej. Dla podstawowych stosów web + DB migracja jest zazwyczaj płynna.

Migracja obrazów i wolumenów

Lokalne obrazy Dockera nie są domyślnie widoczne dla Podmana. Możesz:

Opcja 1: Ponowne pobranie z Podmanem

podman pull ubuntu:22.04

Opcja 2: Eksport z Dockera → Import do Podmana

# Export with Docker
docker save myimage > myimage.tar

# Import with Podman
podman load < myimage.tar

To sprawia, że obrazy zbudowane w Dockerze są dostępne w Podmanie.

Inne kwestie do rozważenia

  • Działanie bez roota: Docker zazwyczaj działa jako root, podczas gdy Podman jest zaprojektowany do działania bez roota domyślnie
  • Struktura daemona: Podman jest bezdaemonowy, więc zarządzanie procesami różni się
  • Lokalizacje przechowywania logów i danych mogą się różnić — sprawdź konfiguracje podczas migracji

8. Często zadawane pytania (FAQ)

P1. Jakie są główne różnice między Podmanem a Dockerem?

O1. Największa różnica polega na tym, że Podman jest „bezdaemonowy” (nie wymaga procesu w tle), co czyni go lżejszym i bardziej bezpiecznym. Podman obsługuje również tryb bez roota, umożliwiając użytkownikom zarządzanie kontenerami bez podwyższonych uprawnień. Kompatybilność CLI jest wysoka, więc większość poleceń jest taka sama.

P2. Czy istnieje różnica między Dockerfile a Containerfile?

O2. Nie ma różnicy funkcjonalnej. Oba to pliki opisujące, jak budować kontenery, z identyczną składnią. Niektóre projekty preferują „Containerfile” jako neutralną nazwę, ale możesz używać obu nazw z Podmanem.

P3. Czy mogę używać plików Docker Compose z Podmanem?

O3. Podman nie obsługuje natywnie Docker Compose, ale możesz użyć podman-compose (narzędzia Python) do interpretacji i uruchamiania plików docker-compose.yml w środowisku Podmana.

Niektóre opcje Compose (depends_on itp.) mogą mieć ograniczenia, więc przetestuj złożone konfiguracje z wyprzedzeniem.

P4. Czy Podman jest stabilny na Ubuntu?

O4. Tak, Podman działa niezawodnie na Ubuntu 20.04 LTS i nowszych. Jest dostępny w oficjalnych repozytoriach Ubuntu i można go zainstalować za pomocą apt. Dla najnowszej wersji możesz użyć oficjalnego PPA.

P5. Czy w trybie bez roota istnieją ograniczenia dostępu?

O5. W trybie bez roota niektóre uprzywilejowane operacje i wiązanie do portów poniżej 1024 są ograniczone. Przekierowanie portów może to obejść. Dla większości przypadków użycia tryb bez roota jest praktyczny i zalecany.

P6. Czy Podman może pobierać obrazy z Docker Hub?

O6. Tak, Podman może domyślnie pobierać obrazy z Docker Hub. Czasami możesz potrzebować podać pełną ścieżkę rejestru, np. docker.io/library/ubuntu:

podman pull docker.io/library/ubuntu

Podman obsługuje również rejestry takie jak Quay.io i GitHub Container Registry.

P7. Czy Podman nadaje się do użycia w produkcji?

A7. Tak, Podman zawiera koncepty podów kompatybilne z Kubernetes oraz integrację z systemd dla automatycznego uruchamiania, co czyni go odpowiednim dla środowisk produkcyjnych — szczególnie tam, gdzie potrzebne jest silne zabezpieczenie. Podman jest teraz domyślny w Red Hat Enterprise Linux i Fedora, z szerokim przyjęciem.