Using Podman with Quarkus

Podman é um mecanismo de contêiner sem daemon e sem root para desenvolver, gerenciar e executar contêineres OCI no seu sistema Linux ou em outro sistema operacional. Se você estiver usando o Podman com o Quarkus, será necessária uma configuração única, mas, uma vez concluída, você poderá aproveitar todos os recursos do Quarkus.

Instalando o Podman

macOS

Contêineres são realmente Linux. Dessa forma, os contêineres do Linux não podem ser executados nativamente no macOS ou no Windows. Portanto, os contêineres devem ser executados em uma máquina virtual (VM) Linux, e um cliente Podman interage com essa VM. Um subsistema de hipervisor nativo e um software de virtualização são usados para executar a VM do Linux no sistema operacional e, em seguida, os contêineres são executados nessa VM. No Podman, isso é conhecido como máquina Podman e está integrado à ferramenta.

usuários do macOS podem instalar o Podman por meio do Homebrew. Depois de configurar brew , você pode usar o comando brew install para instalar o Podman e docker-compose:

brew install podman
brew install docker-compose
podman machine init -v $HOME:$HOME
sudo /opt/homebrew/Cellar/podman/4.0.3/bin/podman-mac-helper install
podman machine set --rootful
podman machine start
alias docker='podman'

Se você estiver utilizando o Podman 4.1 ou superior, não precisa montar o volume -v $HOME:$HOME.

Se você estiver utilizando o Mac M1, é necessário um passo adicional para fazer as imagens AMD64 funcionarem:

podman machine ssh
sudo -i
rpm-ostree install qemu-user-static
systemctl reboot

Assim que a máquina virtual reiniciar, você deverá estar pronto para executar os dev services.

Para mais informações, consultar

Windows

Consulte o guia do Podman para Windows para obter instruções de configuração e utilização.

Antes de iniciar a máquina Podman, configure-a para preferir a execução de contêineres com root:

podman machine set --rootful

Esta ação só precisa ser executada uma vez.

Linux

The Podman package is available in several Linux distributions. Podman can be used the same way as Docker with the podman-docker package. To install it for your OS, please refer to the Podman installation guide. Below is the short installation instruction for popular Linux distributions:

Fedora

sudo dnf install podman podman-docker docker-compose

Ubuntu (21.04 and later)

sudo apt install podman podman-docker docker-compose

Definindo o DOCKER_HOST no Linux

Podman supports two modes of operation: rootful, in which case the container runs as root on the host system, and rootless, where the container runs under a standard Unix user account. On Linux, the REST API Unix socket is, by default, restricted to only allow the root user to access it. This prevents someone from using a container to achieve a privilege escalation on the system. While these restrictions can be softened to allow a special group instead of just root, the recommended approach is to use rootless Podman on Linux. To use rootless Podman, you need to set a DOCKER_HOST environment variable to point to the user-specific socket. In both cases, you need to start the REST API by enabling the Podman socket service through systemd.

# Enable the podman socket with Docker REST API (only needs to be done once)
systemctl --user enable podman.socket --now

Em seguida, você pode obter o caminho do soquete com o seguinte comando:

$ podman info | grep -A2 'remoteSocket'

remoteSocket:
  exists: true
  path: /path/to/podman.sock

A definição da variável de ambiente DOCKER_HOST deve ser efetuada sempre ou adicionada ao perfil:

export DOCKER_HOST=unix:///path/to/podman.sock (1)
1 Substitua /path/to/podman.sock pelo caminho que obteve anteriormente.

Para uma explicação mais detalhada, consulte este artigo do blog.

Após a instalação

Privilégios dos Testcontainers

Edite ~/.testcontainers.properties e adicione a seguinte linha

ryuk.container.privileged=true

Alternativamente, você pode desativar o ryuk:

export TESTCONTAINERS_RYUK_DISABLED=true #not recommended - see above!

Isso tem a desvantagem de desativar a limpeza de contêineres , de modo que você pode encontrar contêineres obsoletos por aí. Isso pode ser um problema se você estiver executando testes automatizados.

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.