Wyszukiwanie w witrynie

Jak zarządzać kontenerami za pomocą Podmana i Skopeo w RHEL 8


Jednym z wyzwań, przed którymi stanęli programiści w przeszłości, było zapewnienie niezawodnego działania aplikacji w wielu środowiskach komputerowych. Często aplikacje nie działały zgodnie z oczekiwaniami lub napotykały błędy i całkowicie kończyły się niepowodzeniem. I tam narodziła się koncepcja kontenerów.

Czym są obrazy kontenerów?

Obrazy kontenera to pliki statyczne dostarczane z kodem wykonywalnym działającym w izolowanym środowisku. Obraz kontenera zawiera biblioteki systemowe, zależności i inne ustawienia platformy potrzebne aplikacji do działania w różnorodnych środowiskach.

Red Hat Linux udostępnia zestaw przydatnych narzędzi kontenerowych, które można wykorzystać do bezpośredniej pracy z kontenerami systemu Linux za pomocą wymagających poleceń okna dokowanego. Obejmują one:

  • Podman – jest to silnik kontenerowy pozbawiony demonów, umożliwiający uruchamianie i zarządzanie kontenerami OCI w trybie root lub bez rootowania. Podman jest podobny do Dockera i ma te same opcje poleceń, z tą różnicą, że Docker jest demonem. Możesz pobierać, uruchamiać i zarządzać obrazami kontenerów za pomocą podman w podobny sposób, jak w Dockerze. Podman posiada wiele zaawansowanych funkcji, w pełni integruje się z systemami i oferuje obsługę przestrzeni nazw użytkownika, która obejmuje uruchamianie kontenerów bez konieczności posiadania konta root.
  • Skopeo: jest to narzędzie wiersza poleceń służące do kopiowania obrazów kontenerów z jednego rejestru do drugiego. Za pomocą Skopeo możesz kopiować obrazy do i z określonego hosta, a także kopiować obrazy do innego rejestru kontenerów lub środowiska. Oprócz kopiowania obrazów, można go używać do sprawdzania obrazów z różnych rejestrów oraz używania podpisów do tworzenia i weryfikowania obrazów.
  • Buildah: jest to zestaw narzędzi wiersza poleceń służących do tworzenia obrazów kontenerów OCI i zarządzania nimi przy użyciu plików Docker.

W tym artykule skupimy się na zarządzaniu kontenerami za pomocą podman i Skopeo.

Wyszukiwanie obrazów kontenerów z rejestru zdalnego

Polecenie podman search umożliwia przeszukiwanie wybranych zdalnych rejestrów w poszukiwaniu obrazów kontenerów. Domyślna lista rejestrów zdefiniowana jest w pliku registries.conf znajdującym się w katalogu /etc/containers/.

Rejestry są zdefiniowane w 3 sekcjach.

  • [registries.search] – ta sekcja określa domyślne rejestry, w których podman może wyszukiwać obrazy kontenerów. Wyszukuje żądany obraz w rejestrach registry.access.redhat.com, registry.redhat.io i docker.io.

  • [registries.insecure] – ta sekcja określa rejestry, które nie implementują szyfrowania TLS, tj. rejestry niezabezpieczone. Domyślnie nie określono żadnych wpisów.

  • [registries.block] – blokuje lub odmawia dostępu do określonych rejestrów z systemu lokalnego. Domyślnie nie określono żadnych wpisów.

Jako zwykły użytkownik (inny niż root) uruchamiający polecenie podman możesz zdefiniować własny plik registries.conf w swoim katalogu domowym ($HOME/.config /containers/registries.conf), aby zastąpić ustawienia ogólnosystemowe.

Zasady określania rejestrów

Określając rejestry, należy pamiętać o następujących kwestiach:

  • Każdy rejestr powinien być ujęty w pojedyncze cudzysłowy.
  • Rejestry można określić przy użyciu nazwy hosta lub adresu IP.
  • Jeżeli określono wiele rejestrów, należy je oddzielić przecinkami.
  • Jeśli rejestr korzysta z niestandardowego portu – albo portu TCP 443 dla bezpiecznego, a 80 dla niezabezpieczonego – numer portu należy podać obok nazwy rejestru, np. rejestr.example.com:5566.

Aby przeszukać rejestr w poszukiwaniu obrazu kontenera przy użyciu składni:

podman search registry/container_image

Na przykład, aby wyszukać obraz Redis w rejestrze registry.redhat.io, wywołaj polecenie:

podman search registry.redhat.io/redis

Aby wyszukać uruchomienie obrazu kontenera MariaDB.

podman search registry.redhat.io/mariadb

Aby uzyskać szczegółowy opis obrazu kontenera, użyj opcji --no-trunc przed nazwą obrazu kontenera z otrzymanych wyników. Na przykład spróbujemy uzyskać szczegółowy opis obrazu kontenera MariaDB, jak pokazano:

podman search --no-trunc registry.redhat.io/rhel8/mariadb-103

Ciągnięcie obrazów kontenerów

