Observação:

Configurar Contêineres Podman com o Oracle Linux Automation Engine

Introdução

O Oracle Linux Automation Engine permite que os usuários criem um playbook para instalar o Podman e, em seguida, executar e gerenciar contêineres usando a coleção containers.podman.

Ao executar playbooks, o Oracle Linux Automation Engine executa as tarefas em máquinas que correspondem à diretiva hosts: no playbook. Esses hosts são geralmente definidos em um arquivo de inventário e podem ser remotos ou locais. Neste tutorial, vamos demonstrar como executar um playbook localmente.

Objetivos

Neste tutorial, você aprenderá a:

Pré-requisitos

Implantar o Oracle Linux Automation Engine

Observação: Se estiver em execução na 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/olam
    
  4. Instale as coleções necessárias.

    ansible-galaxy collection install -r requirements.yml
    
  5. Atualize a configuração da instância do Oracle Linux.

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "ol-control-node"
        type: "control"
    olam_type: olae
    EOF
    
  6. Crie um arquivo de inventário.

    cat << EOF | tee hosts > /dev/null
    localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6
    EOF
    
  7. Implante o ambiente de laboratório.

    ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
    

    O ambiente de laboratório gratuito requer a variável extra ansible_python_interpreter para localhost porque instala o pacote RPM para o Oracle Cloud Infrastructure SDK para Python. O local para instalar este pacote está nos módulos Python padrão do sistema com base na sua versão do Oracle Linux. Usar uma variável de inventário evita impactar as reproduções em execução em hosts diferentes de localhost.

    A forma de implantação padrão usa a CPU AMD. Você pode alterar a forma das instâncias especificando uma nova definição de variável de forma na linha de comando.

    Por exemplo: -e instance_shape="VM.Standard3.Flex"

    Da mesma forma, a versão padrão da imagem do Oracle Linux usa a variável os_version definida no arquivo `default_vars.yml. Você pode modificar esse valor especificando a versão principal do Oracle Linux na linha de comando.

    Por exemplo: -e os_version="9"

    Importante: Aguarde a execução bem-sucedida do playbook e atinja a tarefa de pausa. Neste estágio do playbook, a instalação do Oracle Linux está concluída e as instâncias estão prontas. Observe o jogo anterior, que imprime os endereços IP públicos e privados dos nós que ele implanta.

Coleções

As coleções são um formato de distribuição para o conteúdo do Oracle Linux Automation Engine que pode incluir playbooks, atribuições, módulos e plug-ins. Este tutorial instalará a coleção containers.podman usando um arquivo requirements.yml. Um arquivo requirements.yml permite a instalação de coleções, funções ou ambas com base nas chaves definidas no arquivo.

Criar um Arquivo de Requisitos

  1. Abra um novo terminal e conecte-se ao sistema ol-control-node via SSH.

    ssh oracle@<ip_address_of_instance>
    
  2. Crie um diretório de trabalho.

    mkdir -p ~/podman-project
    
  3. Crie um arquivo de requisitos.

    cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null
    ---
    collections:
      - name: containers.podman
    EOF
    
  4. Instale a coleção.

    ansible-galaxy collection install -r ~/podman-project/requirements.yml
    

    A saída mostra o processo de recuperação do arquivo compactado do site Galaxy e, em seguida, instalá-lo em seu diretório principal em .ansible/collections.

    Observação: se a saída mostrar ERROR: Ansible requires the locale encoding to be UTF-8; Detected None., isso indicará uma definição de configuração regional incorreta para ansible. Corrija o problema definindo estas duas variáveis de ambiente:

    export LC_ALL="en_US.UTF-8"
    export LC_CTYPE="en_US.UTF-8"
    

Instalar Podman

Os playbooks do Oracle Linux Automation Engine consistem em reproduções, que são compostas de tarefas mapeadas para hosts específicos. Essas tarefas executam principalmente módulos idempotentes. A idempotência garante que você obtenha o mesmo resultado se o playbook for executado uma ou várias vezes. Este tutorial demonstrará idempotência construindo o playbook em etapas e executando-o entre cada alteração.

Antes de executar um contêiner do Podman, precisamos instalar os pacotes do Podman no repositório AppStream do Oracle Linux.

  1. Criar o arquivo de playbook.

    cat << 'EOF' | tee ~/podman-project/podman-playbook.yml > /dev/null
    ---
    - hosts: localhost
      connection: local
    
      tasks:
    
      - name: Install podman
        ansible.builtin.dnf:
          name: '@container-tools:ol8'
          state: present
        become: yes
        when:
          - ansible_distribution == 'OracleLinux'
          - ansible_facts['distribution_major_version'] == '8'
    
      - name: Install podman
        ansible.builtin.dnf:
          name: 'container-tools'
          state: present
        become: yes
        when:
          - ansible_distribution == 'OracleLinux'
          - ansible_facts['distribution_major_version'] == '9'
    EOF
    

    Um playbook e os nomes das tarefas visam tornar o playbook autodocumentado. As informações abaixo fornecem uma explicação mais detalhada de alguns itens-chave.

    • hosts: localhost: Instrui as tarefas a serem executadas no localhost.
    • connection: local: Garante que o link permaneça local e não seja executado por SSH.
    • become: yes: Eleva a tarefa dentro desta seção de playbook a ser executada com o privilégio sudo por padrão.
  2. Execute o playbook.

    Como executamos esse playbook no host local, não há motivo para criar ou fazer referência a um arquivo de inventário explicitamente. No entanto, se quisermos executar isso em um host remoto, precisaremos atualizar a entrada hosts:, remover a linha connection: no playbook e, em seguida, criar e fazer referência a um arquivo de inventário. Se você não estiver familiarizado com esse processo, poderá consultar alguns de nossos outros tutoriais, vinculados na Estação de Treinamento do Oracle Linux no final deste tutorial.

    ansible-playbook ~/podman-project/podman-playbook.yml
    

    A saída do comando deve mostrar que ele é executado com sucesso em localhost, reportando uma alteração na tarefa Install podman. Este status indica que concluímos adequadamente a instalação do módulo container-tools.

  3. Verifique o pacote Podman instalado exibindo sua versão.

    podman --version
    

Extrair uma Imagem

Depois de instalar o Podman, podemos extrair imagens do nosso registro de escolha e prepará-las localmente. Nesta etapa, extrairemos a imagem do Oracle Linux do GitHub Container Registry.

Informações adicionais sobre imagens do Oracle Linux Developer estão disponíveis aqui.

  1. Adicione a tarefa para extrair uma imagem de contêiner para o playbook.

    cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null
    
      - name: Pull oraclelinux:9 from GitHub
        containers.podman.podman_image:
          name: ghcr.io/oracle/oraclelinux:9
    EOF
    
  2. Execute o playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  3. Verifique se Podman extraiu a imagem.

    podman images
    

    Exemplo de saída:

    REPOSITORY                  TAG         IMAGE ID      CREATED       SIZE
    ghcr.io/oracle/oraclelinux  9           97e22ab49eea  20 hours ago  254 MB
    

Executar uma Imagem de Contêiner

Em vez de apenas extrair uma imagem, também podemos extrair e executar um contêiner com base em uma imagem em uma única etapa. Vamos extrair e executar a imagem do desenvolvedor do Oracle Linux NGINX.

  1. Atualize o arquivo do playbook.

    cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null
    
      - name: Run image
        containers.podman.podman_container:
          name: nginx
          image: ghcr.io/oracle/oraclelinux9-nginx:1.20
          state: started
          detach: yes
          expose:
            - '80'
            - '443'
          publish:
            - '8080:80'
    EOF
    

    Onde:

    • name: Nome do contêiner.
    • image: Caminho do repositório (ou nome da imagem) e tag usados para criar o contêiner.
    • state: Verifica se há um contêiner em execução correspondente ao nome e à configuração. O Podman cria e inicia um novo contêiner quando não consegue encontrar uma correspondência.
    • detach: Executa o contêiner no modo desanexado.
    • expose: Exponha uma porta ou uma faixa de portas.
    • publish: Publique a porta de um contêiner ou uma faixa de portas no host.
  2. Execute o playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  3. Verifique se o contêiner está em execução.

    podman ps
    

    Exemplo de saída:

    [oracle@ol-server podman-project]$ podman ps
    CONTAINER ID  IMAGE                                   COMMAND               CREATED         STATUS             PORTS                 NAMES
    5f7a28cc4c6b  ghcr.io/oracle/oraclelinux9-nginx:1.20  nginx -g daemon o...  2 minutes ago   Up 2 minutes ago   0.0.0.0:8080->80/tcp  nginx
    

    A saída mostra que o contêiner está ativo e em execução há 2 minutos.

  4. Pare o recipiente.

    Usando o ID DO CONTÊINER da saída acima, execute:

    podman stop $(podman ps -q -f name=nginx)
    

    Este comando usa o ID DO CONTÊINER como referência para interromper o contêiner nginx.

Executar uma Imagem de Contêiner com um Volume

O Podman cria volumes adicionando uma montagem de bind, que mapeia um diretório local para um diretório dentro do contêiner. Demonstraremos esse recurso executando o mesmo contêiner NGINX e substituindo a página index.html padrão por uma personalizada.

  1. Atualize o arquivo do playbook.

    Crie o diretório local. Embora possamos executar essa etapa de forma eficiente e manual uma vez na linha de comando, vamos automatizá-la. Automatizar esta etapa garante que o diretório exista sempre que o playbook for executado. Antes de executar a imagem, adicione essas tarefas, que criam um diretório e o arquivo index.html.

    Certifique-se de deixar uma linha em branco entre as tarefas para facilitar a leitura e seguir as regras de sintaxe YAML e as diretrizes de alinhamento. Usaremos o sed para concluir essa tarefa, pois ele permite a fácil inserção de blocos de texto em um arquivo em uma linha específica.

    sed -i -e '24 r '<(cat -<< EOF
      - name: Ensure the destination directory exists
        ansible.builtin.file:
          path: "/home/oracle/nginx/"
          state: directory
    
      - name: Create an empty file
        ansible.builtin.file:
          path: "/home/oracle/nginx/index.html"
          state: touch
          mode: '0755'
    
      - name: Create index.html
        ansible.builtin.copy:
          dest: "/home/oracle/nginx/index.html"
          content: |
            Hello! Welcome to Oracle Linux Containers.
    
    EOF
    ) ~/podman-project/podman-playbook.yml
    
  2. Em seguida, adicione a opção a seguir no final da tarefa Run image.

    cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null
          volume: "/home/oracle/nginx:/usr/share/nginx/html:Z"
    EOF
    

    A opção volume cria uma montagem de bind entre o diretório source:destination. A opção :Z trata de quaisquer problemas de permissões SELinux relacionados à montagem de bind. O Podman faz isso rotulando novamente o conteúdo do volume para corresponder ao rótulo dentro do contêiner.

    Aqui está uma versão completa do playbook para referência.

  3. Execute o playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  4. Verifique se o contêiner está em execução.

    podman ps
    

    Exemplo de saída:

    CONTAINER ID  IMAGE                                   COMMAND               CREATED         STATUS             PORTS                 NAMES
    f74aa726d470  ghcr.io/oracle/oraclelinux9-nginx:1.20  nginx -g daemon o...  10 minutes ago  Up 10 minutes ago  0.0.0.0:8080->80/tcp  nginx
    
  5. Verifique se o arquivo index.html existe.

    ls -l /home/oracle/nginx
    

    Exemplo de saída:

    [oracle@ol-server podman-project]$ ls -l /home/oracle/nginx/
    total 4
    -rwxr-xr-x. 1 oracle oracle 41 Nov  5 16:46 index.html
    
  6. Verifique a montagem de bind.

    Use o cURL para exibir a página index.html do contêiner e a mensagem de Bem-vindo.

    curl localhost:8080
    

    Onde 8080 é o mapeamento de porta local para a porta 80 no contêiner.

Próximas Etapas

Ao concluir este tutorial, você deverá entender como automatizar seu trabalho com Podman e contêineres usando o Oracle Linux Automation Engine. Explore os outros módulos da coleção containers.podman para criar playbooks adicionais que automatizam sua infraestrutura.

Mais Recursos de Aprendizagem

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

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