Observação:

Usar Compor Arquivos com o Podman no Oracle Linux

Introdução

Podman e Docker Compose são ferramentas de linha de comando que usam um arquivo YAML especialmente formatado como entrada para montar e, em seguida, executar contêineres únicos ou múltiplos como aplicativos. Essas ferramentas permitem que os desenvolvedores desenvolvam, testem e, em seguida, forneçam a seus usuários um único arquivo YAML para seu aplicativo e usem apenas um comando para iniciá-lo e interrompê-lo de forma confiável. Essa portabilidade e confiabilidade tornaram o uso da especificação Compose extremamente popular entre usuários e desenvolvedores, e está se tornando cada vez mais um requisito.

Objetivos

Neste tutorial, você aprenderá a:

Pré-requisitos

Implantar o Oracle Linux

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/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 update_all=true
    

    O ambiente de laboratório gratuito requer a variável extra local_python_interpreter, que define ansible_python_interpreter para reproduções em execução no localhost. Essa variável é necessária porque o ambiente instala o pacote RPM do Oracle Cloud Infrastructure SDK para Python, 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 um 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. Neste estágio do playbook, a instalação do Oracle Linux está concluída e as instâncias estão prontas. Anote o jogo anterior, que imprime os endereços IP públicos e privados dos nós que ele implanta e quaisquer outras informações de implantação necessárias durante a execução do laboratório.

Configurar o Podman para Trabalhar com Compor Arquivos

O Podman introduziu o suporte para a funcionalidade Docker Compose no Podman v3.2.0, após a introdução do suporte limitado no Podman v3.0.0, introduzindo assim a capacidade de usar o Docker Compose no Podman. Mais recentemente, o Podman v4.1.0 estendeu o suporte à funcionalidade do Docker Compose para incluir o uso do Docker Compose v2.2 e versões mais recentes.

Instalar o Pacote do Podman Docker

Instale o pacote podman-docker, que permite ao Podman trabalhar nativamente com comandos do Docker.

sudo dnf install -y podman-docker

Instalar o Docker Compose

  1. Baixe e instale o Compose standalone.

    sudo curl -SL https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    

    Exemplo de Saída:

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    100 60.1M  100 60.1M    0     0   103M      0 --:--:-- --:--:-- --:--:--  378M
    
  2. Aplique permissões executáveis ao binário.

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. Confirmar Composição de trabalhos independentes.

    docker-compose version
    

    A saída retorna a versão atual do docker-compose.

    Observação: Instalar Composição de maneira independente conforme descrito aqui requer o uso de docker-compose up, por exemplo, em vez da sintaxe padrão docker-compose up usada ao executar o utilitário Docker.

Iniciar o Soquete Podman

O Podman e o Docker Compose exigem o início do soquete Podman, que permite que as chamadas do sistema de cada programa se comuniquem com o Podman por meio desse processo controlado por systemd.

  1. Configure o soquete do Podman.

    systemctl --user enable --now podman.socket
    systemctl --user status podman.socket
    

    A saída mostra o soquete systemd active (listening).

  2. Obtenha o local do soquete do Podman do usuário.

    podman info | grep -i remotesocket -A2
    
  3. Verifique se o soquete funciona usando cURL.

    curl -w "\n" -H "Content-Type: application/json" --unix-socket /run/user/$UID/podman/podman.sock http://localhost/_ping
    

    O caminho para o --unix-socket corresponde ao caminho fornecido do podman info. A saída desse comando deve retornar OK, indicando uma configuração bem-sucedida da funcionalidade Redigir que está pronta para trabalhar com arquivos docker-compose.yaml.

Instalar o Podman Compose

O Podman Compose é uma biblioteca Python 3 que implementa a Especificação de Redação para ser executada com o Podman.

  1. Instale e ative o repositório developer_EPEL.

    Oracle Linux 8:

    sudo dnf install -y oracle-epel-release-el8
    sudo dnf config-manager --enable ol8_developer_EPEL
    

    Oracle Linux 9:

    sudo dnf install -y oracle-epel-release-el9
    sudo dnf config-manager --enable ol9_developer_EPEL
    

    Oracle Linux 10:

    sudo dnf install -y oracle-epel-release-el10
    sudo dnf config-manager --enable ol10_u0_developer_EPEL
    
  2. Instale o pacote Podman Compose.

    sudo dnf install -y podman-compose 
    
  3. Confirmar Podman Compose funciona exibindo sua versão.

    podman-compose version
    

Criar um arquivo de composição

Esse arquivo Compose permite a extração e o início do aplicativo designado.

  1. Crie um diretório para o teste e mude para esse diretório.

    mkdir -p projects/echo
    cd projects/echo
    
  2. Crie o arquivo Compose.

    cat >> compose.yaml << EOF
    services:
      web:
        image: k8s.gcr.io/echoserver:1.4
        ports:
          - "${HOST_PORT:-8080}:8080"
    EOF
    
    
  3. Revise o arquivo Compose.

    cat compose.yaml
    

