Tux Zine banner
Article Thumbnail

Podman: Guia Prático

📅 Qui, 1 jan 2026, 12:27 👤 Nerun


Podman (pod manager) é uma ferramenta de conteinerização alternativa ao Docker. O Podman resolve containers do jeito certo: sem daemon, sem root obrigatório, sem gambiarra histórica.

Se você entender este guia, você não precisará do Docker.

Em engenharia de software, a conteinerização permite empacotar e executar aplicações em ambientes isolados (contêineres). Isso possibilita que o software funcione de forma consistente em qualquer infraestrutura, seja na nuvem ou local, independente do fornecedor.


1. Instalação no Debian

No Debian Testing (Trixie) ou Stable recente:

sudo apt update
sudo apt install podman

Confere:

podman --version

Se não responder, o erro é humano — não arquitetural.


2. Conceitos Fundamentais (o coração do Podman)

Containers não são mágica. São quatro ideias simples.

Imagem (image)

Contêiner (container)

Volume

Serviço (Compose)

Ciclo completo

imagem → contêiner → volume (persistência)

Imagem não muda.
Container nasce e morre.
Volume é a única memória.


3. Comandos Básicos de Gerenciamento

Listar containers

# Containers ativos
podman ps

# Todos os containers (incluindo parados)
podman ps -a

Parar e reiniciar containers

# Parar um container (mantém os dados, só para a execução)
podman stop <nome_ou_id>

# Iniciar um container parado
podman start <nome_ou_id>

# Reiniciar
podman restart <nome_ou_id>

Remover containers

# Remover um container parado
podman rm <nome_ou_id>

# Remover com força (se estiver rodando)
podman rm -f <nome_ou_id>

# Remover todos os containers parados
podman container prune

Listar imagens

# Ver imagens baixadas
podman images
# ou
podman image ls

Remover imagens

# Remover uma imagem
podman rmi <nome_imagem:tag>

# Remover imagens não utilizadas
podman image prune

Listar volumes

# Ver volumes criados
podman volume ls

Criar e remover volumes

# Criar um volume nomeado
podman volume create <nome_volume>

# Remover um volume
podman volume rm <nome_volume>

# Remover volumes não utilizados
podman volume prune

4. Imagens: download, armazenamento e reutilização

Quando você faz:

podman pull debian:buster

O Podman:

A imagem fica salva em:

Você não mexe nisso manualmente.

A mesma imagem pode gerar inúmeros containers diferentes, ao mesmo tempo ou não.


5. Onde procurar imagens públicas

⚠️ podman search não é confiável hoje para registries públicos. (Registry é onde as imagens moram. Tecnicamente, é um serviço que armazena, versiona e distribui imagens de container).

Use o navegador:

Depois, use a tag diretamente:

podman pull debian:buster

Buscar no site, baixar no terminal. Simples.


6. Rodando containers na prática

Container interativo básico

podman run -it debian:buster bash

Explicação rápida:

IMPORTANTE: Quando você digita exit no shell do container:

Reiniciar um container existente

$ podman ps -a
CONTAINER ID   IMAGE            STATUS     NAMES
abcd1234       debian:buster    Exited     meu-container

# Só iniciar (background):
$ podman start meu-container

# Iniciar e já entrar no terminal (o mais comum):
$ podman start -ai meu-container

Executar container em segundo plano

# Rodar como daemon (background)
podman run -d --name meu-container debian:buster sleep 3600

# Anexar a um container rodando
podman exec -it meu-container bash

# Desanexar sem parar o container: pressione Ctrl+P, Ctrl+Q

7. Volumes na prática (onde tudo faz sentido)

Bind mount (o mais comum)

podman run -it \
    -v /home/daniel/meu_programa:/app \
    -v /home/daniel/dados:/dados \
    -w /app \
    debian:buster bash

Isso não cria dados automaticamente.

O que acontece:

Container não adivinha nada.

O -w /app define o diretório de trabalho quando o container inicializar, é o equivalente a: cd /app. Se não usar -w ele inicia no diretório definido pela imagem, geralmente o diretório raiz: /. Então -w não é persistência, é contexto de execução.

Volume nomeado (mais organizado)

# Criar volume
podman volume create db_data

# Usar volume
podman run -it -v db_data:/var/lib/mysql mysql:8

Regra de persistência

Só persiste o que for gravado no volume montado.

Se o programa grava em outro lugar, o dado morre junto com o container.


8. E os pacotes instalados com apt?

Dentro do container:

apt update
apt install vim

Essas alterações:

Isso é comportamento correto.

Quando isso faz sentido

Quando NÃO faz sentido

Se você quer um ambiente reutilizável, crie uma imagem nova.

Exemplo de arquivo dockerfile (sem extensão):

FROM debian:buster

RUN apt update && apt install -y \
    vim \
    curl \
 && apt clean

Build:

podman build -t debian10-custom .

O Podman:

  1. lê o Dockerfile no diretório atual (.)
  2. executa cada instrução
  3. cria uma nova imagem independente da imagem-base, que pode até ser deletada se quiser
  4. salva localmente com o nome debian10-custom
  5. o dockerfile não é mais necessário agora, pode ser deletado, ou pode ser mantido caso precise recriar essa imagem

Agora os pacotes fazem parte da imagem.

9. Containers sem volume: o que acontece

Um container sem volume usa apenas o filesystem interno, criado a partir da imagem.

Isso significa:

existem somente dentro daquele container.

Enquanto o container existir, esses dados permanecem. Ao remover o container, tudo é perdido.

Comparação prática

Situação Resultado
exit / podman stop nada é perdido
podman start estado intacto
podman rm tudo é apagado
novo podman run da mesma imagem começa do zero

Conclusão inevitável

Containers sem volume não compartilham estado e não oferecem persistência reutilizável.

Eles são ideais para:

Eles não são ideais para:

Onde entram volumes

Se você precisa que dados sobrevivam à remoção do container, volume não é opcional, é obrigatório.


10. Podman Compose (serviços de verdade)

Instalação:

sudo apt install podman-compose

Exemplo de docker-compose.yml:

services:
  app:
    image: node:20
    volumes:
      - .:/app
    ports:
      - "3000:3000"

Subir:

podman-compose up

Derrubar:

podman-compose down

11. Compatibilidade com Docker (quando o mundo insiste)

sudo apt install podman-docker

O comando diz docker.
Quem executa é o Podman.


12. Onde o Podman é objetivamente superior

Docker virou padrão por convenção.
Podman é padrão por arquitetura.


13. Fluxo Completo de Trabalho

  1. Baixar imagem:

    podman pull debian:buster
  2. Rodar container:

    podman run -it --name meu-teste debian:buster bash
  3. Sair sem remover (container para mas fica):

    # Dentro do container:
    exit
  4. Ver container parado:

    podman ps -a
  5. Recomeçar container existente:

    podman start -ai meu-teste
  6. Remover quando não precisar mais:

    podman rm meu-teste
  7. Limpar tudo (cuidado!):

    # Parar todos os containers
    podman stop $(podman ps -aq)
    
    # Remover todos os containers
    podman rm $(podman ps -aq)
    
    # Remover imagens não usadas
    podman image prune -a

14. Regra final (grave em pedra)

Se você pensa:

“Quero rodar coisas antigas sem quebrar meu sistema moderno”

A resposta é Podman.

Sem drama. Sem gambiarra. Sem arrependimento.

🔝