Een inleiding tot Podman

1. Inleiding

In deze tutorial kijken we naar Podman (afkorting van "Pod Manager"), de functies en het gebruik ervan.

2. Podman

Podman is een open-source tool voor containerbeheer voor het ontwikkelen, beheren en uitvoeren van OCI-containers. Laten we eens kijken naar enkele voordelen van Podman, in vergelijking met andere tools voor containerbeheer:

  • Afbeeldingen gemaakt door Podman zijn compatibel met andere tools voor containerbeheer. De afbeeldingen die door Podman zijn gemaakt, voldoen aan de OCI-standaard en kunnen daarom naar andere containerregisters zoals Docker Hub worden gepusht
  • Het kan als een normale gebruiker worden uitgevoerd zonder dat root-rechten nodig zijn. Wanneer Podman wordt uitgevoerd als een niet-rootgebruiker, maakt hij een gebruikersnaamruimte aan waarin het de rootrechten verkrijgt. Hierdoor kan het bestandssystemen mounten en de vereiste containers instellen
  • Het biedt de mogelijkheid om pods te beheren. In tegenstelling tot de andere containerruntime-tools, laat Podman de gebruiker pods beheren (een groep van een of meer containers die samen werken). Gebruikers kunnen bewerkingen uitvoeren zoals maken, weergeven en inspecteren op de pods

Er zijn echter bepaalde beperkingen voor Podman:

  • Het werkt alleen op Linux-gebaseerde systemen. Momenteel draait Podman alleen op Linux-gebaseerde besturingssystemen en heeft het geen wrapper voor Windows en macOS.
  • Er is geen alternatief voor Docker Compose. Podman heeft geen ondersteuning voor het lokaal beheren van meerdere containers, vergelijkbaar met wat Docker Compose doet. Een implementatie van Docker Compose met behulp van de Podman-backend wordt ontwikkeld als onderdeel van het podman-componeren project, maar hier wordt nog aan gewerkt.

3. Vergelijking met Docker

Nu we hebben begrepen wat Podman is en wat de voordelen en beperkingen zijn, laten we het vergelijken met Docker, een van de meest gebruikte tools voor containerbeheer.

3.1. Opdrachtregelinterface (CLI)

Podman biedt dezelfde set commando's aan die worden weergegeven door de Docker-client. Met andere woorden, er is een een-op-een mapping tussen de commando's van deze twee hulpprogramma's.

De commando's zoals podman ps en podman afbeeldingen zal de containers of afbeeldingen die zijn gemaakt met Docker niet weergeven. Dit komt doordat de lokale repository van Podman / var / lib / containers in tegenstelling tot / var / lib / docker onderhouden door Docker.

3.2. Containermodel

Docker gebruikt een client-server-architectuur voor de containers, terwijl Podman het traditionele fork-exec-model gebruikt gebruikelijk in Linux-processen. De containers die met Podman zijn gemaakt, zijn het onderliggende proces van het bovenliggende Podman-proces. Dit is de reden dat wanneer het versiecommando wordt uitgevoerd voor zowel Docker als Podman, Docker de versies van zowel de client als de server weergeeft, terwijl Podman alleen de versie weergeeft.

Voorbeelduitvoer voor docker-versie:

Client: Versie: 17.12.0-ce API-versie: 1.35 Go-versie: go1.9.2 Git commit: c97c6d6 Gebouwd: wo 27 december 20:11:19 2017 OS / Arch: linux / amd64 Server: Engine: Versie: 17.12.0 -ce API-versie: 1.35 (minimumversie 1.12) Go-versie: go1.9.2 Git commit: c97c6d6 Gebouwd: wo 27 december 20:09:53 2017 OS / Arch: linux / amd64 Experimenteel: false

Voorbeelduitvoer voor podman-versie:

Versie: 0.3.2-dev Go Versie: go1.9.4 Git Commit: "4f4a78abb40fa0e8407e8a55d5a67a2650d8fd96" Gebouwd: ma 5 maart 11:10:35 2018 OS / Arch: linux / amd64

Aangezien Podman zelf als een proces draait, heeft het geen daemon-processen op de achtergrond nodig. In tegenstelling tot Podman, vereist Docker een daemon-proces, Docker-daemon, om de API-verzoeken tussen de client en de server te coördineren.

3.3. Wortelloze modus

Zoals eerder vermeld, heeft Podman geen root-toegang nodig om zijn opdrachten uit te voeren. Docker, aan de andere kant, is afhankelijk van het daemon-proces, vereist root-rechten of vereist dat de gebruiker deel uitmaakt van het havenarbeider groep om de Docker-opdrachten te kunnen uitvoeren zonder rootrechten.

$ sudo usermod -aG docker $ USER

4. Installatie en gebruik

Laten we beginnen met het installeren van Podman. De podman info commando geeft Podman-systeeminformatie weer en helpt de installatiestatus te controleren.

$ podman info

Deze opdracht geeft de informatie weer met betrekking tot de host, zoals de kernelversie, gebruikte en beschikbare swapruimte en ook de informatie met betrekking tot Podman, zoals registers waartoe het toegang heeft om afbeeldingen op te halen en te pushen, opslagstuurprogramma dat het gebruikt, opslaglocatie en andere:

host: MemFree: 546578432 MemTotal: 1040318464 SwapFree: 4216320000 SwapTotal: 4216320000 arch: amd64 cpus: 2 hostnaam: base-xenial kernel: 4.4.0-116-generiek os: linux uptime: 1m 2.64s onveilige registers: registries: [] registries: [] : registries: - docker.io - registry.fedoraproject.org - registry.access.redhat.com store: ContainerStore: number: 0 GraphDriverName: overlay GraphOptions: null GraphRoot: / var / lib / containers / storage GraphStatus: Backing Filesystem: extfs Native Overlay Diff: "true" Ondersteunt d_type: "true" ImageStore: nummer: 0 RunRoot: / var / run / containers / storage

