Red Hat Training

A Red Hat training course is available for RHEL 8

8.3. Auto-geração de um arquivo de unidade do sistema usando Podman

Por padrão, Podman gera um arquivo de unidade para containers ou cápsulas existentes. Você pode gerar mais arquivos de unidade portáteis do sistema usando o podman generate systemd --new. A bandeira --new instrui Podman a gerar arquivos unitários que criam, iniciam e removem containers.

Procedimento

  1. Puxe a imagem que você deseja usar em seu sistema. Por exemplo, para puxar a imagem busybox:

    # podman pull busybox:latest
  2. Liste todas as imagens disponíveis em seu sistema:

    # podman images
    REPOSITORY                 TAG     IMAGE ID      CREATED      SIZE
    docker.io/library/busybox  latest  c7c37e472d31  3 weeks ago  1.45 MB
  3. Crie o recipiente busybox:

    # podman create --name busybox busybox:latest
    1e12cf95e305435c0001fa7d4a14cf1d52f737c1118328937028c0bd2fdec5ca
  4. Para verificar se o container foi criado, liste todos os containers:

    # podman ps -a
    CONTAINER ID  IMAGE                             COMMAND  CREATED        STATUS   PORTS   NAMES
    1e12cf95e305  docker.io/library/busybox:latest  sh       7 seconds ago  Created          busybox
  5. Gerar um arquivo de unidade do sistema para o contêiner busybox:

    # podman generate systemd --new --files --name busybox
    /root/container-busybox.service
  6. Exibir o conteúdo do arquivo da unidade gerada container-busybox.service systemd:

    # 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

    Observe que os arquivos de unidade gerados usando a opção --new não esperam que os recipientes e as cápsulas existam. Portanto, eles executam o comando podman run ao iniciar o serviço (veja a linha ExecStart ) em vez do comando podman start. Por exemplo, veja a seção 7.2. Gerando um arquivo de unidade systemd usando Podman.

    • O comando podman run usa as seguintes opções de linha de comando:

      • A opção --conmon-pidfile aponta para um caminho para armazenar a identificação do processo para o processo conmon em execução no host. O processo conmon termina com o mesmo status de saída do contêiner, o que permite que o sistema informe o status correto do serviço e reinicie o contêiner, se necessário.
      • A opção --cidfile aponta para o caminho que armazena a identificação do contêiner.
      • O %t é o caminho para a raiz do diretório de tempo de execução, por exemplo /run/user/$UserID.
      • O %n é o nome completo do serviço.
  7. Copie os arquivos da unidade para /usr/lib/systemd/system para instalá-los como usuário 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 adicionais