Podman no Ubuntu: Construindo e Executando Contêineres com Dockerfile (Do Iniciante ao Guia Prático)

.## 1. Introdução

目次

A Evolução da Tecnologia de Contêineres e Por Que Ela Importa

Nos últimos anos, a importância da tecnologia de contêineres aumentou rapidamente no desenvolvimento e nas operações de aplicações. Em particular, a capacidade de garantir a reprodutibilidade ao alinhar os ambientes de desenvolvimento e produção tem recebido forte apoio entre os engenheiros.

O Docker tem sido a solução dominante nesse espaço por muito tempo, mas nos últimos anos, o Podman surgiu como uma alternativa poderosa. O Podman oferece uma CLI (Interface de Linha de Comando) quase idêntica à do Docker, ao mesmo tempo em que fornece vantagens chave, como uma arquitetura sem daemon, operação leve e execução sem privilégios de root, sem necessidade de permissões de administrador.

Por que “Podman + Dockerfile + Ubuntu”?

Este artigo explica operações modernas de contêineres no Linux combinando três elementos essenciais: Podman, Dockerfile e Ubuntu.

  • Ubuntu é uma distribuição Linux amplamente utilizada, adequada tanto para iniciantes quanto para usuários avançados,
  • Dockerfile serve como um modelo para construir imagens de contêiner,
  • E o Podman é uma ferramenta de próxima geração que permite uma gestão de contêineres mais flexível e segura.

Com a crescente conscientização sobre segurança, usar Podman com Dockerfile no Ubuntu tornou‑se uma escolha popular tanto para desenvolvedores individuais quanto para ambientes corporativos.

Propósito e Público‑Alvo

O objetivo deste artigo é explicar cuidadosamente como criar Dockerfiles e gerar contêineres práticos usando o Podman no Ubuntu.

Este artigo destina‑se a leitores como:

  • Aqueles com experiência em Docker que estão interessados no Podman
  • Usuários de Ubuntu que desejam gerenciar contêineres com segurança
  • Engenheiros que planejam adotar a tecnologia de contêineres em seu trabalho
  • Iniciantes que desejam experimentar escrever Dockerfiles e construir imagens com o Podman

Além do uso básico, este artigo também aborda dicas de solução de problemas, principais diferenças em relação ao Docker e estratégias de migração.

2. O Que é o Podman?

Visão Geral Básica do Podman

Podman (Gerenciador de Pods) é uma ferramenta de gerenciamento de contêineres de próxima geração desenvolvida pela comunidade liderada pela Red Hat. Assim como o Docker, ele pode construir, executar e gerenciar contêineres compatíveis com OCI (Open Container Initiative), mas sua filosofia de design e arquitetura diferem significativamente.

A característica mais notável é que o Podman não requer um daemon. Isso permite uma operação leve e segura. O Podman também suporta o modo sem privilégios de root, permitindo que usuários regulares gerenciem contêineres sem elevação de privilégios. Sua compatibilidade de CLI com o Docker é muito alta, tornando a migração direta.

Principais Recursos do Podman

Abaixo estão alguns dos principais recursos do Podman:

Arquitetura Sem Daemon

O Podman não depende de um processo daemon em segundo plano para gerenciar contêineres. Isso permite um uso de recursos mais eficiente, sem serviços desnecessários em execução.

Suporte Sem Privilégios (Usuário Não Administrador)

O Podman permite que usuários não‑administradores iniciem e gerenciem contêineres. Isso melhora consideravelmente a segurança em ambientes multi‑usuário ou de servidor e reduz 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

Como resultado, usuários do Docker podem migrar com atrito mínimo.

Funcionalidade de Pod

O Podman incorpora o conceito de “Pod” do Kubernetes, permitindo que vários contêineres sejam gerenciados como uma única unidade lógica. Isso torna o Podman altamente compatível com o Kubernetes e possibilita transições suaves do desenvolvimento local para ambientes de nuvem.

Compatibilidade com Ubuntu

Embora o Podman seja amplamente adotado em distribuições Fedora e baseadas no RHEL, ele também funciona de forma estável no Ubuntu. Pode ser instalado a partir dos repositórios oficiais com configuração relativamente simples. Desde o Ubuntu 20.04 LTS, o suporte ao pacote melhorou significativamente, reduzindo a barreira de entrada.

