8.3. Generación automática de un archivo de unidad systemd usando Podman
Por defecto, Podman genera un archivo de unidad para los contenedores o pods existentes. Puede generar archivos de unidad systemd más portables utilizando la opción podman generate systemd --new
. La bandera --new
indica a Podman que genere archivos de unidad que creen, inicien y eliminen contenedores.
Procedimiento
Extraiga la imagen que desea utilizar en su sistema. Por ejemplo, para extraer la imagen
busybox
:# podman pull busybox:latest
Enumera todas las imágenes disponibles en tu sistema:
# podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/busybox latest c7c37e472d31 3 weeks ago 1.45 MB
Cree el contenedor
busybox
:# podman create --name busybox busybox:latest 1e12cf95e305435c0001fa7d4a14cf1d52f737c1118328937028c0bd2fdec5ca
Para verificar que el contenedor ha sido creado, liste todos los contenedores:
# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e12cf95e305 docker.io/library/busybox:latest sh 7 seconds ago Created busybox
Generar un archivo de unidad systemd para el contenedor
busybox
:# podman generate systemd --new --files --name busybox /root/container-busybox.service
Muestra el contenido del archivo de la unidad systemd generado en
container-busybox.service
:# vim container-busybox.services # container-busybox.service # autogenerated by Podman 2.0.0-rc7 # Mon Jul 27 11:06:32 CEST 2020 [Unit] Description=Podman container-busybox.service Documentation=man:podman-generate-systemd(1) Wants=network.target After=network-online.target [Service] Environment=PODMAN_SYSTEMD_UNIT=%n Restart=on-failure ExecStartPre=/usr/bin/rm -f %t/container-busybox.pid %t/container-busybox.ctr-id ExecStart=/usr/bin/podman run --conmon-pidfile %t/container-busybox.pid --cidfile %t/container-busybox.ctr-id --cgroups=no-conmon -d --replace --name busybox busybox:latest ExecStop=/usr/bin/podman stop --ignore --cidfile %t/container-busybox.ctr-id -t 10 ExecStopPost=/usr/bin/podman rm --ignore -f --cidfile %t/container-busybox.ctr-id PIDFile=%t/container-busybox.pid KillMode=none Type=forking [Install] WantedBy=multi-user.target default.target
Tenga en cuenta que los archivos de unidad generados con la opción
--new
no esperan que existan contenedores y pods. Por lo tanto, ejecutan el comandopodman run
al iniciar el servicio (ver la líneaExecStart
) en lugar del comandopodman start
. Por ejemplo, vea la Sección 7.2. Generación de un archivo de unidad systemd usando Podman.El comando
podman run
utiliza las siguientes opciones de línea de comandos:-
La opción
--conmon-pidfile
apunta a una ruta para almacenar el ID del procesoconmon
que se ejecuta en el host. El procesoconmon
termina con el mismo estado de salida que el contenedor, lo que permite a systemd informar del estado correcto del servicio y reiniciar el contenedor si es necesario. -
La opción
--cidfile
apunta a la ruta que almacena el ID del contenedor. -
El
%t
es la ruta de acceso a la raíz del directorio en tiempo de ejecución, por ejemplo/run/user/$UserID
. -
El
%n
es el nombre completo del servicio.
-
La opción
Copie los archivos de la unidad en
/usr/lib/systemd/system
para instalarlos como usuario root:# cp -Z container-busybox.service /usr/lib/systemd/system Created symlink /etc/systemd/system/multi-user.target.wants/container-busybox.service /usr/lib/systemd/system/container-busybox.service. Created symlink /etc/systemd/system/default.target.wants/container-busybox.service
/usr/lib/systemd/system/container-busybox.service.
Recursos adicionales
- Integración mejorada de Systemd con Podman 2. 0 artículo de Valentin Rothberg y Dan Walsh.
- Para obtener más información sobre la configuración de los servicios con systemd, consulte el capítulo de la guía Configuración de los ajustes básicos del sistema llamado Gestión de los servicios con systemd.