The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Usando o Podman com o Quarkus

Podman é um motor de contêineres open source, sem daemon e sem necessidade de privilégios de root, usado para desenvolver, gerenciar e executar contêineres OCI no Linux, Windows e Mac. Pode ser utilizado para suportar a funcionalidade de contêineres e os Dev Services no Quarkus.

Instalando o Podman

A abordagem de instalação do Podman varia dependendo do sistema operacional que você está usando, e os passos necessários também mudam ao longo do tempo, dependendo da versão do Podman. Para Mac e Windows, recomendamos fortemente a instalação através do aplicativo gráfico Podman Desktop. Esta é a opção mais simples, com o menor número de passos, além de adicionar funcionalidades adicionais, como inicialização automática e auxílio na gestão de futuras atualizações. Também existe uma opção apenas com CLI que pode ser utilizada. No entanto, essa configuração requer tarefas manuais adicionais para gerenciar, atualizar e iniciar o ambiente Podman Machine.

O gerenciador de pacotes Homebrew no Mac (brew) não deve ser usado para instalar o Podman pois resulta em uma combinação não verificada de componentes. Isso ocorre porque o Homebrew compartilha dependências entre projetos, além de ter uma verificação limitada dos pedidos de atualização. Por exemplo, houve várias ocasiões em que uma atualização do qemu quebrou no Apple Silicon, impedindo as VMs do Podman de inicializar.

No Linux, o Podman é integrado como parte do sistema operacional e instalado por meio do gerenciador de pacotes do sistema. Assim como no Mac e no Windows, o Podman Desktop também pode ser instalado para complementar a CLI do Podman. Entretanto, no Linux, o Podman Desktop atua como um cliente para a integração nativa do Podman e não gerencia a instalação subjacente do Podman.

See https://podman-desktop.io/downloads/ for the latest version of Podman Desktop.

Além disso, se estiver usando Linux, consulte o Podman documentação de instalação para obter instruções sobre como instalar o Podman em sua distribuição específica no Linux.

Modo de compatibilidade com o Docker

Ao instalar o Podman Desktop no Mac ou Windows, é importante habilitar o modo de compatibilidade com Docker quando solicitado. Isso garantirá que o podman-mac-helper seja configurado em seu nome (normalmente uma ação manual que você seria solicitado a fazer após a inicialização), necessário para suportar /var/run/docker.sock (local privilegiado). Também instalará suporte para o Docker Compose.

Diferenças de plataforma

Embora a interação com contêineres seja em sua maioria idêntica entre Mac, Windows e Linux, existem diferenças entre os ambientes importantes a serem consideradas. Notavelmente, a maneira como os contêineres são executados é diferente, pois "Contêineres são Linux". Mais especificamente, os contêineres contêm binários do userland do Linux com dependência na interface de chamada de sistema do kernel Linux. Portanto, contêineres Linux não podem ser executados nativamente no macOS ou Windows; eles requerem o uso de uma máquina virtual (VM) rodando Linux para hospedá-los. Para sistemas que precisam disso, o Podman inclui um subsistema chamado Podman Machine que é usado para gerenciar esta VM. O Podman Desktop realiza uma configuração interativa guiada desta VM e a lançará automaticamente em seu nome.

Root vs Sem Root

O Podman suporta dois modos de operação: rootful, onde o contêiner é executado como root no host Linux (ou VM no caso de Mac/Windows), e rootless, onde o contêiner é executado sob uma conta de usuário Unix padrão. O último oferece segurança significativamente mais forte, mas alguns contêineres não são capazes de operar sob as restrições aumentadas. Por exemplo, se um contêiner cria novos dispositivos, pontos de montagem de loopback e realiza outras operações altamente restritas, eles devem ser executados como root. Note que isso não deve ser confundido com o valor USER especificado em um Containerfile/Dockerfile, que se refere a como os processos dentro do contêiner se percebem. No modo rootless, processos executados em um contêiner com um USER definido como "root" parecerão ser root entre si, mas devido ao isolamento de namespaces de PID, na verdade estarão sendo executados como uma conta de usuário restrita no sistema host.

Configuração no Windowns e no Mac

Em sistemas que envolvem uma VM gerenciada pelo Podman Machine (Mac e Windows), os clientes de contêineres e os comandos do Podman se comunicam remotamente com um serviço de sistema, seja rootful (com privilégios de root) ou rootless (sem privilégios de root), executado na VM. Qual modo é usado é determinado pela configuração rootful da máquina Podman. Para máxima compatibilidade, o Podman Desktop por padrão habilita o modo rootful para novas instâncias de máquina. Há um impacto limitado na segurança disso, pois a própria VM está sendo executada como um processo de usuário. Isso também pode ser alterado através dos comandos do podman:

podman machine set --rootful=true # or false
podman machine stop
podman machine start

Configuração no Linux

Nos sistemas Linux, é recomendável configurar o acesso do cliente em uma configuração sem privilégio de root usando um serviço systemd de usuário.

Isso pode ser ativado com o seguinte comando:

systemctl --user enable podman.socket --now

Definindo o DOCKER_HOST no Linux

Com a configuração sem privilégios de root no Linux mencionada acima, você precisará configurar clientes, como Quarkus e testcontainers, definindo a variável de ambiente DOCKER_HOST para apontar para o socket de serviço do usuário do podman. O caminho pode ser definido usando uma expressão que consulta o caminho utilizando o comando podman:

export DOCKER_HOST=unix://$(podman info --format '{{.Host.RemoteSocket.Path}}')

Outras configurações do Linux

Nomes curtos de imagens

O Testcontainers e o Quarkus Dev Services também esperam que o serviço de contêiner ao qual fazem solicitações seja não interativo. Caso tenha vários registros configurados na sua configuração do Docker ou do Podman, e ao usar nomes de imagem curtos, o Podman responde com um prompt perguntando qual registro deve ser usado para extrair imagens.

Embora recomendemos que você evite nomes curtos e sempre use nomes totalmente especificados, inclusive no registro, o Testcontainers infelizmente depende de nomes curtos internamente por enquanto. Se estiver usando o Testcontainers, seja diretamente ou por meio do Dev Services, você precisará desativar esse prompt definindo a propriedade de configuração short-name-mode="disabled" do Podman em /etc/containers/registries.conf.

Conteúdo Relacionado