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
-
artigo sobre a execução do Podman no Mac
-
outro artigo, com boas orientações sobre
--rootfule montagem de volumes -
artigo sobre a execução de imagens AMD64 com o Podman no Mac M1
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:
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.