Introdução

Se você trabalha com containers, provavelmente conhece o Docker. Mas nos últimos anos surgiu um concorrente interessante: Podman. Desenvolvido pela Red Hat, o Podman promete fazer tudo o que o Docker faz, mas de forma diferente e, segundo alguns, melhor.

Neste artigo, analisaremos as diferenças reais entre os dois, sem fanatismo, para ajudá-lo a entender qual ferramenta é a certa para você.

O Que é Podman?

Podman (Pod Manager) é uma ferramenta para gerenciar containers e pods, desenvolvida pela Red Hat como alternativa open source ao Docker. Sua característica principal? Não precisa de um daemon em execução.

O nome “Podman” vem do conceito de “pod”, o mesmo usado no Kubernetes: um grupo de containers que compartilham recursos.

A Diferença Fundamental: Daemon vs Daemonless

Docker: Arquitetura Cliente-Servidor

O Docker funciona com um daemon (dockerd) sempre em execução em segundo plano:

1
2
3
4
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│ Docker CLI   │ ──► │ Docker Daemon│ ──► │  Container   │
│ (cliente)    │     │ (dockerd)    │     │              │
└──────────────┘     └──────────────┘     └──────────────┘
  • O daemon roda como root
  • Todos os comandos passam pelo daemon
  • Se o daemon falhar, você perde acesso aos containers

Podman: Arquitetura Fork-Exec

O Podman não tem daemon. Cada comando cria diretamente o processo do container:

1
2
3
4
┌──────────────┐     ┌──────────────┐
│ Podman CLI   │ ──► │  Container   │
│              │     │              │
└──────────────┘     └──────────────┘
  • Sem processo em segundo plano
  • Os containers são filhos diretos do comando Podman
  • Cada usuário gerencia seus próprios containers

Comparação Detalhada

1. Segurança: Rootless por Padrão

Docker:

  • O daemon roda tradicionalmente como root
  • Modo rootless disponível mas não padrão
  • Um exploit no daemon = acesso root ao sistema

Podman:

  • Rootless por padrão
  • Cada usuário tem seus próprios containers isolados
  • Nenhum daemon privilegiado para atacar
1
2
3
4
5
# Podman: containers sem privilégios root
podman run -it alpine sh

# Docker: requer grupo docker ou sudo (tradicionalmente)
sudo docker run -it alpine sh

Vencedor em segurança: Podman

2. Compatibilidade de Comandos

Boas notícias: a sintaxe é quase idêntica.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Docker
docker run -d -p 8080:80 nginx
docker ps
docker images
docker build -t minha-app .

# Podman (mesmos comandos!)
podman run -d -p 8080:80 nginx
podman ps
podman images
podman build -t minha-app .

Você pode criar um alias para uma transição sem dor:

1
alias docker=podman

Compatibilidade: Quase total para uso diário

3. Docker Compose vs Podman Compose

Docker Compose é o padrão de facto para orquestrar múltiplos containers em desenvolvimento.

Podman oferece duas opções:

  1. podman-compose: reimplementação em Python
  2. podman compose: integrado em versões recentes (usa Compose spec)
1
2
3
4
5
# Com Podman recente
podman compose up -d

# Com podman-compose (instalação separada)
podman-compose up -d

Nota: A compatibilidade é boa mas não perfeita. Alguns arquivos docker-compose.yml podem precisar de pequenos ajustes.

4. Gerenciamento de Imagens

Ambos usam o mesmo formato de imagens (OCI), então você pode:

  • Usar as mesmas imagens do Docker Hub
  • Construir imagens com o mesmo Dockerfile
  • Transferir imagens entre Docker e Podman
1
2
3
4
5
6
7
8
# Podman pode usar imagens do Docker Hub
podman pull docker.io/library/nginx

# Salvar uma imagem
podman save -o nginx.tar nginx

# Carregá-la no Docker
docker load -i nginx.tar

5. Pods: Um Recurso Exclusivo do Podman

O Podman suporta nativamente pods, grupos de containers que compartilham namespace de rede:

1
2
3
4
5
6
7
8
# Criar um pod
podman pod create --name meu-pod -p 8080:80

