Podman installeren en gebruiken om Containers te draaien op Rocky Linux 8
Podman is een gratis en open-source container platform gebouwd om containers en pods te ontwikkelen, beheren en inzetten op een Linux omgeving. Redhat ontwikkelde Podman in 2018. Het is een containerisatie engine die anders werkt dan Docker. Podman is niet afhankelijk van een daemon om te werken, in tegenstelling tot Docker dat Docker CLI en Docker daemon gebruikt. Afhankelijk zijn van daemon leidt tot een single point of failure.
Podman is ontworpen volgens de OCI (Open Container Initiative) standaarden die Podman in staat stellen direct te interageren met de kernel, containers en images. Het is ook veiliger dan Docker omdat het geen root toegang nodig heeft. Podman kan gebruikt worden als een drop-in vervanging voor Docker omdat beide OCI-compliant zijn.
Dit artikel laat je zien hoe je Podman installeert en gebruikt om images en containers te maken en te beheren.
Vereisten
Een Rocky Linux gebaseerde server
Een non-sudo gebruiker met root privileges.
Zorg ervoor dat de server is bijgewerkt.
$ sudo dnf update
Installeer Podman
Podman is opgenomen in de container-tools
module, samen met Buildah en Skopeo. Het is ook beschikbaar in de AppStream repository voor Rocky Linux 8. We zullen de module methode gebruiken.
Installeer Podman met het dnf module
commando.
$ sudo dnf module install container-tools
Controleer de versie van Podman om te zien of hij goed geïnstalleerd is.
$ podman --version podman version 3.2.3
Container images zoeken en downloaden
Om naar het image van Nginx te zoeken, gebruik je het volgende commando.
$ podman search nginx
In de uitvoer zie je de naam van het register waar het image vandaan komt en een beschrijving van de images.
Om het image te downloaden, gebruik je een van de volgende commando’s.
$ podman pull docker.io/library/nginx OR $ podman pull nginx
Je kunt de gedownloade images bekijken via het volgende commando.
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest f8f4ffc8092c 3 days ago 138 MB
Containers uitvoeren
Gebruik het volgende commando om een container te draaien die het Nginx image gebruikt. We hebben de container de naam webserver gegeven.
$ podman run -d --name webserver nginx
We kunnen hetzelfde image gebruiken om een andere container met een andere naam te lanceren.
$ podman run -d --name webserver2 nginx
We kunnen een onbeperkt aantal containers starten met hetzelfde image.
Containers opnoemen en stoppen
Om alle draaiende containers op te sommen, gebruik je het volgende commando.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 31 seconds ago Up 31 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 3 seconds ago webserver2
Stop de draaiende container.
$ podman stop webserver webserver
Controleer of hij gestopt is.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Om alle containers op te sommen, ook de gestopte, moet je de vlag -a
gebruiken.
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Exited (0) 35 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Start een gestopte container
Gebruik het volgende commando om een gestopte container te starten.
$ podman start webserver webserver
Controleer of hij gestart is.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 3 minutes ago Up 16 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Up 2 minutes ago webserver2
Container verwijderen
Je moet een container stoppen voordat je hem verwijdert.
$ podman stop webserver2
Verwijder de container.
$ podman rm webserver2
Je kunt een draaiende container verwijderen door de --force
vlag te gebruiken.
$ podman rm webserver2 --force 35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
Container doden
Stoppen en Killen van een Container zijn twee verschillende dingen die uiteindelijk hetzelfde bereiken. Het verschil is dat Stopping een container sierlijk afsluit, terwijl Killing een container met geweld beëindigt, met gegevensverlies tot gevolg.
Gebruik het volgende commando om de container te doden.
$ podman kill -s 9 webserver2
Het bovenstaande commando gebruikt de SIGNAL 9 (SIGKILL)
optie om de container te doden.
Om alle containers te doden, gebruik je de --all
of -a
vlag en om alleen de nieuwste container te doden, gebruik je de --latest
of -l
vlag.
Verwijder beeld
Je kunt de beelden wissen met het rmi
commando.
$ podman rmi registry.redhat.io/rhel8/rsyslog
Je kunt meerdere images verwijderen door ze met komma’s van elkaar te scheiden.
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
Om alle images op je systeem te verwijderen, gebruik je de -a
vlag.
$ podman rmi -a
Containerlogs bekijken
Om de container logs te bekijken, gebruik je het volgende commando.
$ podman logs webserver /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up ......
Je kunt de logs beperken tot de laatste 5 regels door de --tail
optie te gebruiken.
$ podman logs --tail=5 webserver 2021/10/05 10:13:52 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/10/05 10:13:52 [notice] 1#1: OS: Linux 4.18.0-305.19.1.el8_4.x86_64 2021/10/05 10:13:52 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 262144:262144 2021/10/05 10:13:52 [notice] 1#1: start worker processes 2021/10/05 10:13:52 [notice] 1#1: start worker process 23
Standaard krijg je geen tijdstempels op de logs. Gebruik de -t
vlag om tijdstempels aan je logs toe te voegen.
$ podman logs -t webserver 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ 2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf .....
Containers inspecteren
Inspecteren van een container drukt de informatie over een container af.
$ podman inspect webserver [ { "Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59", "Created": "2021-10-05T09:25:01.784949744Z", "Path": "/docker-entrypoint.sh", "Args": [ "nginx", "-g", "daemon off;" ], "State": { "OciVersion": "1.0.2-dev", "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4423, ....
Het standaard commando drukt een lange uitvoer af in JSON formaat. Om de uitvoer te filteren moet je de --format
optie gebruiken. Om te weten te komen wanneer de container gestart werd, voer je het volgende commando uit.
$ podman inspect webserver --format '{{.State.StartedAt}}' 2021-10-05 10:13:52.794806322 +0000 UTC
Toegang tot Container Shell
Je kunt de Shell prompt van elke container openen met de exec
optie.
$ podman exec -it webserver2 /bin/bash
Pods
Podman heeft een unieke eigenschap die Docker mist. Podman kan Pods maken van containers die samen werken. Hiermee kun je meerdere containers samen beheren.
Om een Pod te maken, gebruik je het volgende commando.
$ podman pod create --name mypod
Voeg de Containers toe aan de nieuw aangemaakte pod.
$ podman run --pod mypod --name myimage1 image:latest $ podman run --pod mypod --name myimage2 diff-image:latest
Je kunt nu containers beheren met eenvoudige eenregelige commando’s.
$ podman kill mypod # Kill all containers $ podman restart mypod # Restart all containers $ podman stop mypod # Stop all containers $ podman pod ps # List all pods $ podman pod top mypod # Display running processes in a pod $ podman pod inspect mypod # Inspect a Pod $ podman pod rm mypod # Remove the pod
Conclusie
Dit beëindigt onze tutorial over het installeren en gebruiken van Podman om Containers te draaien. Er zijn een heleboel dingen die je met Podman kunt doen die we niet behandeld hebben. Als je vragen hebt, stel ze dan in de reacties hieronder.