Найти тему
ИТ разнообразно

Настройка контейнера для автоматического запуска в качестве службы systemd. Часть 3.

Настройка контейнеров с помощью systemd. Начинаем.

Во-первых, снова запустите свой контейнер с помощью Podman:

$ podman run --name=httpd --hostname=httpd -p 8081:80 -v /var/local/httpd:/usr/local/apache2/htdocs:Z -d docker.io/library/httpd16df315d3b23f41a70d1d3ffc11315c967cd213a107961df970327e85e62286f
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16df315d3b23 docker.io/library/httpd:latest httpd-foreground 4 seconds ago Up 4 seconds ago 0.0.0.0:8081->80/tcp httpd

Если вы знакомы с созданием сервисных единиц systemd, вы можете сделать это "вручную". Но зачем себя утруждать? Используйте силу Podman, чтобы сделать это за вас. Это выглядит так:

$ podman generate systemd --new --files --name httpd/home/webuser/container-httpd.service
$ ls
container-httpd.service
$ cat container-httpd.service
# container-httpd.service
# autogenerated by Podman 4.3.1
# Wed Feb 1 16:06:04 -03 2023
[Unit]
Description=Podman container-httpd.service
Documentation=man:podman-generate-systemd(1)
Wants=network-online.target
After=network-online.target
RequiresMountsFor=%t/containers
[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
TimeoutStopSec=70
ExecStartPre=/bin/rm \
-f %t/%n.ctr-id
ExecStart=/usr/bin/podman run \
--cidfile=%t/%n.ctr-id \
--cgroups=no-conmon \
--rm \
--sdnotify=conmon \
--replace \
--name=httpd \
--hostname=httpd \
-p 8081:80 \
-v /var/local/httpd:/usr/local/apache2/htdocs:Z \
-d docker.io/library/httpd
ExecStop=/usr/bin/podman stop \
--ignore -t 10 \
--cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm \
-f \
--ignore -t 10 \
--cidfile=%t/%n.ctr-id
Type=notify
NotifyAccess=all
[Install]
WantedBy=default.target

Круто, не так ли? Вы можете увидеть все параметры, доступные с помощью команды, запустив podman generate systemd --help.

Теперь, когда вы сгенерировали файл службы systemd с помощью Podman, вам больше не нужно запускать его вручную. Остановите это так:

$ podman stop httpd && podman rm -a && podman volume prune
httpd 16df315d3b23f41a70d1d3ffc11315c967cd213a107961df970327e85e62286f WARNING! This will remove all volumes not used by at least one container. The following volumes will be removed: No dangling volumes found

Продолжение следует...

Перевод с некоторыми авторскими заголовками. Автор оригинала: Alexon Oliveira.