Executar Edição do Podman

  1. Mude para o mesmo diretório que o arquivo Compose.

    Importante: os comandos podman-compose não funcionarão, a menos que você esteja no mesmo diretório do arquivo compose.yaml.

    cd ~/projects/echo/
    
  2. Inicie o aplicativo echoserver.

    podman-compose up -d
    

    A saída mostra o Podman puxando o contêiner e iniciando-o com os parâmetros listados no arquivo Compose. A opção -d diz ao Podman para executar o contêiner em segundo plano no modo desanexado. O Podman só extrairá imagens referenciadas no arquivo Compose se elas não estiverem presentes localmente.

  3. Teste se o aplicativo echoserver está ativo e em execução.

    curl -X POST -d "foobar" http://localhost:8080/; echo
    

    Exemplo de Saída:

    CLIENT VALUES:
    client_address=10.89.0.2
    command=POST
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://localhost:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    content-length=6
    content-type=application/x-www-form-urlencoded
    host=localhost:8080
    user-agent=curl/7.61.1
    BODY:
    foobar
    
  4. Além disso, confirme o sucesso revisando os logs.

    podman-compose logs
    

    Exemplo de Saída:

    ``texto ['podman', '–version', ''] usando podman versão: 4.2.0 podman logs echo_web_1 10.89.0.2 - - [17/Jan/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1" código de saída: 0

  5. Use o utilitário Podman Compose para ver contêineres em execução.

    podman-compose ps
    

    Exemplo de Saída:

    ['podman', '--version', '']
    using podman version: 4.2.0
    podman ps -a --filter label=io.podman.compose.project=echo
    CONTAINER ID  IMAGE                      COMMAND               CREATED        STATUS            PORTS                   NAMES
    f4053947c8c1  k8s.gcr.io/echoserver:1.4  nginx -g daemon o...  2 minutes ago  Up 2 minutes ago  0.0.0.0:8080->8080/tcp  echo_web_1
    exit code: 0
    

    Você pode ver outros comandos do utilitário Podman Compose executando podman-compose --help.

  6. Agora, é hora de interromper o contêiner echoserver.

    podman-compose down
    
  7. Remova a rede de ponte do Podman adicional criada durante a implantação do contêiner.

    podman network rm echo_default
    

Confirmar se o Docker Compose está funcionando

  1. Defina a variável de ambiente para a localização do soquete Podman.

    export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
    
  2. Inicie o aplicativo echoserver.

    Este comando deve ser executado de dentro do mesmo diretório que o arquivo Compose.

    docker-compose up -d
    

    A saída mostra a criação da rede echo_default e do contêiner echo-web-1.

  3. Acesse o aplicativo do contêiner.

    curl -X POST -d "foobar" http://localhost:8080/; echo
    

    Exemplo de Saída:

    [oracle@ol-server ~]$ curl -X POST -d "foobar" http://localhost:8080/; echo
    CLIENT VALUES:
    client_address=10.89.0.2
    command=POST
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://localhost:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    content-length=6
    content-type=application/x-www-form-urlencoded
    host=localhost:8080
    user-agent=curl/7.61.1
    BODY:
    foobar
    
  4. Inspecione os logs e confirme se este aplicativo enviou uma solicitação de devolução com sucesso.

    docker-compose logs
    

    Exemplo de Saída:

    ``texto echo-web-1 | 10.89.0.1 - - [17/Jan/2023:14:48:56 +0000] "POST / HTTP/1.1" 200 446 "-" curl/7.61"

  5. Obtenha uma listagem de contêineres iniciada usando o utilitário Docker Compose.

    docker-compose ps
    

    Exemplo de Saída:

    echo-web-1        k8s.gcr.io/echoserver:1.4   "nginx -g daemon off;"   web             12 minutes ago      Up 12 minutes       8080/tcp
    
  6. Interrompa o aplicativo echoserver.

    docker-compose down
    

Informações Importantes

Se você instalar os executáveis podman-compose e docker-compose no mesmo sistema, será essencial observar que não é possível chamá-los de forma intercambiável. O que queremos dizer com essa instrução é que, se você iniciar um processo usando podman-compose, não poderá consultá-lo ou interrompê-lo usando docker-compose ou vice-versa.

  1. Comece usando o Podman Compose.

    podman-compose up -d
    
  2. Tente listar os contêineres em execução usando o Docker Compose.

    docker-compose ps
    

    A saída retorna uma lista vazia mostrando que, de sua perspectiva, nenhum contêiner está em execução.

  3. No entanto, o uso do Podman Compose confirma que o contêiner está em execução.

    podman-compose ps
    

    Exemplo de Saída:

    ['podman', '--version', '']
    using podman version: 4.2.0
    podman ps -a --filter label=io.podman.compose.project=echo
    CONTAINER ID  IMAGE                      COMMAND               CREATED        STATUS            PORTS                   NAMES
    55335e797296  k8s.gcr.io/echoserver:1.4  nginx -g daemon o...  4 minutes ago  Up 4 minutes ago  0.0.0.0:8080->8080/tcp  echo_web_1
    exit code: 0
    

Próximas Etapas

Isso confirma como usar um arquivo Compose com o Podman usando podman-compose ou docker-compose.

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.