3. Instalando o Podman no Ubuntu

Antes de Começar: Pré‑requisitos

Antes de instalar o Podman no Ubuntu, verifique primeiro a sua versão do Ubuntu. O Podman é oficialmente recomendado para Ubuntu 20.04 LTS ou posterior. Em versões mais antigas, os pacotes necessários podem não estar disponíveis nos repositórios oficiais.

Você pode verificar a versão do Ubuntu usando o seguinte comando:

lsb_release -a

Instalar o Podman requer privilégios sudo. Mesmo que você pretenda usar o Podman no modo rootless, privilégios de administrador ainda são necessários durante a instalação.

Instalando o Podman a partir do Repositório Oficial do Ubuntu

Em versões recentes do Ubuntu, como 20.04 ou 22.04, o Podman pode ser instalado facilmente usando o APT.

sudo apt update
sudo apt install -y podman

Após a instalação, verifique se o Podman foi instalado corretamente checando a versão:

podman --version

Instalando a Versão Mais Recente Usando o PPA Oficial

A versão do Podman incluída no repositório padrão do Ubuntu costuma estar um pouco desatualizada. Se você quiser usar os recursos mais recentes, pode instalar o Podman a partir do 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

Esse método permite que você use as versões mais recentes do Podman equivalentes às disponíveis no Red Hat e no Fedora.

Teste Básico de Funcionalidade do Podman

Após a instalação, execute um teste simples para confirmar que o Podman funciona corretamente:

podman info

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

Você também pode testar a execução de contêineres rodando uma imagem oficial do Alpine Linux:

podman run --rm -it alpine sh

Se o shell iniciar com sucesso, o Podman está funcionando corretamente.

4. Conceitos Básicos de Dockerfile e Uso com Podman

O que é um Dockerfile?

Um Dockerfile é um plano usado para construir imagens de contêiner. É um arquivo de texto que define instruções como a imagem base a ser usada, quais pacotes instalar e quais arquivos copiar.

Com base nesse arquivo, ferramentas de contêiner como Podman e Docker podem construir automaticamente um ambiente consistente.

Instruções comuns de Dockerfile incluem:

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"]

Este exemplo instala pacotes em uma imagem base Ubuntu, copia um script e define o comando de execução padrão.

Usando Dockerfile com Podman

O Podman pode construir imagens de contêiner a partir de Dockerfiles da mesma forma que o Docker.

1. Preparando o Diretório do Projeto

Crie a seguinte estrutura de diretórios:

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

O arquivo app.sh pode conter um script simples:

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

Torne o script executável:

chmod +x app.sh

2. Construindo a Imagem com Podman

Execute o comando a seguir no diretório que contém o Dockerfile:

podman build -t mypodmanapp .

Isso cria uma imagem de contêiner chamada mypodmanapp.

3. Verificando a Imagem Construída

Você pode listar as imagens disponíveis com:

podman images

4. Executando o Contêiner

Inicie um contêiner usando a imagem construída:

podman run --rm mypodmanapp

Se configurado corretamente, a saída Hello from Podman container! será exibida.

Dockerfile vs Containerfile

No Podman, arquivos que utilizam a sintaxe Dockerfile também podem ser chamados de Containerfile. Essa nomenclatura reflete o desejo de uma terminologia independente do Docker.

Não há diferença funcional entre Dockerfile e Containerfile. Ambos são totalmente suportados pelo Podman.

podman build -f Containerfile -t myimage .

Você pode especificar o nome do arquivo explicitamente usando a opção -f.

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

Criando um Dockerfile Baseado em Ubuntu

A partir daqui, vamos percorrer um exemplo prático, passo a passo, de criar um Dockerfile baseado em Ubuntu e construir e executar uma imagem de contêiner usando o Podman.

Primeiro, crie o seguinte Dockerfile simples:

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 realiza as seguintes ações:

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

Em seguida, crie um script shell simples chamado hello.sh:

#!/bin/bash
echo "Hello, this output is from a Podman container!"

Conceda permissões de execução ao script:

chmod +x hello.sh

Construindo a Imagem com Podman

Uma vez que os arquivos estejam prontos, construa a imagem usando o comando a seguir:

podman build -t ubuntu-hello .

