Ir para o conteúdo

Setup Podman

Instala o Podman, um motor de container open-source para desenvolvimento, gerenciamento e execução de containers OCI. É uma alternativa daemon-less e rootless ao Docker.

O que é Podman?

Podman é uma ferramenta para gerenciar containers, similar ao Docker, mas com algumas vantagens importantes:

  • Sem daemon: Não precisa de um serviço rodando em background
  • Rootless: Pode executar containers sem privilégios de root
  • Compatível com Docker: Usa os mesmos comandos e imagens
  • Mais seguro: Melhor isolamento e segurança

Por exemplo:

# No Docker você faz:
docker run hello-world

# No Podman é idêntico:
podman run hello-world

Como usar

Instalar

susa setup podman

O comando vai:

  • Linux: Baixar o binário mais recente do GitHub e instalar em ~/.local/bin
  • macOS: Instalar via Homebrew e configurar máquina virtual
  • Ambos: Instalar podman-compose automaticamente

Depois de instalar, reinicie o terminal ou execute:

source ~/.bashrc   # Para Bash
source ~/.zshrc    # Para Zsh

Atualizar

susa setup podman --upgrade

O comando vai:

  • Verificar a versão instalada e a versão mais recente disponível
  • Linux: Baixar e instalar o binário mais recente do GitHub
  • macOS: Atualizar via Homebrew (brew upgrade podman)
  • Atualizar também o podman-compose se instalado
  • Informar se já está na versão mais recente

Desinstalar

susa setup podman --uninstall

Opções

Opção O que faz
-h, --help Mostra ajuda detalhada
-u, --upgrade Atualiza o Podman para a versão mais recente
--uninstall Remove o Podman do sistema
-q, --quiet Minimiza a saída, desabilita mensagens de depuração

Guia Rápido de Uso

Comandos Básicos

1. Verificar instalação

podman --version

2. Executar seu primeiro container

podman run hello-world

3. Listar imagens disponíveis

podman images

4. Listar containers em execução

podman ps

5. Listar todos os containers (incluindo parados)

podman ps -a

Trabalhando com Containers

Executar um container Ubuntu interativo

podman run -it ubuntu bash

Executar um servidor web Nginx

podman run -d -p 8080:80 --name meu-nginx nginx

Acesse: http://localhost:8080

Parar um container

podman stop meu-nginx

Remover um container

podman rm meu-nginx

Trabalhando com Imagens

Baixar uma imagem

podman pull nginx:latest

Listar imagens locais

podman images

Remover uma imagem

podman rmi nginx:latest

Construir uma imagem a partir de um Dockerfile

podman build -t minha-app .

Usando Podman Compose

O podman-compose permite gerenciar aplicações multi-container usando arquivos YAML, compatível com Docker Compose.

Exemplo de docker-compose.yml:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: senha123

Comandos:

# Iniciar todos os serviços
podman-compose up -d

# Ver status dos serviços
podman-compose ps

# Ver logs
podman-compose logs

# Parar todos os serviços
podman-compose down

Vantagens do Podman

1. Sem Daemon (Daemonless)

  • Docker precisa do daemon dockerd rodando
  • Podman executa containers diretamente, sem processo intermediário
  • Menos consumo de recursos

2. Rootless por Padrão

# Podman pode executar containers sem sudo
podman run nginx

# Docker geralmente precisa de sudo ou adicionar usuário ao grupo docker
sudo docker run nginx

3. Compatibilidade

# Se você já usa Docker, pode criar um alias:
alias docker=podman

# Agora todos os comandos Docker funcionam!
docker run hello-world
docker ps
docker images

4. Pods (similar ao Kubernetes)

# Criar um pod (grupo de containers)
podman pod create --name meu-pod

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

Diferenças do Docker

Característica Docker Podman
Daemon Sim (dockerd) Não
Privilégios root Geralmente necessário Opcional (rootless)
Pods Não (apenas containers) Sim
Compatibilidade Padrão de mercado Compatível com Docker
systemd Integração básica Integração nativa

Troubleshooting

Problema: Comando não encontrado após instalação

Linux:

# Adicione ao PATH manualmente
export PATH="$HOME/.local/bin:$PATH"

# Ou reinicie o terminal

macOS:

# Inicie a máquina virtual
podman machine start

Problema: Permissões ao executar containers

# Configure namespaces de usuário (Linux)
echo "$USER:100000:65536" | sudo tee /etc/subuid
echo "$USER:100000:65536" | sudo tee /etc/subgid

Problema: Porta já em uso

# Verifique o que está usando a porta
sudo lsof -i :8080

# Use outra porta
podman run -p 8081:80 nginx

Recursos Adicionais

Exemplos Práticos

Aplicação Node.js

# Criar Dockerfile
cat > Dockerfile << EOF
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
EOF

# Construir imagem
podman build -t minha-app:latest .

# Executar
podman run -d -p 3000:3000 --name app minha-app:latest

Banco de Dados PostgreSQL

# Criar volume para persistência
podman volume create pgdata

# Executar PostgreSQL
podman run -d \
  --name postgres \
  -e POSTGRES_PASSWORD=senha123 \
  -e POSTGRES_DB=meudb \
  -v pgdata:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:15

# Conectar ao banco
podman exec -it postgres psql -U postgres -d meudb

Redis Cache

# Executar Redis
podman run -d \
  --name redis \
  -p 6379:6379 \
  redis:alpine

# Testar conexão
podman exec -it redis redis-cli ping

Migração do Docker para Podman

Se você já usa Docker, migrar é simples:

# 1. Instalar Podman
susa setup podman

# 2. Criar alias (opcional)
echo "alias docker=podman" >> ~/.bashrc
source ~/.bashrc

# 3. Usar normalmente
docker run hello-world
docker ps
docker-compose up -d  # Use podman-compose

Diferenças a considerar:

  • docker-composepodman-compose
  • Alguns plugins do Docker não funcionam
  • Networking pode ter pequenas diferenças
  • Volumes são gerenciados de forma diferente

Comandos Úteis

# Verificar versão instalada
podman --version

# Atualizar Podman
susa setup podman --upgrade

# Limpar containers parados
podman container prune

# Limpar imagens não utilizadas
podman image prune

# Limpar tudo (cuidado!)
podman system prune -a

# Ver uso de espaço
podman system df

# Inspecionar container
podman inspect <container-id>

# Ver logs em tempo real
podman logs -f <container-name>

# Copiar arquivos do/para container
podman cp arquivo.txt <container>:/path/
podman cp <container>:/path/arquivo.txt .

# Executar comando em container rodando
podman exec -it <container> bash

Requisitos de Sistema

Linux

  • Kernel Linux 3.10+
  • systemd (opcional, mas recomendado)
  • Namespaces de usuário habilitados

macOS

  • macOS 11.0 (Big Sur) ou superior
  • Homebrew instalado
  • Máquina virtual será criada automaticamente

Notas Importantes

  • Linux: Instalação via binário estático, sem necessidade de repositórios
  • macOS: Requer máquina virtual (criada automaticamente)
  • Rootless: Por padrão, não precisa de sudo
  • Compose: Instalado automaticamente (apt/dnf/yum ou pip)
  • Atualizações: Use susa setup podman --upgrade para atualizar para a versão mais recente

Suporte

Se encontrar problemas:

  1. Verifique os logs com DEBUG=1 susa setup podman
  2. Consulte a documentação oficial
  3. Visite o GitHub do Podman
  4. Use susa setup podman --help para mais informações