# Adicionar containers ao pod
podman run -d --pod meu-pod nginx
podman run -d --pod meu-pod redis

# Os containers no pod se comunicam via localhost

Isso é útil para:

  • Simular pods Kubernetes localmente
  • Agrupar containers relacionados
  • Simplificar a comunicação entre serviços

O Docker não tem um equivalente direto (usa networks).

6. Integração com Systemd

O Podman se integra nativamente com o systemd, o sistema init do Linux:

1
2
3
4
5
# Gerar um arquivo service systemd de um container
podman generate systemd --name meu-container > meu-container.service

# Habilitar o container na inicialização do sistema
systemctl --user enable meu-container.service

Isso permite gerenciar containers como serviços normais do sistema, sem precisar de um daemon separado.

7. Performance

A performance é comparável na maioria dos casos:

AspectoDockerPodman
Inicialização containerLigeiramente mais rápidoLigeiramente mais lento
Memória base~50-100 MB (daemon)~0 MB (sem daemon)
Build de imagensRápido (BuildKit)Comparável
I/O discoExcelenteExcelente

A diferença é negligenciável para a maioria dos usos.

Tabela Resumo

CaracterísticaDockerPodman
DaemonSimNão
Rootless padrãoNãoSim
Compatibilidade comandos-99%
Docker ComposeNativoVia podman-compose
Pods nativosNãoSim
Integração systemdLimitadaNativa
Suporte KubernetesDocker DesktopNativo
GUI DesktopDocker DesktopPodman Desktop
PlataformasLinux, Win, MacLinux, Win, Mac
LicençaApache 2.0Apache 2.0

Quando Escolher Docker

O Docker continua sendo a melhor escolha se:

  • Você trabalha em equipe que já usa Docker
  • Você precisa de Docker Compose com compatibilidade perfeita
  • Você usa Docker Desktop e seus recursos (Kubernetes integrado, extensões)
  • Você segue tutoriais e documentação (quase todos usam Docker)
  • Você precisa de suporte comercial

Quando Escolher Podman

O Podman é preferível se:

  • A segurança é prioridade (ambientes enterprise, produção)
  • Você trabalha com RHEL, CentOS, Fedora (integração nativa)
  • Você quer containers rootless sem configurações extras
  • Você precisa gerenciar containers como serviços systemd
  • Você está aprendendo Kubernetes (pods são uma vantagem)
  • Você não quer um daemon sempre em execução

Migração do Docker para Podman

Se você quer experimentar o Podman mantendo a compatibilidade:

1. Instale o Podman

1
2
3
4
5
6
7
8
# Fedora/RHEL
sudo dnf install podman

# Ubuntu/Debian
sudo apt install podman

# Mac (com Homebrew)
brew install podman

2. Crie o Alias

1
2
# No seu .bashrc ou .zshrc
alias docker=podman

3. Teste Seus Workflows

A maioria dos comandos funcionará de forma idêntica. Verifique:

  • Build de imagens
  • Docker Compose (use podman compose ou podman-compose)
  • Volumes e networks

4. Resolva as Incompatibilidades

As mais comuns:

  • Alguns flags específicos do Docker não existem
  • O socket Docker (/var/run/docker.sock) não existe por padrão
  • Algumas integrações CI/CD podem precisar de ajustes

Podem Coexistir?

Sim! Docker e Podman podem coexistir no mesmo sistema. Eles usam armazenamento separado, então containers e imagens não são compartilhados, mas você pode usar ambos para propósitos diferentes.

Conclusões

Não há um vencedor absoluto. A escolha depende do contexto:

  • Docker continua sendo o padrão de facto, com o ecossistema mais maduro e a documentação mais abundante
  • Podman oferece vantagens concretas em termos de segurança e arquitetura, especialmente em ambientes enterprise

Meu conselho? Se você está começando do zero, experimente ambos. A compatibilidade de comandos torna a mudança indolor. Se você já está em um ecossistema Docker consolidado, não há urgência de migrar, mas vale a pena ficar de olho no Podman para projetos futuros.

O bom é que o que você aprender com um se aplica quase completamente ao outro.