GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo instalar y usar Podman en Rocky Linux/Alma Linux/Centos 8

Podman complementa Buildah y Skopeo al ofrecer una experiencia similar a la línea de comandos de Docker:permite a los usuarios ejecutar contenedores independientes (no orquestados). Y Podman no requiere un daemon para ejecutar contenedores y pods, por lo que podemos despedirnos fácilmente de los grandes y gordos daemons. No hay demonios en segundo plano haciendo cosas, y esto significa que Podman se puede integrar en los servicios del sistema a través de systemd .

En esta guía, aprenderemos cómo instalar Podman en Rocky Linux/Alma Linux/Centos 8. Esta publicación también funciona para derivados de RHEL 8 como Oracle Linux.

Publicaciones relacionadas

  • Cómo instalar y usar Podman en Debian 11
  • Cómo instalar y usar Podman en Fedora 34/35
  • Cómo instalar y usar Podman en OpenSUSE Leap 15.3
  • Cómo instalar y configurar docker en Rocky Linux/Centos 8
  • Introducción a Docker Compose con ejemplos
  • Docker como agente de compilación:ejecute compilaciones de Jenkins en Docker

Requisitos

Para seguir, asegúrese de tener lo siguiente:

  • Un Rocky Linux/Centos 8 actualizado
  • Acceso root o Usuario con acceso sudo
  • Acceso a Internet

Tabla de contenido

  1. Asegurarse de que el servidor esté actualizado
  2. Instalando podman
  3. Ejemplos de línea de comando
  4. Ejecutar un contenedor persistente de postgres
  5. Administrar contenedores como servicios del sistema a través de systemd y Podman

1. Asegurarse de que el servidor esté actualizado

Use este comando para asegurarse de que nuestros paquetes de servidor estén actualizados

sudo dnf update -y

Asegurémonos de que los paquetes comunes estén instalados

sudo dnf install -y vim

2. Instalando Podman

Podman está disponible en el repositorio de AppStream predeterminado para CentOS 8 y Stream. Instálalo usando este comando:

sudo dnf install -y podman

Este comando instalará Podman y también sus dependencias: atomic-registriesrunCskopeo-containers y políticas de SELinux.

Eso es todo. Ahora ya podemos jugar con Podman.

3. Ejemplos de línea de comandos

Exploremos la ejecución de Rocky Linux Container usando podman.

En Docker, usaríamos este comando para ejecutar un contenedor Rocky Linux:

docker run -it rockylinux/rockylinux:8.4 sh

Esto fallará ya que no hay docker comando en mi servidor Rocky Linux. Podemos reemplazar docker con podman:

podman run -it rockylinux/rockylinux:8.4 sh

Ejecutemos algunos comandos para confirmar que funciona como se esperaba:

$ podman run -it rockylinux/rockylinux:8.4 sh
✔ docker.io/rockylinux/rockylinux:8.4
Trying to pull docker.io/rockylinux/rockylinux:8.4...
Getting image source signatures
Copying blob 1b474f8e669e done
Copying config 333da17614 done
Writing manifest to image destination
Storing signatures
sh-4.4# ps ax
    PID TTY      STAT   TIME COMMAND
      1 pts/0    Ss     0:00 sh
      6 pts/0    R+     0:00 ps ax
sh-4.4# exit
exit

Para verificar el estado del contenedor, use podman ps comando

$ podman ps -a
CONTAINER ID  IMAGE                                COMMAND     CREATED        STATUS                    PORTS       NAMES
5f81814c698e  docker.io/rockylinux/rockylinux:8.4  sh          3 minutes ago  Exited (0) 3 minutes ago              competent_pasteur

Para eliminar el contenedor, use podman rm :

$ podman rm 5f81814c698e
5f81814c698ef09484c66d4427fda5de21c4dca1766a67ee108d256117460d71
$ podman images
REPOSITORY                       TAG         IMAGE ID      CREATED       SIZE
docker.io/rockylinux/rockylinux  8.4         333da17614b6  4 months ago  234 MB
[[email protected] ~]$ podman image rm rockylinux/rockylinux
Untagged: docker.io/rockylinux/rockylinux:8.4
Deleted: 333da17614b642a228c30edcb2bddfdf17b2d713ae71b7930c44b714ff8b92e7

Para enumerar las imágenes:

$ podman images
REPOSITORY                       TAG         IMAGE ID      CREATED       SIZE
docker.io/rockylinux/rockylinux  8.4         333da17614b6  4 months ago  234 MB

Podemos borrar la imagen usando la imagen podman image rm comando:

$ podman image rm rockylinux/rockylinux
Untagged: docker.io/rockylinux/rockylinux:8.4
Deleted: 333da17614b642a228c30edcb2bddfdf17b2d713ae71b7930c44b714ff8b92e7

De lo anterior, podemos confirmar que el comando podman usa la misma sintaxis que docker

Ejecutar un contenedor persistente de Postgres

A continuación, exploremos cómo podemos ejecutar un contenedor persistente. En este ejemplo, ejecutaremos un contenedor de Postgres 14 y montaremos los datos de Postgres en un volumen local para que pueda persistir en los reinicios. Dado que los contenedores son efímeros, los datos se perderán si no los guardamos en un volumen local.

Extraiga docker.io/library/postgres:14.0-alpine imagen

$ podman pull docker.io/library/postgres:14.0-alpine
✔ docker.io/library/postgres:14.0-alpine
Trying to pull docker.io/library/postgres:14.0-alpine...
Getting image source signatures
Copying blob 82e9eb77798b done
Copying blob c6b2245b2f36 done
Copying blob a0d0a0d46f8b done
Copying blob 3da258773353 done
Copying blob ccd761727716 done
Copying blob 5034a66b99e6 done
Copying blob 2c7ee7bc69e8 done
Copying blob 028554d3b6cc done
Copying config 87440f4e7f done
Writing manifest to image destination
Storing signatures
87440f4e7f9e60607dc11a4f0590a1c69b3a1c075211df478e22b0c27fb263e6

Confirmar imágenes

$ podman images
REPOSITORY                  TAG          IMAGE ID      CREATED      SIZE
docker.io/library/postgres  14.0-alpine  87440f4e7f9e  2 weeks ago  198 MB

Inspeccione la imagen con

$ podman inspect 87440f4e7f9e

Configuremos una carpeta que manejará los datos de Postgres una vez que iniciemos nuestro contenedor:

$ mkdir -p ~/apps/postgres/data

Ejecutarlo

podman run -d \
    -p 5432:5432 \
    -v ~/apps/postgres/data:/var/lib/postgresql/data:Z \
    -e POSTGRES_PASSWORD=Sup3rSecre7 \
    -e POSTGRES_USER=citizix_user \
    -e POSTGRES_DB=citizix_db \
    docker.io/library/postgres:14.0-alpine

Esta es mi salida

$ podman run -d \
>     -p 5432:5432 \
>     -v ~/apps/postgres/data:/var/lib/postgresql/data:Z \
>     -e POSTGRES_PASSWORD=Sup3rSecre7 \
>     -e POSTGRES_USER=citizix_user \
>     -e POSTGRES_DB=citizix_db \
>     docker.io/library/postgres:14.0-alpine
9aa1fb68beeeb7c68a9ea5afb4ca91bf07acf3fef92bf21249a6d8a4e43f5dbd

Comprobar procesos:

$ podman ps
CONTAINER ID  IMAGE                                   COMMAND     CREATED         STATUS             PORTS                   NAMES
9aa1fb68beee  docker.io/library/postgres:14.0-alpine  postgres    46 seconds ago  Up 47 seconds ago  0.0.0.0:5432->5432/tcp  gracious_jemison

Confirme los registros del contenedor con esto. Puedes ver que está inicializando la base de datos

$ podman logs 9aa1fb68beee | head
performing post-bootstrap initialization ... sh: locale: not found
2021-11-11 09:05:00.481 UTC [30] WARNING:  no usable system locales were found
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data ... ok

Conectémonos a la base de datos y hagamos algunas operaciones

$ podman exec -it 9aa1fb68beee /bin/bash
bash-5.1# psql -U citizix_user -d citizix_db;
psql (14.0)
Type "help" for help.

citizix_db=# select version();
                                                   version
--------------------------------------------------------------------------------------------------------------
 PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
(1 row)

citizix_db=#

A continuación, exploremos matar y eliminar el contenedor. Podemos usar podman kill para detener el contenedor. Esto detendrá el contenedor, pero aún estará allí. Usa podman ps -a Listar. Para eliminarlo completamente, entonces podman rm -f .

$ podman kill 9aa1fb68beee
9aa1fb68beee
$ podman ps -a
CONTAINER ID  IMAGE                                   COMMAND     CREATED         STATUS                       PORTS                   NAMES
9aa1fb68beee  docker.io/library/postgres:14.0-alpine  postgres    14 minutes ago  Exited (137) 20 seconds ago  0.0.0.0:5432->5432/tcp  gracious_jemison
$ podman rm -f 9aa1fb68beee
9aa1fb68beeeb7c68a9ea5afb4ca91bf07acf3fef92bf21249a6d8a4e43f5dbd