Wyciąganie lub pobieranie obrazów kontenerów ze zdalnego rejestru wymaga wcześniejszego uwierzytelnienia. Na przykład, aby pobrać obraz kontenera MariaDB, najpierw zaloguj się do rejestru Redhat:

podman login

Podaj swoją nazwę użytkownika i hasło, a następnie naciśnij „ENTER” na klawiaturze. Jeśli wszystko pójdzie dobrze, powinieneś otrzymać wiadomość potwierdzającą, że logowanie do rejestru powiodło się.

Login Succeeded!

Teraz możesz pobrać obraz, korzystając z pokazanej składni:

podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

<registry> odnosi się do zdalnego hosta lub rejestru, który udostępnia repozytorium obrazów kontenerów w <port> protokołu TCP. <namespace> i <name> wspólnie określają obraz kontenera na podstawie <namespace> w rejestrze. Na koniec opcja <tag> określa wersję obrazu kontenera. Jeśli nie określono żadnego, używany jest tag domyślny – najnowszy.

Zawsze zaleca się dodanie zaufanych rejestrów, czyli takich, które zapewniają szyfrowanie i nie pozwalają anonimowym użytkownikom na tworzenie kont o losowych nazwach.

Aby pobrać obraz MariaDB, uruchom polecenie:

podman pull registry.redhat.io/rhel8/mariadb-103
  • <registry> – rejestr.redhat.io
  • <namespace> – rhel8
  • – MariaDB
  • <tag> – 103

W przypadku pobierania kolejnych obrazów kontenerów dalsze logowanie nie jest wymagane, ponieważ jesteś już uwierzytelniony. Aby pobrać obraz kontenera Redis, po prostu uruchom:

podman pull registry.redhat.io/rhscl/redis-5-rhel7

Wyświetlanie obrazów kontenerów

Po zakończeniu pobierania obrazów możesz wyświetlić obrazy aktualnie istniejące na hoście, uruchamiając polecenie podman Images.

podman images

Sprawdzanie obrazów kontenerów

Przed uruchomieniem kontenera zawsze dobrze jest sprawdzić obraz i zrozumieć, co on robi. Polecenie podman inspect wypisuje morze metadanych o kontenerze, takich jak system operacyjny i architektura.

Aby sprawdzić obraz, uruchom polecenie podman inspect, a następnie podaj identyfikator obrazu lub repozytorium.

podman inspect IMAGE ID
OR
podman inspect REPOSITORY

W poniższym przykładzie sprawdzamy kontener MariaDB.

podman inspect registry.redhat.io/rhel8/mariadb-103

Aby pobrać określone metadane dla kontenera, należy użyć opcji --format, po której należy podać metadane i tożsamość kontenera (identyfikator obrazu lub nazwa).

W poniższym przykładzie pobieramy informacje o architekturze i opisie podstawowego kontenera RHEL 8, który znajduje się w sekcji „Etykiety”.

podman inspect --format=’{{.Labels.architecture}}’ image ID
podman inspect --format=’{{.Labels.description}}’ image ID

Aby sprawdzić zdalny obraz z innego rejestru, użyj polecenia skopeo inspect. W poniższym przykładzie sprawdzamy obraz inicjujący RHEL 8 hostowany w Dockerze.

skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init

Tagowanie obrazów kontenerów

Jak można zauważyć, nazwy obrazów mają zazwyczaj charakter ogólny. Na przykład obraz redis jest oznaczony:

registry.redhat.io/rhscl/redis-5-rhel7

Dzięki tagowaniu obrazy zyskują bardziej intuicyjną nazwę, co pozwala lepiej zrozumieć, co zawierają. Używając polecenia tag podman, możesz utworzyć tag obrazu, który jest w zasadzie aliasem nazwy obrazu, który składa się z różnych części.

To są:

registry/username/NAME:tag

Na przykład, aby zmienić ogólną nazwę obrazu Redis o identyfikatorze 646f2730318c, wykonamy polecenie:

podman tag 646f2730318c myredis

Aby dodać tag na końcu, dodaj pełny dwukropek i numer tagu:

podman tag 646f2730318c myredis:5.0

Bez dodawania numeru tagu zostanie mu po prostu przypisany najnowszy atrybut.

Uruchamianie obrazów kontenerów

Aby uruchomić kontener, użyj polecenia podman run. Na przykład:

podman run image_id

Aby uruchomić kontener w tle jako usługę demona, użyj opcji -d, jak pokazano.

podman run -d image_id

Przykładowo, aby uruchomić obraz redis o identyfikatorze 646f2730318c wywołamy polecenie:

podman run -d 646f2730318c

Jeśli używasz kontenera opartego na systemie operacyjnym, takim jak obraz podstawowy RHEL 8, możesz uzyskać dostęp do powłoki za pomocą dyrektywy -it. Opcja -i tworzy sesję interaktywną, podczas gdy opcja -t uruchamia sesję terminalową. Opcja --name ustawia nazwę kontenera na mybash, podczas gdy jest to identyfikator obrazu ecbc6f53bba0 obrazu podstawowego.

podman run -it --name=mybash ecbc6f53bba0

Następnie możesz uruchamiać dowolne polecenia powłoki. W poniższym przykładzie sprawdzamy wersję systemu operacyjnego obrazu kontenera.

