Observação:
- Este tutorial está disponível em um ambiente de laboratório gratuito fornecido pela Oracle.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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
- Um sistema cliente com o Oracle Linux instalado
- Podman instalado (o pacote 'container-tools')
- Acesso à Internet
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.
-
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.
-
Verifique a versão do Podman.
podman -v
-
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.
-
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 dodocker compose
. Em outras palavras, substitua a sintaxedocker compose up
pelodocker-compose up
.
-
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
-
Aplique permissões executáveis ao binário.
sudo chmod +x /usr/local/bin/docker-compose
-
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.
-
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.
-
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.
-
Antes de instalar o Podman Compose, confirme se o pip foi atualizado para a versão mais recente.
sudo -H pip3 install --upgrade pip
-
Instale o pacote Podman Compose.
sudo pip3 install podman-compose
Ao executar
pip3 install
comosudo
, as mensagens AVISO podem ser ignoradas. -
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.
-
Crie um diretório para o teste.
mkdir -p Documents/examples/echo
-
Passe para o diretório.
cd Documents/examples/echo
-
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
-
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
-
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 arquivodocker-compose.yaml
está localizado.cd ~/Documents/examples/echo/
-
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. -
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
-
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
-
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. -
Agora é hora de interromper o serviço echoweb.
podman-compose down
Confirmar se o Docker Compose está funcionando
-
(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 arquivodocker-compose.yaml
está localizado.cd ~/Documents/examples/echo/
-
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 usandopodman-compose
ainda está em execução. Siga as etapas anteriores para interrompê-lo. -
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
-
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"
-
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. -
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:
-
Vá para o diretório no qual está o arquivo Compose.
Importante: Os comandos
podman-compose
oudocker-compose
não funcionarão, a menos que você esteja no diretório onde o arquivodocker-compose.yaml
está localizado.cd ~/Documents/examples/echo/
-
Comece usando o Podman Compose.
podman-compose up -d
-
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
-
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:
- Oracle Learning Library
- Documentação do Oracle Linux:
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.
Using Compose Files with Podman
F76747-01
January 2023
Copyright © 2023, Oracle and/or its affiliates.