Observação:

Usando Arquivos Compose com Podman

Introdução

O Docker Compose é uma ferramenta de linha de comando que usa um arquivo YAML especialmente formatado como entrada para montar e executar contêineres únicos ou múltiplos como aplicativos. Isso permite que os desenvolvedores desenvolvam, testem e depois entregem a seus usuários um único arquivo YAML para sua aplicação, e usem apenas um comando para iniciar e interromper, de forma confiável. Essa portabilidade e confiabilidade fizeram do Docker Compose não só muito popular entre usuários e desenvolvedores, mas também cada vez mais um requisito.

Objetivos

Este laboratório mostra como instalar e usar podman-compose e docker-compose com Podman e verificar se eles funcionam com um arquivo docker-compose.yaml simples.

Pré-requisitos

Isenção de Responsabilidade do Oracle Support

A Oracle não fornece suporte técnico para a sequência de etapas fornecidas nas instruções a seguir porque essas etapas se referem a programas de software e sistemas operacionais que não são fornecidos pela Oracle. Este tutorial fornece instruções opcionais apenas como conveniência.

Para obter mais informações sobre o método suportado pela Oracle para o desenvolvimento e uso de serviços baseados em Podman, consulte https://docs.oracle.com/en/operating-systems/oracle-linux/podman/.

Configurar o Ambiente de Laboratório

Observação: ao usar o ambiente de laboratório gratuito, consulte Informações Básicas do Oracle Linux Lab para obter conexão e outras instruções de uso.

  1. Abra um terminal e conecte-se via ssh à instância ol-server se ainda não estiver conectado.

    ssh oracle@<ip_address_of_instance>
    

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. Verifique a versão do Podman.

    podman -v
    
  2. 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
    

Configurar Podman para Trabalhar com Arquivos de Composição

Podman introduziu o suporte para a funcionalidade do Docker Compose no Podman v3.2.0, depois que o suporte limitado foi introduzido no Podman v3.0.0, introduzindo assim a capacidade de usar o Docker Compose do Podman. Mais recentemente, o Podman v4.1.0 ampliou o suporte da funcionalidade Docker Compose para incluir o uso do Docker Compose v2.2 e mais recente.

As etapas a seguir descrevem como instalar e configurar o podman-compose e o docker-compose.

Instalar o Pacote Podman Docker

Isso permite que o Podman trabalhe nativamente com comandos do Docker.

  1. Instale o pacote podman-docker.

    sudo dnf install -y podman-docker
    

Instalar o Docker Compose

Observação:

A Instalação de Composição de forma independente, conforme descrito aqui, requer o uso de docker-compose em vez da sintaxe padrão usada ao usar o utilitário Docker do docker compose. Em outras palavras, substitua a sintaxe docker compose up pelo docker-compose up.

  1. Baixe e instale o Compose autônomo.

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

    Exemplo de Saída:

    [oracle@ol-server ~]$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
      % 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 42.8M  100 42.8M    0     0   158M      0 --:--:-- --:--:-- --:--:--  158M
    
    
  2. Aplique permissões executáveis ao binário.

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. Confirme Compor trabalhos independentes.

    docker-compose version
    

    Exemplo de Saída:

    [oracle@ol-server ~]$ docker-compose version
    Docker Compose version v2.15.1
    
    

Iniciar o Soquete Podman

As etapas a seguir são necessárias para fazer com que a funcionalidade Compose do Docker funcione criando um soquete Unix.

  1. Configure o soquete Podman com estas etapas.

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

    Exemplo de Saída:

    [oracle@ol-server ~]$ sudo systemctl enable --now podman.socket
    Created symlink /etc/systemd/system/sockets.target.wants/podman.socket -> /usr/lib/systemd/system/podman.socket.
    [oracle@ol-server ~]$ sudo systemctl status podman.socket
    * podman.socket - Podman API Socket
       Loaded: loaded (/usr/lib/systemd/system/podman.socket; enabled; vendor preset)
       Active: active (listening) since Thu 2023-01-19 20:58:20 GMT; 16s ago
         Docs: man:podman-system-service(1)
       Listen: /run/podman/podman.sock (Stream)
       CGroup: /system.slice/podman.socket
    
    Jan 19 20:58:20 ol-server systemd[1]: Listening on Podman API Socket.
    
  2. Verifique se o soquete funciona conforme o esperado usando curl.

sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping

Exemplo de Saída:

[oracle@ol-server ~]$ sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
OK
[oracle@ol-server ~]$

Se a saída desse comando retornar OK, a funcionalidade Compose será configurada com sucesso para funcionar com arquivos docker-compose.yaml.

Instalar o Podman Compose

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

  1. Antes de instalar o Podman Compose, confirme se o pip foi atualizado para a versão mais recente.

    sudo -H pip3 install --upgrade pip
    
  2. Instale o pacote Podman Compose.

    sudo pip3 install podman-compose 
    

    Ao executar pip3 install como sudo, as mensagens AVISO podem ser ignoradas.

  3. Confirme que o Podman Compose funciona.

    podman-compose version
    

    Exemplo de Saída:

    [oracle@ol-server ~]$ podman-compose version
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman-composer version  1.0.3
    podman --version 
    podman version 4.2.0
    exit code: 0
    

Criar um Arquivo Compose do Docker

Este arquivo docker-compose.yaml permite a extração e o início do aplicativo designado.

  1. Crie um diretório para o teste.

    mkdir -p Documents/examples/echo
    
  2. Passe para o diretório.

    cd Documents/examples/echo
    
  3. Crie o arquivo docker-compose.yaml.

    cat >> docker-compose.yaml << EOF
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "${HOST_PORT:-8080}:8080" 
    EOF
    
  4. Revise o docker-compose.yaml recém-criado.

    cat docker-compose.yaml
    

    Exemplo de Saída:

    [oracle@ol-server echo]$ cat docker-compose.yaml 
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "8080:8080"
    