A opção -t ubuntu-hello atribui um nome de tag à imagem, e o . final especifica o diretório que contém o Dockerfile.

Se a construção for concluída com sucesso, a imagem será armazenada localmente.

podman images

Você pode usar este comando para verificar que a imagem foi criada.

Executando e Verificando a Imagem Construída

Execute um contêiner a partir da imagem recém-construída usando o comando a seguir:

podman run --rm ubuntu-hello

Exemplo de saída:

Hello, this output is from a Podman container!

A opção --rm remove automaticamente o contêiner após a execução, tornando-a ideal para fins de teste.

Opcional: Executando um Contêiner Interativo

Se você quiser interagir diretamente com o contêiner, pode inici‑lo com a opção -it e lançar o Bash:

podman run -it ubuntu-hello bash

Isso permite que você use o contêiner como um ambiente de desenvolvimento leve baseado em Ubuntu.

6. Recursos Úteis do Podman e Dicas

Pontos Fortes do Podman: Flexibilidade e Segurança

Mantendo a compatibilidade com Docker, o Podman oferece recursos que permitem operações de contêiner mais flexíveis e seguras. Esta seção apresenta recursos práticos e dicas que são especialmente úteis no dia a dia.

Operação Segura com Modo Rootless

Um dos recursos mais poderosos do Podman é o modo rootless, que permite que usuários comuns iniciem, parem e gerenciem contêineres sem privilégios de administrador.

Você pode executar contêineres sem sudo como mostrado abaixo:

podman run -it ubuntu bash

Como esta operação está confinada ao diretório home do usuário, o impacto em todo o sistema é minimizado. O modo rootless é particularmente útil em servidores compartilhados e ambientes de desenvolvimento.

Inicialização Automática com Integração systemd

O Podman suporta integração nativa com systemd, permitindo que contêineres sejam executados automaticamente como serviços Linux.

Você pode gerar uma unidade de serviço systemd para um contêiner usando o comando a seguir:

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

Este comando cria arquivos de unidade em ~/.config/systemd/user/. Após a geração, habilite e inicie o serviço da seguinte forma:

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

answer.Esta configuração garante que os contêineres iniciem automaticamente quando o sistema for inicializado.

Gerenciando Vários Contêineres com podman‑compose

Além de gerenciar contêineres individuais, o Podman oferece suporte à orquestração de múltiplos contêineres. Usando o podman‑compose, você pode obter funcionalidade semelhante ao Docker Compose.

Instale o podman‑compose via pip:

pip install podman-compose

Como ele é amplamente compatível com arquivos docker-compose.yml, você costuma reutilizar configurações existentes.

Iniciar serviços é tão simples quanto executar:

podman-compose up -d

Isso permite que você reproduza ambientes de desenvolvimento completos instantaneamente, mesmo ao usar o Podman.

Comandos Úteis Adicionais e Dicas

Limpeza de Imagens e Contêineres Não Utilizados

podman system prune -a

Esse comando remove contêineres, imagens e arquivos temporários não utilizados, ajudando a manter seu armazenamento limpo.

Habilitando Autocompletar de Comandos (bash/zsh)

Você pode instalar o suporte a autocompletar de comandos com o seguinte pacote:

sudo apt install podman-docker

Isso habilita o autocompletar semelhante ao Docker para o Podman, aumentando a produtividade.

7. Guia de Migração: Do Docker para o Podman

Por que a Migração para o Podman Está Ganhando Atenção

O Docker foi, por muito tempo, sinônimo de tecnologia de contêineres, mas nos últimos anos, uma mudança em direção ao Podman como uma alternativa mais leve e segura tem ganhado força. Em particular, o Red Hat Enterprise Linux (RHEL) e o Fedora reduziram o suporte ao Docker e adotaram o Podman como o mecanismo de contêiner padrão, levando muitas organizações a considerar a migração.

Esta seção explica passos práticos e considerações importantes para migrar suavemente do Docker para o Podman.

Compatibilidade de Comandos entre Docker e Podman

O Podman mantém um alto nível de compatibilidade de CLI com o Docker, permitindo que a maioria dos comandos seja substituída diretamente sem modificações.

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

Isso torna possível trocar para o Podman sem mudar seu fluxo de trabalho, que é uma das maiores vantagens.

Obtendo Compatibilidade Total com podman‑docker

