DEV Community

Poveda
Poveda

Posted on

WSL2 + Podman: Uma alternativa ao Docker Desktop

Dia 31/01/2022 o Docker desktop passará a ser pago para empresas com mais de 250 funcionários ou com faturamento a partir de 10 milhões de dólares anuais. Esse comunicado está sendo divulgado desde agosto de 2021 e com ele pensei:

Está na hora de revisitar aqueles links esquecidos no limbo sobre alternativas ao Docker.

Meu objetivo é ter uma solução na parte de execução de containers, eliminando todo o resto da ferramenta do docker que na máquina de desenvolvimento não utilizo. Em minhas pesquisas a ferramenta que mais se encaixa neste cenário é o podman.

Podman is a daemonless container engine for developing, managing, and running OCI Containers on your Linux System. Containers can either be run as root or in rootless mode.
Fonte: https://podman.io/

Lendo a definição do que é o Podman, encontramos o primeiro problema: ele roda somente em Linux e eu uso o Windows. Até existe um instalador para Windows, porém ele é um client para acessar o podman instalado em algum lugar e não a ferramenta em si.

WLS2 + Podman = ❤️

Por sorte e visão da nossa amada e odiada Microsoft, não precisamos mais subir uma VM e realizar toda a configuração necessária para rodar o Linux, podemos usar o WSL2.
No próprio site do podman existe o link do post que ensina como instalar a aplicação no WSL2. Vou seguir este post e acrescentar algumas observações e passos extras que precisei fazer para ter tudo rodando 100%.

Configurando o WLS2

Etapa opcional. Se está tudo certo na parte de configuração do WSL2, pode ir direto para a instalação do Podman.

O primeiro passo é habilitar o WSL no Windows e ativar o WSL2.
Com o WSL2 habilitado e a distro instalada (estou utilizando o Ubuntu 20.04), vamos verificar se a distro esta no formato WSL2 rodando o comando:

wsl --list -v
Enter fullscreen mode Exit fullscreen mode

O resultado será semelhante ao que segue:

  NAME                   STATE           VERSION
* Ubuntu                 Stopped         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2
Enter fullscreen mode Exit fullscreen mode

Caso a versão da distro não esteja na 2, é necessário rodar o próximo comando:

wsl --set-version Ubuntu 2
Enter fullscreen mode Exit fullscreen mode

Instalando o Podman

Com o WSL2 configurado vamos iniciar a instalação do Podman.
O primeiro passo é descobrir qual é o nome e a versão da sua distro. Dentro do shell da distro execute o comando

cat /etc/os-release
Enter fullscreen mode Exit fullscreen mode

Ele deve retornar algo parecido com as informações abaixo:

NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
Enter fullscreen mode Exit fullscreen mode

Alternativamente você pode importar esse arquivo direto para as variáveis de ambiente com o comando:

. /etc/os-release
Enter fullscreen mode Exit fullscreen mode

O comando acima facilitará os próximos passos e por isso vou usá-lo.
O próximo passo é adicionar o repositório do podman na lista de fontes do apt:

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x${NAME}_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
Enter fullscreen mode Exit fullscreen mode

Aqui vale uma explicação de alguns pontos do comando que estamos executando:

  • sudo tee: Pega o valor informado no stdin (nesse caso a instrução anterior) e grava no arquivo de destino informado.

Agora adicionamos uma nova chave ao apt para o repositório que contém o podman:

curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x${NAME}_${VERSION_ID}/Release.key" | sudo apt-key add -
Enter fullscreen mode Exit fullscreen mode

Explicando:

  • curl: Efetua uma chamada http para o endereço informado
  • *sudo apt-key add - *: Adiciona a chave retornada no stdin a lista do apt-key

Feito! Agora basta atualizar a lista do apt:

sudo apt-get update
Enter fullscreen mode Exit fullscreen mode

E instalar o podman:

sudo apt-get install -y podman
Enter fullscreen mode Exit fullscreen mode

Testando

A parte mais legal é ver os containers funcionando. Vamos começar por algo simples:

podman run --rm hello-world
Enter fullscreen mode Exit fullscreen mode

Este exemplo é o mesmo exemplo de hello world do docker porém utilizando o podman

A saída deve ser algo assim:

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
Enter fullscreen mode Exit fullscreen mode

Como próximo teste, vamos buildar uma imagem nova e colocá-la para rodar. Para isso vamos usar o repositório do post que contém um CRUD simples em node.
Uma vez baixado o repositório, vamos buildar a imagem.
Execute o comando abaixo:

podman build -t juridico -f dockerfile.multistaging .
Enter fullscreen mode Exit fullscreen mode

Com a imagem pronta, chegou a hora de executar o container:

 podman run --rm -p 3001:3001 localhost/juridico
Enter fullscreen mode Exit fullscreen mode

Executando o comando curl http://localhost:3001/95069158262525, temos o seguinte resultado:

{
    "numero": "95069158262525",
    "uf_sigla": "PR",
    "cidade": "Mendoza",
    "reu": "Kaitlin Scutter",
    "identidade": "33925502749086",
    "cliente": "Cherlyn Floyed",
    "status": "Ativo"
}
Enter fullscreen mode Exit fullscreen mode

Conclusão e Próximos Passos

O Podman me surpreendeu pela simplicidade de uso e semelhança com os comandos de Docker. Todos os comandos do docker que uso no dia-a-dia podem ser facilmente utilizados no podman. Inclusive o próprio site do podman ensina a criar um alias para docker. Outro ponto admirável é a transparencia no mapeamento das portas do WSL para a máquina host. Não é necessário realizar qualquer configuração adicional é só mapear as portas e pronto.

O próximo passo é colocar o Kubernetes para rodar utilizando o podman como container engine.

Referencias

Top comments (1)

Collapse
 
poveda profile image
Poveda

Algumas pessoas vieram me procurar comentando que estão com o seguinte erro:

Ign:5 download.opensuse.org/repositories... InRelease
Err:6 download.opensuse.org/repositories... Release
Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification. [IP: xxx.xxx.xxx.xxx]
Reading package lists... Done
E: The repository 'download.opensuse.org/repositories... Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.

Para resolver esse problema rode o comando abaixo antes do apt update:

sudo apt-get upgrade -y
Enter fullscreen mode Exit fullscreen mode

Esse comando vai atualizar todos os programas instalados na distro e com isso vai atualizar o certificado expirado.