Observação:

Execute Contêineres Podman em Systemd com Quadlet

Introdução

O Quadlet fornece uma maneira de executar contêineres no systemd dentro do Oracle Linux. Você define o contêiner a ser executado em uma seção [Container] em um formato familiar para a sintaxe de linha de comando Podman padrão e aproveita todos os benefícios das opções [Unit] e [Service] do systemd. A vantagem de usar systemd para executar seus contêineres é que systemd está integrado ao sistema operacional, para que você possa ter contêineres que iniciam quando o sistema inicia ou define a ordem e a dependência entre uma configuração de vários contêineres.

Quadlet substitui um método mais antigo Podman usado para integração com systemd. Esse método consiste em criar um contêiner, gerar um arquivo de serviço, mover o arquivo de serviço e ativar o serviço. Em muitos casos, os usuários gastariam tempo escrevendo essas etapas em scripts Bash e, em seguida, teriam que manter esses scripts e os arquivos gerados. Dependendo da perspectiva de um usuário, o Quadlet simplifica essa tarefa.

Objetivos

Neste tutorial, você aprenderá a:

Pré-requisitos

Implante o Oracle Linux

Observação: Se estiver em execução em sua própria tenancy, leia o projeto linux-virt-labs GitHub README.md e conclua os pré-requisitos antes de implantar o ambiente de laboratório.

  1. Abra um terminal no Luna Desktop.

  2. Clone o projeto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Altere para o diretório de trabalho.

    cd linux-virt-labs/ol
    
  4. Instale as coleções necessárias.

    ansible-galaxy collection install -r requirements.yml
    
  5. Implante o ambiente de laboratório.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e use_podman=true -e update_all=true -e os_version="9"
    

    O ambiente de laboratório gratuito requer a variável extra local_python_interpreter, que define ansible_python_interpreter para execuções em execução no localhost. Essa variável é necessária porque o ambiente instala o pacote RPM do SDK para Python do Oracle Cloud Infrastructure, localizado nos módulos python3.6.

    A forma de implantação padrão usa a CPU AMD e o Oracle Linux 8. Para usar uma CPU Intel ou Oracle Linux 9, adicione -e instance_shape="VM.Standard3.Flex" ou -e os_version="9" ao comando de implantação.

    Importante: Aguarde a execução bem-sucedida do playbook e atinja a tarefa de pausa. Nesta fase do manual, a instalação do Oracle Linux está concluída e as instâncias estão prontas. Tome nota da reprodução anterior, que imprime os endereços IP públicos e privados dos nós que ele implanta e qualquer outra informação de implantação necessária durante a execução do laboratório.

Confirmar Trabalhos do Podman

O pacote de ferramentas de contêiner no Oracle Linux fornece as versões mais recentes de Podman, Buildah, Skopeo e dependências associadas.

  1. Abra um terminal e conecte-se via SSH à instância ol-node-01.

    ssh oracle@<ip_address_of_instance>
    
  2. Veja a versão do Podman.

    podman -v
    
  3. Confirme se a CLI do Podman está funcionando.

    podman run quay.io/podman/hello
    

    Exemplo de Saída:

    [oracle@ol-server ~]$ podman run quay.io/podman/hello
    Trying to pull quay.io/podman/hello:latest...
    Getting image source signatures
    Copying blob f82b04e85914 done
    Copying config dbd85e09a1 done
    Writing manifest to image destination
    Storing signatures
    !... Hello Podman World ...!
    
             .--"--.
           / -     - \
          / (O)   (O) \
       ~~~| -=(,Y,)=- |
        .---. /`  \   |~~
     ~/  o  o \~~~~.----. ~~
      | =(X)= |~  / (O (O) \
       ~~~~~~~  ~| =(Y_)=-  |
      ~~~~    ~~~|   U      |~~
    
    Project:   https://github.com/containers/podman
    Website:   https://podman.io
    Documents: https://docs.podman.io
    Twitter:   @Podman_io
    

Criar um Quadlet

Um Quadlet é apenas a criação de um arquivo .container em um diretório específico que contém uma seção [Container] descrevendo as opções de inicialização do contêiner.

  1. Crie o diretório systemd do contêiner dos usuários.

    mkdir -p ~/.config/containers/systemd
    
  2. Crie um arquivo .container.

    cat << EOF | tee ~/.config/containers/systemd/test-ol.container > /dev/null
    [Unit]
    Description=My First Quadlet
    
    [Container]
    Image=ghcr.io/oracle/oraclelinux:9
    AutoUpdate=registry
    Exec=sleep 60
    
    [Service]
    Restart=always
    TimeoutStartSec=900
    
    [Install]
    WantedBy=multi-user.target default.target
    EOF
    

    Este Quadlet executa o contêiner do Oracle Linux e executa um sleep 60 no contêiner. Quando o sleep 60 for concluído, o contêiner será encerrado e, em seguida, o systemd o reiniciará. Existem outras opções para a seção [Container], e uma lista está disponível na documentação upstream.

    Consulte a página man systemd.unit(5) para obter mais informações sobre as opções [Service], [Unit] e [Install].

  3. Ative a duração para o usuário.

    sudo loginctl enable-linger oracle
    
  4. Informe systemd do novo arquivo de unidade.

    systemctl --user daemon-reload
    

    Esta etapa cria o test-ol.service com base no arquivo test-ol.container.

  5. Inicie o serviço.

    systemctl --user start test-ol.service
    

    O serviço executa podman para fazer download da imagem do Oracle Linux e, em seguida, emite o sleep 60 dentro da imagem do contêiner.

  6. Verifique o status do serviço.

    systemctl --user status test-ol.service
    

    Repita esse comando para ver a interrupção e a reinicialização do contêiner após a execução de sleep 60. Você também pode verificar os logs executando sudo journalctl _SYSTEMD_USER_UNIT=test-ol.service.

  7. Atualize o contêiner.

    Com a entrada AutoUpdate=registry na seção [Container], ative o recurso podman auto-update para atualizar as imagens do contêiner. No entanto, se quiser que isso aconteça automaticamente, em vez de manualmente, você também deve ativar o serviço necessário.

    systemctl --user enable podman-auto-update
    

    Manualmente, você pode executar podman auto-update --dry-run para ver se uma atualização está disponível. Como acabamos de baixar a imagem mais recente há alguns minutos, não há atualizações e, portanto, não há nada a fazer. No entanto, se houver uma atualização, você poderá remover a opção --dry-run e podman extrairá a imagem mais recente e reiniciará o contêiner.

Próximas Etapas

Este tutorial mostra como aproveitar o Quadlet para gerenciar um contêiner mínimo usando systemd. Saiba mais lendo a documentação e criando contêineres adicionais que aproveitam o armazenamento e têm dependências de vários contêineres.

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.