Se scripts, pipelines CI/CD ou ferramentas existentes assumem a presença do comando docker, você pode instalar o pacote podman-docker para fazer o Podman agir como um substituto direto.

sudo apt install podman-docker

Após a instalação, o comando docker torna‑se um link simbólico para o Podman:

which docker
# → /usr/bin/docker → symbolic link to podman

Isso permite que scripts baseados em Docker existentes sejam executados no Podman sem modificações.

Substituindo docker‑compose por podman‑compose

Para projetos que utilizam Docker Compose para definir ambientes de múltiplos contêineres, o podman‑compose oferece uma alternativa compatível.

Embora a compatibilidade seja geralmente alta, observe as seguintes limitações:

  • Algumas opções do Compose (como depends_on) podem não ser suportadas ou se comportar de forma diferente
  • Podem existir diferenças no registro de eventos e no comportamento de verificações de saúde

Para configurações típicas, como a combinação de servidor web e banco de dados, a migração costuma ser direta.

Migrando Imagens e Volumes

Imagens Docker armazenadas localmente não podem ser acessadas diretamente pelo Podman. É necessário rebaixá‑las ou exportá‑las e importá‑las.

Opção 1: Rebaixar Imagens com o Podman

podman pull ubuntu:22.04

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

# Export from Docker
docker save myimage > myimage.tar

# Import into Podman
podman load < myimage.tar

Isso permite que imagens construídas com Docker sejam reutilizadas no Podman.

Considerações Adicionais para a Migração

  • Diferenças de operação sem root: o Docker normalmente assume uso de root, enquanto o Podman foi projetado para operação sem root
  • Arquitetura sem daemon: o Podman não possui daemon, alterando a forma como processos em segundo plano são gerenciados
  • Locais de armazenamento de logs e dados diferem e devem ser revisados durante a migração

8. Perguntas Frequentes (FAQ)

Q1. Qual é a principal diferença entre Podman e Docker?

A1. A diferença mais significativa é que o Podman opera sem um daemon. Isso permite uma operação mais leve e segura. O Podman também suporta o modo rootless, permitindo o gerenciamento de contêineres sem escalonamento de privilégios. A compatibilidade de CLI com o Docker é muito alta.

Q2. Qual é a diferença entre Dockerfile e Containerfile?

A2. Não há diferença funcional alguma. Ambos os arquivos descrevem instruções de construção de contêineres usando a mesma sintaxe.
O nome Containerfile é preferido em projetos compatíveis com OCI para evitar terminologia específica do Docker. Na prática, o Dockerfile funciona perfeitamente com o Podman.

Q3. O Docker Compose pode ser usado com o Podman?

A3. O Docker Compose não é suportado diretamente, mas você pode usar o podman-compose como alternativa. Ele interpreta arquivos docker-compose.yml em um ambiente Podman.

Algumas opções, como depends_on, são limitadas, por isso é recomendado testar em configurações complexas.

Q4. O Podman executa de forma estável no Ubuntu?

A4. Sim. O Podman executa de forma estável no Ubuntu 20.04 LTS e posterior. Ele está disponível nos repositórios oficiais do Ubuntu e pode ser instalado facilmente usando apt. Para versões mais recentes, usar um PPA também é uma opção.

Q5. Há limitações ao usar o modo rootless?

A5. O modo rootless restringe certas operações privilegiadas e a vinculação a portas abaixo de 1024. No entanto, essas limitações podem ser contornadas frequentemente usando redirecionamento de portas. Para a maioria dos casos de uso, o modo rootless é totalmente prático.

Q6. O Podman pode puxar as mesmas imagens do Docker Hub?

A6. Sim. O Podman pode puxar imagens do Docker Hub por padrão. Em alguns ambientes, você pode precisar especificar explicitamente o registro e o namespace:

podman pull docker.io/library/ubuntu

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

Q7. O Podman é adequado para ambientes de produção?

A7. Sim. O Podman inclui recursos necessários para uso em produção, como conceitos de pod compatíveis com Kubernetes e integração com systemd. Em ambientes sensíveis à segurança, o Podman pode ser uma escolha melhor que o Docker.

O Podman já é o mecanismo de contêiner padrão no RHEL e Fedora e tem ampla adoção em produção.

侍エンジニア塾