Como usar Podman, Dockerfile e Ubuntu: Gerenciamento de contêineres seguro e moderno no Linux

目次

1. Introdução

A Evolução e a Importância Crescente da Tecnologia de Contêineres

Nos últimos anos, a tecnologia de contêineres ganhou rapidamente importância no campo de desenvolvimento e operação de aplicações. Em particular, a capacidade de alinhar os ambientes de desenvolvimento e produção garante a reprodutibilidade das operações, um benefício chave que conquistou forte apoio entre os engenheiros.

Embora o Docker continue sendo a plataforma de contêineres mais amplamente reconhecida, o Podman tem atraído atenção crescente como uma alternativa moderna. O Podman oferece uma interface de linha de comando (CLI) quase idêntica à do Docker, mas se destaca por sua arquitetura sem daemon e leve e por seu suporte a operações sem root (não‑root).

Por que “Podman + Dockerfile + Ubuntu”?

Neste artigo, explicaremos como combinar Podman, Dockerfile e Ubuntu para fluxos de trabalho modernos de contêineres no Linux.

  • Ubuntu é uma distribuição Linux popular usada por todos, desde iniciantes até usuários avançados,
  • Dockerfile serve como um plano para construir imagens de contêiner,
  • e o Podman é uma ferramenta de próxima geração projetada para gerenciar essas imagens de forma flexível e segura.

Com a crescente conscientização sobre segurança, a abordagem de usar Podman com Dockerfile no Ubuntu está sendo adotada cada vez mais por desenvolvedores individuais e equipes corporativas.

Propósito e Público‑Alvo

O objetivo deste artigo é fornecer um guia claro, passo a passo, para construir contêineres práticos com Podman e Dockerfile no Ubuntu.

Este artigo destina‑se a leitores como:

  • Desenvolvedores experientes com Docker que têm curiosidade sobre o Podman
  • Usuários de Ubuntu que buscam gerenciamento de contêineres seguro
  • Engenheiros que desejam incorporar tecnologias de contêineres em seu fluxo de trabalho
  • Iniciantes interessados em escrever Dockerfiles e construir com Podman

Cobriremos tudo, desde os conceitos básicos e dicas de solução de problemas até as principais diferenças em relação ao Docker e como migrar.

2. O que é o Podman?

Visão Geral do Podman

Podman (Pod Manager) é uma ferramenta de gerenciamento de contêineres de próxima geração desenvolvida por uma comunidade liderada pela Red Hat. Assim como o Docker, ele pode criar, executar e gerenciar contêineres compatíveis com OCI, mas seu design e arquitetura diferem de maneira significativa.

A maior característica do Podman é que ele não requer um daemon em segundo plano. Isso possibilita operações leves e seguras. O Podman também oferece suporte ao modo rootless, permitindo que usuários comuns gerenciem contêineres sem privilégios elevados. A CLI é altamente compatível com o Docker, de modo que a maioria dos comandos é quase idêntica.

Principais Recursos do Podman

A seguir, alguns recursos notáveis do Podman:

Arquitetura Sem Daemon

O Podman opera sem um daemon (processo residente) em segundo plano para gerenciamento de contêineres. Isso resulta em uso eficiente de recursos, sem processos desnecessários em segundo plano.

Suporte Rootless (Usuários Não‑Privilegiados)

O Podman permite que usuários comuns executem e gerenciem contêineres sem privilégios de administrador. Isso possibilita operar contêineres com segurança em ambientes multi‑usuário ou de servidor, reduzindo significativamente os riscos de segurança.

CLI Compatível com Docker

O Podman usa quase a mesma estrutura de comandos do Docker. Por exemplo, os seguintes comandos Docker funcionam quase identicamente no Podman:

podman build -t myimage .
podman run -it myimage bash

Isso permite que usuários familiarizados com o Docker façam a transição para o Podman de forma fluida.

Recurso de Pod

O Podman adota o conceito de “Pod” do Kubernetes, permitindo que você gerencie múltiplos contêineres como uma única unidade lógica. Isso aumenta a compatibilidade com o Kubernetes e facilita a migração de ambientes locais para a nuvem.

Compatibilidade com Ubuntu