Administrar contenedores como servicios del sistema a través de systemd y Podman

Podemos administrar contenedores podman a través de systemd. Vamos a crear un systemd archivo de recursos para manejar el contenedor de postgres que acabamos de crear arriba.

Cree un archivo podman de postgres:

sudo vim /etc/systemd/system/postgres-podman.service

Añadir este contenido

[Unit]
Description=Custom Postgres Podman Container
After=network.target

[Service]
Type=simple
TimeoutStartSec=5m
ExecStartPre=-/usr/bin/podman rm -f postgrespodman

ExecStart=/usr/bin/podman run \
    -p 5432:5432 \
    -v /home/rocky/apps/postgres/data:/var/lib/postgresql/data:Z \
    -e POSTGRES_PASSWORD=Sup3rSecre7 \
    -e POSTGRES_USER=citizix_user \
    -e POSTGRES_DB=citizix_db \
    docker.io/library/postgres:14.0-alpine

ExecReload=-/usr/bin/podman stop postgrespodman
ExecReload=-/usr/bin/podman rm postgrespodman
ExecStop=-/usr/bin/podman stop postgrespodman
Restart=always
RestartSec=30

[Install]

Entonces podemos recargar el systemd catalogar e iniciar el servicio:

sudo systemctl daemon-reload
sudo systemctl start postgres-podman

Confirmar el estado del servicio

$ sudo systemctl status postgres-podman
● postgres-podman.service - Custom Postgres Podman Container
   Loaded: loaded (/etc/systemd/system/postgres-podman.service; static; vendor preset: disabled)
   Active: active (running) since Thu 2021-11-11 10:07:09 UTC; 21s ago
  Process: 71868 ExecStop=/usr/bin/podman stop postgrespodman (code=exited, status=125)
  Process: 71943 ExecStartPre=/usr/bin/podman rm -f postgrespodman (code=exited, status=1/FAILURE)
 Main PID: 71973 (podman)
    Tasks: 11 (limit: 23167)
   Memory: 27.8M
   CGroup: /system.slice/postgres-podman.service
           ├─71973 /usr/bin/podman run -p 5432:5432 -v /home/rocky/apps/postgres/data:/var/lib/postgresql/data:Z -e POSTGRES_PASSWORD=Sup3rSecre7 -e POSTGRES_USER=citizix_user -e POSTGRE>
           └─72073 /usr/bin/conmon --api-version 1 -c 03e82c0f88fe4d69630b308f59f2e62bb23b19021a0de5ab0b267950c9367103 -u 03e82c0f88fe4d69630b308f59f2e62bb23b19021a0de5ab0b267950c9367103>

Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal systemd[1]: Starting Custom Postgres Podman Container...
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal podman[71943]: Error: no container with name or ID "postgrespodman" found: no such container
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal systemd[1]: Started Custom Postgres Podman Container.
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: PostgreSQL Database directory appears to contain a database; Skipping initialization
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.428 UTC [1] LOG:  starting PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10>
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.429 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.429 UTC [1] LOG:  listening on IPv6 address "::", port 5432
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.432 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.437 UTC [20] LOG:  database system was shut down at 2021-11-11 10:07:09 UTC
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.440 UTC [1] LOG:  database system is ready to accept connections

¡Acabamos de configurar un servicio de sistema personalizado basado en un contenedor administrado a través de Podman!

Conclusión

Logramos explorar cómo instalar Podman en nuestro servidor Rocky Linux/Centos 8 en esta guía.


Cent OS
  1. Cómo instalar y usar php Composer en Rocky Linux/Centos 8

  2. Cómo instalar y configurar docker en Rocky Linux/Centos 8

  3. Cómo instalar y configurar Ansible en Rocky Linux/CentOS 8

  4. Cómo instalar Erlang en Rocky Linux/Alma Linux/CentOS 8

  5. Cómo instalar el cliente FreeIPA en Rocky Linux/Alma Linux/CentOS 8

Cómo instalar Rabbitmq en Rocky Linux/Alma Linux/Centos 8

Cómo configurar la replicación FreeIPA en Rocky Linux/Alma Linux/Centos 8

Cómo instalar y usar Firewalld en Rocky Linux 8

Cómo instalar y usar el contenedor Rocky Linux Docker

Cómo instalar y configurar Ansible AWX en Rocky Linux 8.3 y CentOS 8

Cómo instalar Docker en Rocky Linux y AlmaLinux