Confirmar que o Podman Compose está funcionando

  1. Vá para o diretório no qual está o arquivo de edição do docker.

    Importante: Os comandos podman-compose não funcionarão, a menos que você esteja no diretório em que o arquivo docker-compose.yaml está localizado.

    cd ~/Documents/examples/echo/
    
  2. Inicie o aplicativo echoserver.

    podman-compose up -d
    

    Exemplo de Saída:

    [oracle@ol-server echo]$ podman-compose up -d
    ['podman', '--version', '']
    using podman version: 4.2.0
    ** excluding:  set()
    ['podman', 'network', 'exists', 'echo_default']
    ['podman', 'network', 'create', '--label', 'io.podman.compose.project=echo', '--label', 'com.docker.compose.project=echo', 'echo_default']
    ['podman', 'network', 'exists', 'echo_default']
    podman create --name=echo_web_1 --label io.podman.compose.config-hash=123 --label io.podman.compose.project=echo --label io.podman.compose.version=0.0.1 --label com.docker.compose.project=echo --label com.docker.compose.project.working_dir=/home/oracle/examples/echo --label com.docker.compose.project.config_files=docker-compose.yaml --label com.docker.compose.container-number=1 --label com.docker.compose.service=web --net echo_default --network-alias web -p 8080:8080 k8s.gcr.io/echoserver:1.4
    Trying to pull k8s.gcr.io/echoserver:1.4...
    Getting image source signatures
    Copying blob d3c51dabc842 done  
    Copying blob a3ed95caeb02 done  
    Copying blob 6d9e6e7d968b done  
    Copying blob 412c0feed608 done  
    Copying blob cd23f57692f8 done  
    Copying blob dcd34d50d5ee done  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob b4241160ce0e done  
    Copying blob 7abee76f69c0 done  
    Writing manifest to image destination
    Storing signatures
    1b54b75ca13786d33df6708da1d83ecce14b055e78b03007c3c4e1f441e7139c
    exit code: 0
    

    Observação: Como no Podman, qualquer contêiner referenciado no arquivo docker-compose.yaml só será extraído se ainda não estiver presente no sistema.

  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:

    [oracle@ol-server echo]$ 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. Além disso, confirme o sucesso revisando os logs.

    podman-compose logs
    

    Exemplo de Saída:

    [oracle@ol-server echo]$ podman-compose logs
    ['podman', '--version', '']
    using podman version: 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"
    exit code: 0
    
    
  5. Use o utilitário Podman Compose para ver os contêineres em execução.

    podman-compose ps
    

    Exemplo de Saída:

    [oracle@ol-server echo]$ podman-compose ps   
    ['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
    

    Observação: Consulte outros comandos do utilitário Podman Compose executando podman-compose --help. No entanto, esses comandos adicionais estão fora do escopo deste Laboratório.

  6. Agora é hora de interromper o serviço echoweb.

    podman-compose down
    

Confirmar se o Docker Compose está funcionando

  1. (Opcional) Altere o diretório no qual o arquivo docker-compose está localizado.

    Importante: Os comandos docker-compose não funcionarão, a menos que você esteja no diretório em que o arquivo docker-compose.yaml está localizado.

    cd ~/Documents/examples/echo/
    
  2. Inicie o aplicativo echoserver.

    sudo /usr/local/bin/docker-compose up -d
    

    Exemplo de Saída:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose up -d
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.1
    [+] Running 0/1echo-web-1  Starting                                                                                               0.2
    [+] Running 0/1echo-web-1  Starting                                                                                               0.3
    [+] Running 0/1echo-web-1  Starting                                                                                               0.4
    [+] Running 0/1echo-web-1  Starting                                                                                               0.5
    [+] Running 0/1echo-web-1  Starting                                                                                               0.6
    [+] Running 0/1echo-web-1  Starting                                                                                               0.7
    [+] Running 1/1echo-web-1  Starting                                                                                               0.8
     ��� Container echo-web-1  Started                                                                                                0.8s
    

    OBSERVAÇÃO:

    Se a seguinte saída for retornada ao executar este comando:

    ��� Container echo-web-1  Starting                                                                                               0.9s
    Error response from daemon: cannot listen on the TCP port: listen tcp4 :8080: bind: address already in use
    

    Não se preocupe, isso significa que o comando podman-compose down não foi executado e o contêiner echoserver anteriormente iniciado usando podman-compose ainda está em execução. Siga as etapas anteriores para interrompê-lo.

  3. Teste se o contêiner está em execução.

    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. Como antes, use o utilitário Docker Compose para inspecionar os logs e confirmar que uma solicitação bem-sucedida foi retornada por este aplicativo.

    sudo /usr/local/bin/docker-compose logs
    

    Exemplo de Saída:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose logs 
    echo-web-1  | 10.89.0.1 - - [17/Jan/2023:14:48:56 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"
    
    
  5. O utilitário Docker Compose também fornece uma maneira de revisar os contêineres iniciados pelo arquivo Compose.

    sudo /usr/local/bin/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
    

    Observação: Consulte outros comandos do utilitário Docker Compose executando docker-compose --help. No entanto, esses comandos adicionais estão fora do escopo deste Laboratório.

  6. Interrompa o serviço echoweb.

    sudo /usr/local/bin/docker-compose down
    

    Exemplo de Saída:

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose down
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.1
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.2
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.3
    [+] Running 2/1echo-web-1  Removing                                                                                                   0.4
     ��� Container echo-web-1  Removed                                                                                                    0.4s
     ��� Network echo_default  Removed                                                                                                    0.0s
    

Informações Importantes

Se os executáveis podman-compose e docker-compose tiverem sido instalados no mesmo sistema, é importante observar que não é possível chamá-los de forma intercambiável. Isso significa que, se um processo for iniciado por podman-docker, ele não poderá ser consultado ou interrompido usando o utilitário docker-compose, ou vice-versa, conforme mostrado no exemplo abaixo:

  1. Vá para o diretório no qual está o arquivo Compose.

    Importante: Os comandos podman-compose ou docker-compose não funcionarão, a menos que você esteja no diretório onde o arquivo docker-compose.yaml está localizado.

    cd ~/Documents/examples/echo/
    
  2. Comece usando o Podman Compose.

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

    sudo /usr/local/bin/docker-compose ps
    

    Exemplo de Saída

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose ps
    NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS
    
  4. No entanto, o uso do Podman Compose confirma que o contêiner está em execução.

    podman-compose ps
    

    Exemplo de Saída:

    [oracle@ol-server echo]$ podman-compose ps
    ['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
    

Resumo

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

Para Obter Mais Informações

Consulte outros recursos relacionados:

Mais Recursos de Aprendizagem

Explore outros laboratórios no site docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. 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.