Embora o Podman seja amplamente adotado em distribuições Fedora e baseadas em RHEL, ele também funciona de forma estável no Ubuntu. Você pode instalá‑lo a partir dos repositórios oficiais, e a configuração é simples. Especialmente a partir do Ubuntu 20.04 LTS, a manutenção dos pacotes melhorou, reduzindo a barreira de adoção.

3. Instalando o Podman no Ubuntu

Antes de Começar: Lista de Verificação Pré‑Instalação

Antes de instalar o Podman no Ubuntu, verifique a versão do seu Ubuntu. O Podman é recomendado para Ubuntu 20.04 LTS ou posterior. Versões mais antigas podem não ter os pacotes necessários no repositório oficial.

Verifique a versão do Ubuntu com o seguinte comando:

lsb_release -a

A instalação do Podman requer privilegi​os sudo. Mesmo que você pretenda usar o modo rootless, são necessários privilégios de administrador para a instalação inicial, portanto, certifique‑se de que os possui.

Instalando o Podman (positório Oficial do Ubuntu)

No Ubuntu 20.04, 22.04 ou posterior, você pode instalar o Podman facilmente com o APT:

sudo apt update
sudo apt install -y podman

Após a instalação, verifique a versão para confirmar que tudo foi configurado corretamente:

podman --version

Como Obter a Versão Mais Recente (PPA Oficial)

O pacote do Podman no repositório padrão do Ubuntu pode não ser o mais recente. Se você quiser os recursos mais novos, use o Personal Package Archive (PPA) oficial:

. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt update
sudo apt install -y podman

Isso lhe dá acesso ao último lançamento do Podman, equivalente aos ecossistemas Red Hat e Fedora.

Teste Básico de Funcionalidade do Podman

Depois da instalação, execute uma verificação rápida:

podman info

Esse comando mostra a versão do Podman, a configuração e os recursos suportados, como o modo rootless.

Teste a extração e execução de um contêiner oficial do Alpine Linux:

podman run --rm -it alpine sh

Se o shell for iniciado com sucesso, sua configuração do Podman está funcionando corretamente.

4. Usando Dockerfile com Podman

O que é um Dockerfile?

Um Dockerfile é um plano para construir imagens de contêiner. É um arquivo de texto que lista a imagem base, pacotes a instalar, arquivos a copiar e outras instruções em sequência.

Ferramentas de contêiner como Podman e Docker podem criar automaticamente um ambiente consistente com base nesse arquivo.

Exemplo de instruções:

FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]

Isso instala pacotes, copia scripts e define o que deve ser executado por padrão na imagem resultante.

Como Usar Dockerfile com Podman

Você pode construir imagens de contêiner a partir de Dockerfiles com o Podman, quase exatamente como faria com o Docker.

1. Prepare o Diretório

Organize seus arquivos assim:

project/
├── Dockerfile
└── app.sh

app.sh pode ser um script simples:

#!/bin/bash
echo "Hello from Podman container!"

Torne o script executável:

chmod +x app.sh

2. Construa com o Podman

Com o Dockerfile no diretório atual, execute:

podman build -t mypodmanapp .

Isso cria uma imagem de contêiner chamada mypodmanapp.

3. Verifique o Resultado da Construção

Veja a imagem com:

podman images

4. Execute o Contêiner

Inicie um contêiner a partir da imagem que você acabou de construir:

podman run --rm mypodmanapp

Se tudo estiver configurado corretamente, você verá: Hello from Podman container!

Diferença com Containerfile

O Podman aceita arquivos chamados Containerfile, que usam a mesma sintaxe do Dockerfile. Esse é apenas um nome neutro, não vinculado à marca Docker.

A funcionalidade é idêntica. Seja o arquivo chamado Dockerfile ou Containerfile, o Podman o utilizará:

podman build -f Containerfile -t myimage .

Basta especificar o nome do arquivo com a opção -f, se necessário.

5. Exemplo Prático: Construindo um Contêiner Baseado em Ubuntu

Criando um Dockerfile Baseado em Ubuntu

Vamos percorrer passo a passo a construção de um Dockerfile baseado em Ubuntu e a construção e execução de uma imagem de contêiner com Podman.