cat /etc/os-release

Aby wyjść z kontenera, po prostu wywołaj polecenie exit.

exit

Po wyjściu z kontenera zatrzymuje się on automatycznie. Aby ponownie uruchomić kontener, użyj polecenia podman start z flagą -ai, jak pokazano.

podman start -ai mybash

Po raz kolejny daje to dostęp do powłoki.

Wyświetlanie uruchomionych obrazów kontenerów

Aby wyświetlić listę aktualnie uruchomionych kontenerów, użyj polecenia podman ps, jak pokazano.

podman ps

Aby wyświetlić wszystkie kontenery, łącznie z tymi, które zostały zamknięte po uruchomieniu, użyj polecenia:

podman ps -a

Skonfiguruj obrazy kontenerów do automatycznego uruchamiania w ramach usługi Systemd

W tej sekcji skupiamy się na tym, jak można skonfigurować kontener do działania bezpośrednio w systemie RHEL jako usługa systemowa.

Najpierw uzyskaj preferowany obraz. W tym przypadku pobraliśmy obraz Redis z centrum dokowanego:

podman pull docker.io/redis

Jeśli w systemie działa SELinux, musisz aktywować wartość logiczną container_manage_cgroup, aby uruchamiać kontenery za pomocą systemd.

setsebool -p container_manage_cgroup on

Następnie uruchom obraz kontenera w tle i przypisz go do preferowanej nazwy obrazu. W tym przykładzie nazwaliśmy nasz obraz redis_server i zmapowaliśmy port 6379 z kontenera na nasz host RHEL 8

podman run -d --name redis_server -p 6379:6379 redis

Następnie utworzymy plik konfiguracyjny jednostki systemd dla redis w katalogu /etc/systemd/system/.

vim /etc/systemd/system/redis-container.service

Wklej poniższą zawartość do pliku.

[Unit]
Description=Redis container

[Service]
Restart=always
ExecStart=/usr/bin/podman start -a redis_server
ExecStop=/usr/bin/podman stop -t 2 redis_server

[Install]
WantedBy=local.target

Zapisz i wyjdź z pliku.

Następnie skonfiguruj kontener tak, aby uruchamiał się automatycznie podczas uruchamiania.

systemctl enable redis-container.service

Następnie uruchom kontener i sprawdź jego status działania.

systemctl start redis-container.service
systemctl status redis-container.service

Skonfiguruj pamięć trwałą dla obrazów kontenerów

Podczas uruchamiania kontenerów rozsądne jest skonfigurowanie trwałej pamięci zewnętrznej na hoście. Zapewnia to kopię zapasową na wypadek awarii kontenera lub jego przypadkowego usunięcia.

Aby zachować dane, zamapujemy katalog znajdujący się na hoście na katalog wewnątrz kontenera.

podman run --privileged -it -v /var/lib/containers/backup_storage:/mnt registry.redhat.io/ubi8/ubi /bin/bash

Opcja --privileged jest przekazywana, gdy SELinux jest ustawiony na wymuszanie. Opcja -v określa wolumin zewnętrzny, który znajduje się na hoście. Woluminem kontenera jest tutaj katalog /mnt.

Po uzyskaniu dostępu do powłoki utworzymy przykładowy plik testing.txt w katalogu /mnt, jak pokazano.

echo "This tests persistent external storage" > /mnt/testing.txt

Następnie wyjdziemy z kontenera i sprawdzimy, czy plik istnieje w pamięci zewnętrznej znajdującej się na hoście

exit
cat /var/lib/containers/backup_storage/testing.txt

WyjścieTestuje trwałą pamięć zewnętrzną.

Zatrzymywanie i usuwanie kontenerów

Gdy skończysz uruchamiać kontener, możesz go zatrzymać za pomocą polecenia podman stop, po którym następuje container-id, który możesz uzyskać z podman ps< polecenie.

podman stop container-id

Aby usunąć kontenery, których już nie potrzebujesz, najpierw zatrzymaj tę operację, a następnie wywołaj polecenie podman rm, po którym opcjonalnie możesz podać identyfikator lub nazwę kontenera.

podman rm container-id

Aby usunąć wiele kontenerów za jednym razem, określ identyfikatory kontenera oddzielone spacją.

podman rm container-id-1 container-id-2 container-id-3

Aby wyczyścić wszystkie kontenery, uruchom polecenie:

podman rm -a

Usuwanie obrazu

Aby usunąć obraz, najpierw upewnij się, że wszystkie kontenery wygenerowane z obrazów zostały zatrzymane i usunięte, jak opisano w poprzednim podtemacie.

Następnie kontynuuj i uruchom komendę podman -rmi, a następnie identyfikator obrazu, jak pokazano:

podman -rmi image-id

Wniosek

To kończy ten rozdział dotyczący zarządzania kontenerami i pracy z nimi w RHEL 8. Mamy nadzieję, że ten przewodnik zapewnił przyzwoite zrozumienie kontenerów oraz sposobów interakcji i zarządzania nimi w systemie RHEL przy użyciu podman i Skopeo.