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)
- É o molde.
- Sistema de arquivos base + bibliotecas + dependências pré-instaladas.
- Imutável.
- Fica salva localmente após o
podman pull. - Pode ser reutilizada para criar quantos containers quiser, todos iniciando do mesmo estado.
- Exemplos:
debian:bookworm,debian:buster,node:20,postgres:16. - Analogia: receita do bolo.
▓ Contêiner (container)
- É uma instância isolada criada a partir de uma imagem.
- Possui filesystem próprio e estado independente.
- Pode ser iniciado, parado, reiniciado, deletado.
- Ao sair do shell ou terminar o processo principal, o container para, mas não é removido automaticamente.
- O estado interno do container (pacotes instalados, configs etc) não é compartilhado nem herdado por outros containers.
- Ao remover o container, todo o estado interno é descartado.
- Analogia: um bolo assado a partir daquela receita específica.
░ Volume
- Persistência de dados reutilizável.
- Vive fora do container.
- Pode ser montado em um ou mais containers.
- Sobrevive à remoção dos containers.
-
Pode ser:
- diretório do host (bind mount)
- volume nomeado do Podman
- Nada é salvo automaticamente: só persiste o que o programa gravar no caminho montado.
- Analogia: uma partição lógica compartilhável.
▒ Serviço (Compose)
- Descrição declarativa de containers.
- Define imagem, volumes, portas, nome e rede.
- Um arquivo YAML sobe tudo de uma vez.
- Podman usa isso via
podman-compose. - Analogia: a ficha técnica do pedido para execução repetível.
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:
- baixa a imagem
- armazena localmente no seu PC
- não executa nada
- deixa a imagem pronta para reutilização
A imagem fica salva em:
- rootless (usuário normal):
~/.local/share/containers/storage/ - como root:
/var/lib/containers/storage/
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:
- Docker Hub (imagens oficiais): https://hub.docker.com/_/debian
- Quay.io: https://quay.io/search
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:
-i→ mantém entrada aberta-t→ cria terminalbash→ processo principal
IMPORTANTE: Quando você digita exit no shell do container:
- O processo principal (
bash) termina - O container PARA de executar, mas continua existindo (aparece em
podman ps -a) - Tudo que foi feito dentro do container permanece intacto, pacotes, arquivos e configurações não são perdidos
- o container pode ser iniciado novamente a qualquer momento
- Os dados em volumes são mantidos
- O container parado não consome CPU/memória, só ocupa espaço em disco
- Para removê-lo completamente:
podman rm <nome_ou_id>
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:
/app→ código/programa/dados→ onde VOCÊ decide salvar dados- O programa só salva em
/dadosse for configurado para isso
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:
- alteram apenas o filesystem do container, pertencem exclusivamente àquele container
- permanecem disponíveis enquanto o container existir
- não afetam a imagem usada para criar o container
- não são herdadas por outros containers criados com a mesma imagem
- não vão para o volume
- como estão dentro do container, elas são removidas quando o container for removido
Isso é comportamento correto.
Quando isso faz sentido
- testes
- debug
- reproduzir bugs antigos
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:
- lê o Dockerfile no diretório atual (.)
- executa cada instrução
- cria uma nova imagem independente da imagem-base, que pode até ser deletada se quiser
- salva localmente com o nome debian10-custom
- o
dockerfilenã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:
- todos os arquivos criados
- pacotes instalados
- configurações alteradas
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:
- testes
- ambientes descartáveis
- reproduzir bugs
- experimentar sem medo
Eles não são ideais para:
- dados importantes
- ambientes que precisam sobreviver à remoção
- "instalar coisas uma vez e usar pra sempre"
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
- Ambientes multiusuário
- Servidores sérios
- Sistemas que respeitam segurança
- Quem não aceita daemon root rodando 24/7
Docker virou padrão por convenção.
Podman é padrão por arquitetura.
13. Fluxo Completo de Trabalho
-
Baixar imagem:
podman pull debian:buster -
Rodar container:
podman run -it --name meu-teste debian:buster bash -
Sair sem remover (container para mas fica):
# Dentro do container: exit -
Ver container parado:
podman ps -a -
Recomeçar container existente:
podman start -ai meu-teste -
Remover quando não precisar mais:
podman rm meu-teste -
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)
- Imagem é base
- Container é estado descartável
- Volume é memória
- Pacote instalado no container é local
- Pacote na imagem é padrão
- Dado pertence ao volume
Se você pensa:
“Quero rodar coisas antigas sem quebrar meu sistema moderno”
A resposta é Podman.
Sem drama. Sem gambiarra. Sem arrependimento.