Aqui está um exemplo simples de Dockerfile:

FROM ubuntu:22.04

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

COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh

CMD ["/usr/local/bin/hello.sh"]

Este Dockerfile:

  • Usa a imagem oficial do Ubuntu 22.04
  • Instala o pacote curl
  • Copia hello.sh do host para o contêiner
  • Define hello.sh como o script padrão

Agora, crie um script simples hello.sh:

#!/bin/bash
echo "Hello from a Podman container!"

Dê permissão de execução a ele:

chmod +x hello.sh

Construindo a Imagem com Podman

Uma vez que seus arquivos estejam prontos, construa a imagem com:

podman build -t ubuntu-hello .

A flag -t ubuntu-hello etiqueta sua imagem; o . especifica o diretório de build.

Se bem-sucedido, você verá sua nova imagem listada com:

podman images

Executando e Testando a Imagem

Execute um contêiner a partir de sua nova imagem:

podman run --rm ubuntu-hello

Saída de exemplo:

Hello from a Podman container!

A opção --rm remove automaticamente o contêiner após ele sair, perfeito para testes.

Dica: Acesso Interativo ao Contêiner

Se você quiser trabalhar interativamente dentro do contêiner, use a opção -it para iniciar o Bash:

podman run -it ubuntu-hello bash

Isso lhe dá um ambiente de desenvolvimento Ubuntu leve dentro de seu contêiner.

6. Recursos e Dicas do Podman

Pontos Fortes do Podman: Flexibilidade & Segurança

O Podman fornece maior flexibilidade e segurança aprimorada enquanto permanece compatível com o Docker. Aqui estão alguns recursos úteis e dicas de operação diária.

Operações Seguras com Modo Rootless

Um dos principais pontos fortes do Podman é o modo rootless, que permite que usuários não-root executem, parem e gerenciem contêineres.

Por exemplo, você pode usar o Podman sem sudo:

podman run -it ubuntu bash

As operações são limitadas ao diretório home do usuário, minimizando o risco ao sistema. Isso é especialmente valioso em servidores compartilhados ou em ambientes de desenvolvimento.

Integrando com systemd para Auto-Início

O Podman pode integrar nativamente com o systemd, permitindo que contêineres iniciem automaticamente como serviços Linux.

Gere um arquivo de unidade systemd com:

podman generate systemd --name mycontainer --files --restart-policy=always

Isso cria um arquivo de unidade em ~/.config/systemd/user/. Ative e inicie com:

systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service

Os contêineres agora reiniciarão automaticamente mesmo após a reinicialização do servidor.

Gerenciando Múltiplos Contêineres com podman-compose

Além de operações de contêiner único, o Podman suporta gerenciamento de múltiplos contêineres. Usando podman-compose, você pode gerenciar projetos complexos semelhantes ao Docker Compose.

Instale com pip:

pip install podman-compose

Como é compatível com arquivos docker-compose.yml, a migração de projetos é fácil.

Para iniciar serviços, basta executar:

podman-compose up -d

O Podman permite que você reproduza ambientes de desenvolvimento instantaneamente.

Outros Comandos e Dicas Úteis

Limpeza de Imagens e Contêineres Não Utilizados

podman system prune -a

Remova arquivos e imagens não utilizados para liberar armazenamento.

Conclusão de Shell (bash/zsh)

Instale os scripts de conclusão do Podman para um uso mais fácil da CLI:

sudo apt install podman-docker

Isso habilita a conclusão de comandos, semelhante ao Docker, para o comando podman.

7. Migrando do Docker para o Podman

Por Que a Migração para o Podman Está em Alta

Enquanto o Docker tem sido o padrão de facto para contêineres por muito tempo, o Podman está ganhando popularidade por seu peso mais leve e segurança mais forte. Red Hat Enterprise Linux (RHEL) e Fedora mudaram do Docker para o Podman por padrão, levando muitas equipes a considerar a migração.

Esta seção cobre passos práticos e pontos a considerar para migrar do Docker para o Podman.

Compatibilidade de Comandos: Docker vs. Podman

O Podman é altamente compatível com comandos do Docker, então você pode geralmente substituí-los diretamente:

DockerPodman
docker build -t myapp .podman build -t myapp .
docker run -it myapppodman run -it myapp
docker imagespodman images
docker pspodman ps

Essa compatibilidade perfeita de CLI é uma grande vantagem do Podman.

Alcançando Compatibilidade Total com podman-docker

Se seus scripts ou pipelines de CI/CD usam comandos docker, instalar o pacote podman-docker permite que o Podman sirva como uma substituição direta:

sudo apt install podman-docker

Isso configura o comando docker como um link simbólico para o Podman:

which docker
# → /usr/bin/docker → podman symlink

Você pode então executar scripts do Docker sem modificação.

Alternativa ao Docker Compose: podman-compose

Se você usa Docker Compose para projetos multi-contêiner, podman-compose fornece funcionalidade similar.

É altamente compatível, mas algumas opções do Compose podem diferir (ex. depends_on), e o registro de eventos ou verificações de saúde podem se comportar de forma diferente. Para pilhas básicas de web + DB, a migração é geralmente suave.

Migrando Imagens & Volumes

Imagens Docker locais não são visíveis para o Podman por padrão. Você pode:

Opção 1: Re-puxar com Podman

podman pull ubuntu:22.04

Opção 2: Exportar do Docker → Importar para o Podman

# Export with Docker
docker save myimage > myimage.tar

# Import with Podman
podman load < myimage.tar

Isso torna imagens construídas com Docker disponíveis no Podman.

Outras Considerações

  • Operação sem root: O Docker tipicamente roda como root, enquanto o Podman é projetado para operação sem root por padrão
  • Estrutura de daemon: O Podman é sem daemon, então o gerenciamento de processos difere
  • Locais de armazenamento de logs e dados podem diferir—verifique as configurações durante a migração

8. Perguntas Frequentes (FAQ)

P1. Quais são as principais diferenças entre Podman e Docker?

R1. A maior diferença é que o Podman é “sem daemon” (não requer processo em segundo plano), tornando-o mais leve e seguro. O Podman também suporta modo sem root, permitindo que os usuários gerenciem contêineres sem privilégios elevados. A compatibilidade de CLI é alta, então a maioria dos comandos é a mesma.

P2. Há diferença entre Dockerfile e Containerfile?

R2. Não há diferença funcional. Ambos são arquivos que descrevem como construir contêineres, com sintaxe idêntica. Alguns projetos preferem “Containerfile” como um nome neutro, mas você pode usar qualquer um dos nomes com o Podman.

P3. Posso usar arquivos Docker Compose com o Podman?

R3. O Podman não suporta Docker Compose nativamente, mas você pode usar podman-compose (uma ferramenta Python) para interpretar e executar arquivos docker-compose.yml em um ambiente Podman.

Algumas opções do Compose (depends_on, etc.) podem ter limitações, então teste configurações complexas com antecedência.

P4. O Podman é estável no Ubuntu?

R4. Sim, o Podman roda de forma confiável no Ubuntu 20.04 LTS e versões mais novas. Está disponível nos repositórios oficiais do Ubuntu e pode ser instalado com apt. Para a versão mais recente, você pode usar o PPA oficial.

P5. Há restrições de acesso no modo sem root?

R5. No modo sem root, certas operações privilegiadas e vinculação a portas abaixo de 1024 são restritas. O redirecionamento de porta pode contornar isso. Para a maioria dos casos de uso, o modo sem root é prático e recomendado.

P6. O Podman pode puxar imagens do Docker Hub?

R6. Sim, o Podman pode puxar imagens do Docker Hub por padrão. Às vezes, você pode precisar especificar o caminho completo do registro, ex., docker.io/library/ubuntu:

podman pull docker.io/library/ubuntu

O Podman também suporta registros como Quay.io e GitHub Container Registry.

P7. O Podman é adequado para uso em produção?

A7. Sim, o Podman inclui conceitos de pod compatíveis com Kubernetes e integração com systemd para inicialização automática, tornando‑o adequado para ambientes de produção — especialmente onde é necessária alta segurança. O Podman agora é o padrão no Red Hat Enterprise Linux e no Fedora, com ampla adoção.

侍エンジニア塾