Laten we eens kijken naar enkele van de basiscommando's van Podman.

4.1. Een afbeelding maken

Eerst kijken we naar het maken van een afbeelding met Podman. Laten we beginnen met het maken van een Dockerfile met de volgende inhoud:

VAN centos: laatste RUN yum -y installeer httpd CMD ["/ usr / sbin / httpd", "-D", "FOREGROUND"] EXPOSE 80 

Laten we nu de afbeelding maken met de bouwen opdracht:

$ podman build.

Hier trekken we eerst het basisimage van CentOS, installeren Apache er bovenop en voeren het vervolgens uit als een voorgrondproces met poort 80 zichtbaar. We hebben toegang tot de Apache-server door deze afbeelding uit te voeren en de blootgestelde poort toe te wijzen aan een hostpoort.

De bouwen commando geeft recursief alle mappen door die beschikbaar zijn in de contextdirectory. De huidige werkdirectory wordt standaard de buildcontext wanneer er geen directory is opgegeven. Daarom is het raadzaam om geen bestanden en mappen in de contextdirectory te hebben die niet nodig zijn voor het maken van een afbeelding.

4.2. Lijst met beschikbare afbeeldingen

De podman afbeeldingen commando geeft een lijst van alle beschikbare afbeeldingen. Het ondersteunt ook verschillende opties om de afbeeldingen te filteren.

$ podman afbeeldingen

Dit commando toont alle afbeeldingen die beschikbaar zijn in de lokale repository. Het bevat de informatie over uit welke opslagplaats de afbeelding is gehaald, de tag, de afbeeldings-ID, de gemaakte tijd en grootte.

REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/centos latest 0f3e07c0138f 2 maanden geleden 227MB 

4.3. Afbeeldingen uitvoeren

De rennen commando maakt een container van een bepaalde afbeelding en voert deze vervolgens uit. Laten we de CentOS-afbeelding uitvoeren die we eerder hebben gemaakt

$ podman run -p 80:80 -bewerk centos

Dit commando controleert eerst of er een lokale image beschikbaar is voor CentOS. Als de afbeelding niet lokaal aanwezig is, probeert het de afbeelding op te halen uit de registers die zijn geconfigureerd. Als de afbeelding niet aanwezig is in de registers, wordt er een fout weergegeven dat de afbeelding niet kan worden gevonden.

Het bovenstaande run-commando specificeert om de blootgestelde 80-poort van de container toe te wijzen aan de poort 80 van de host en de dit flag geeft aan dat de container in losgekoppelde en interactieve modus moet worden uitgevoerd. De id van de gemaakte container is de uitvoer.

4.4. Afbeeldingen verwijderen

De rmi commando verwijdert de afbeeldingen die aanwezig zijn in de lokale repository. Meerdere afbeeldingen kunnen worden verwijderd door hun id's als spaties gescheiden in de invoer op te geven. Specificeren van het -een flag verwijdert alle afbeeldingen

$ podman rmi 785188cd988c

4.5. Lijst van de containers

Alle beschikbare containers, inclusief degenen die niet actief zijn, kunnen worden weergegeven met behulp van de ps -a opdracht. Net als bij de afbeeldingen commando, dit kan ook worden gebruikt met verschillende opties.

$ podman ps -a

De uitvoer voor het bovenstaande commando toont alle containers met de informatie zoals de afbeelding waaruit het is gemaakt, het commando dat is gebruikt om het te starten, de status, de poorten waarop het draait en de naam die eraan is toegewezen.

CONTAINER ID AFBEELDING COMMANDO GEMAAKT BIJ STATUS POORTEN NAMEN eed30719cd37 centos / bin / bash 2019-12-09 02:57:37 +0000 UTC Up 14 minuten geleden 0.0.0.0:80->80/udp, 0.0.0.0:80-> 80 / tcp reverent_liskov

4.6. Containers verwijderen

De rm commando verwijdert de containers. Met deze opdracht worden de containers in actieve of gepauzeerde staat niet verwijderd. Ze moeten eerst worden gestopt en vervolgens worden verwijderd.

$ podman stop eed30719cd37 $ podman rm eed30719cd37

4.7. Pods maken

De pod maken commando maakt een pod. De opdracht create ondersteunt verschillende opties.

$ podman pod maken

De pod maken commando maakt een pod met een infra container er standaard aan gekoppeld, tenzij expliciet ingesteld met infra-vlag als false.

$ podman pod create --infra = false

Met Infra container kan Podman verschillende containers in de pod aansluiten.

4.8. Lijst met pods

De pod lijst commando toont alle beschikbare pods

$ podman pod lijst

De uitvoer van deze opdracht geeft de informatie weer zoals de pod-id, de naam, het aantal gekoppelde containers, de id van de infra-container, indien beschikbaar:

POD ID NAAM STATUS GEMAAKT # CONTAINERS INFRA ID 7e0a68528aed gallant_raman Bezig 5 seconden geleden 1 c6d06673c667

Alle beschikbare Podman-commando's en hun gebruik zijn te vinden in de officiële documentatie.

5. Conclusie

In deze tutorial hebben we gekeken naar de basisprincipes van Podman en zijn functies, de vergelijking met Docker en enkele van de beschikbare commando's.

Zoals gewoonlijk is het codevoorbeeld dat in dit artikel wordt gebruikt, beschikbaar via GitHub.