Em primeiro lugar, vamos começar já respondendo a pergunta principal: o que é Podman. Resumindo em uma linha: Podman é um concorrente do famoso e muito utilizado Docker.
Essa ferramenta é um projeto livre e de código-fonte aberto, que tem como objetivo ser utilizado para desenvolver, gerenciar e executar contêineres no GNU/Linux. Em sua concepção o projeto foi encabeçado por profissionais de engenharia Red Hat. No entanto, posteriormente ganhou o apoio da comunidade, seguindo assim desde então.
Vamos conhecer mais sobre Podman neste artigo, acompanhe!
Vantagens
Agora que você já sabe o que é Podman, podemos compreender melhor por qual motivo escolher essa ferramenta. São eles, por exemplo:
- Custo-benefício: com o início da cobrança praticada no licenciamento para o uso do Docker Desktop no Windows, o Podman tem ganhado espaço e, por ser uma ferramenta já consolidada, seu uso acaba sendo uma opção viável;
- Funcionalidades: os comandos via CLI, Command Line Interface, são os mesmos do Docker, desta forma a curva de aprendizado para quem está trocando de ferramenta é muito pequena.
Entendendo contêineres
A principal diferença entre máquinas virtuais (VM ou Virtual Machine) e contêineres está no fato de que as VMs necessitam executar todo o sistema operacional guest, enquanto os contêineres executam apenas algumas bibliotecas e/ou partes necessárias. Sendo que o kernel Linux, por exemplo, é compartilhado com a máquina host.
Outro ponto importante que podemos destacar é que na arquitetura de microsserviços, amplamente utilizada nos dias atuais, o uso de contêineres é algo que se torna parte integrante da solução para que possamos escalar os serviços sob demanda de forma rápida.
Para tanto, utilizar sistemas operacionais GNU/Linux nos fornecem economia no licenciamento, robustez e segurança, adjetivos conquistados ao longo de mais de três décadas, ou seja, faz todo sentido a tecnologia de contêineres estar incrustada neste sistema operacional.
Uso em Windows e MacOS
Mas então não posso ter essa experiência rodando em Windows ou mesmo em MacOS? Pode sim, claro, mas existe uma característica diferenciada quando executamos contêineres nestes sistemas operacionais host.
Em sistemas Windows atuais, a solução de contêineres, tanto Podman quanto Docker, fazem uso do WSL, o Windows Subsystem for Linux, onde muito a grosso modo podemos entender como traduções simultâneas de instruções do kernel Windows para o kernel Linux. Assim, executaremos um sistema operacional GNU/Linux no WSL, que será o host dos nossos contêineres.
Em sistemas operacionais MacOS, o funcionamento é semelhante ao do Windows, porém ao invés de usar o WSL, o MacOS usa uma VM GNU/Linux por debaixo do capô, que passa a ser o host dos nossos contêineres.
Neste artigo, vamos abordar exclusivamente a instalação do Podman no Windows, pois queremos demonstrar a execução de certos detalhes requeridos para este sistema operacional, que não são necessários para o uso em uma máquina executando o GNU/Linux nativamente, além de termos muitas pessoas desenvolvedoras que tem o Windows como sistema operacional principal no uso diário.
Vale lembrar que os comandos para o uso do Podman, tais como baixar imagens, subir e parar contêineres, entre outros, no Windows bem como no MacOS ou mesmo no GNU/Linux, são os mesmos dos aqui apresentados.
Instalação do Podman no Windows
Acompanhe o passo a passo para a instalação:
Passo 1:
Devemos executar a instalação do Microsoft WSL, Windows Subsystem for Linux, que pode ser encontrada diretamente na Windows Store. Dessa forma, siga com a instalação padrão, sem nenhuma ação específica requerida.
Passo 2:
Aproveite e instale o Terminal, novo shell da Microsoft, também encontrado na Windows Store.
Passo 3:
Depois de instalado o WSL e o Windows Terminal, devemos baixar e instalar o Podman. Você pode encontrar o instalador no repositório oficial do projeto no Github, baixe a versão com sufixo “setup.exe”, por exemplo podman-4.4.1-setup.exe.
Passo 4:
Agora execute o arquivo baixado para realizar a instalação do Podman, seguindo a instalação padrão.
Passo 5:
O próximo passo é a criação da máquina GNU/Linux, que será a nossa host para uso do Podman. Abra o terminal Shell e execute:
podman machine init
Passo 6:
Por padrão, o comando acima realizará a instalação da distribuição GNU/Linux Fedora no WSL. Será criada uma chave criptográfica, ao término, você receberá um aviso de sucesso de que podemos iniciar esta máquina para o uso do Podman.
Passo 7:
Temos aqui um passo intermediário e opcional, que é definir que o Podman poderá executar com privilégios de administrador root nesta máquina WSL.
Uma vez que originalmente o Docker foi construído sobre uma arquitetura baseada em daemons – que são processos executando em background e cujo funcionamento dependiam de acesso root – foram incorporados mecanismos para aumentar a segurança tanto do daemon quanto dos contêineres, tais como namespaces do kernel para isolamento, control groups que limitam recursos e capabilities do kernel que no Docker são restritas.
Desde a versão 19.03 da Docker Engine, de forma experimental e então promovida na versão 20.10, o Docker também pode ser executado opcionalmente sem privilégios elevados, desde que respeitados certos requisitos.
Já o Podman, que por outro lado desde sua concepção foi construído de uma forma diferente e não é dependente de daemons, nos dá a oportunidade de executar com privilégios de root ou não. Algo entendido como positivo, por não ter a obrigação de executar com privilégios elevados, o que é visto como um ponto de segurança.
Certo, mas o que isso significa na prática? Significa que executando com privilégios de administrador, poderemos, por exemplo, mapear as portas de acesso restrito às portas de número abaixo de 1024, como a porta 80 (http). Lembrando que este passo é opcional, caso queira executar o Podman com privilégios de administrador, execute:
podman machine set –rootful
Passo 8:
Por fim, devemos subir nossa máquina GNU/Linux, a fim de só então podermos executar os comandos para o gerenciamento dos contêineres. Para subir esta máquina, execute:
podman machine start
O comando contraparte para desligar esta máquina do Podman é:
podman machine stop
Passo 9:
Como relatado no início do artigo, o Podman teve como premissa a baixa curva de aprendizagem no seu uso e, para tanto, segue os mesmos comandos do Docker. Sendo assim, vamos percorrer alguns dos comandos básicos no uso de contêineres.
Vale ressaltar que o objetivo do artigo não é discorrer sobre os comandos para uso de contêineres, mas sim apresentar o Podman como uma alternativa ao Docker.
Vamos iniciar um contêiner com a imagem do nginx, para isso, execute:
podman container run --name mynginx1 -p 80:80 -d docker.io/nginx
Repare que no comando acima, informamos o registry para baixar a imagem (docker.io) seguido do nome da imagem (nginx). Como não informamos a versão, foi utilizada a mais recente imagem do nginx.
Uma boa prática nesse momento é que seja informado o registry, a fim de evitar ambiguidades, já que podemos ter uma lista de registries customizada para a busca das imagens e, sim, o Podman trabalha com os registries do Docker também, como visto no exemplo acima.
Neste comando, é executado automaticamente o pull da imagem, caso ainda não a tenha localmente. Outro ponto a observar é que neste exemplo estamos mapeando a porta 80, abaixo da 1024, portanto é necessária a execução do Podman com privilégios de administrador, como descrito acima.
Passo 10:
Agora para provarmos que o contêiner está sendo executado, podemos abrir um browser e acessar a URL http://locaIh0st e com isso veremos a tela de apresentação padrão do nginx.
Também podemos confirmar que o contêiner está sendo executado pela própria CLI do Podman, execute:
podman container ps
Para conferirmos as imagens que temos localmente, execute:
podman images
Para pararmos a execução de um contêiner utilizamos container stop, execute:
podman container stop mynginx1
Da mesma forma, para iniciarmos a execução de um container pré-existente, utilizamos o comando container start, execute:
podman container start mynginx1
Enfim, os comandos que você executa no Docker, executa da mesma forma no Podman.
Ok, mas e quanto ao docker-compose? Temos também o podman-compose.
Instalação do podman-compose
Para termos o podman-compose, o pré-requisito é ter instalado o Python 3, bem como o PIP, que é o gerenciador de dependências do Python – inclusive, encontramos o Python também na Windows Store. Para a escrita deste artigo utilizamos a versão 3.10 do Python, que já inclui o PIP. Acompanhe o passo a passo:
- Realize a instalação do Python pela Windows Store.
- Tendo o Python e o PIP instalados, a instalação do podman-compose em si é muito simples. Primeiramente é necessário atualizarmos a versão do PIP, para isto execute no Terminal:
pip3 install --upgrade pip
- E agora sim a instalação do podman-compose, execute:
pip3 install podman-compose
- Para utilização do podman-compose, devemos criar o arquivo descritor da estrutura desejada, com o nome compose.yml.
Crie um diretório chamado nginx e entre neste diretório, para isso, execute os comandos:
c:\> mkdir \nginx
c:\> cd \nginx
- Agora neste diretório que acabamos de criar, crie um arquivo texto (pode utilizar o bloco de notas para tal) com o nome compose.yml e copie o conteúdo abaixo para este arquivo:
version: '3.7'
services:
nginx:
image: "docker.io/nginx"
container_name: mynginx2
ports:
- "80:80"
networks:
- podman-network
networks:
podman-network:
driver: bridge
- Então para subirmos o contêiner através do podman-compose, execute:
podman-compose up -d
- De forma semelhante, para pararmos o container com podman-compose, execute:
podman-compose down
Mas e sobre o Docker Desktop que existe para o Windows?
Bem, existe também algo similar para o Podman e este é o Podman Desktop.
O Podman Desktop pode ser baixado diretamente no site oficial do projeto e sua instalação é tão simples como seguir o fluxo de instalação padrão, o famoso next-next-finish. Seu uso também é muito similar ao Docker Desktop, para quem já conhece e usa este software.
Relembre
Quer relembrar Docker? Ou até saber mais sobre ele? Temos um vídeo que pode te ajudar. Assista!
Conclusão
Aqui, apresentamos o que é Podman e como pode ser uma alternativa ao Docker, demonstrando alguns comandos simples para que possamos validar o seu uso, bem como entender que a curva de aprendizado para quem já usa Docker é muito pequena.
Além disso, demonstramos um pouco do podman-compose e falamos sobre a existência do Podman Desktop para os que preferirem a GUI ao CLI, ou mesmo para quem quer usar ambas as interfaces.
Depois de conhecer mais sobre Podman, espero que você dê uma chance à ferramenta, pois tenho certeza que também poderá ser muito útil. Aproveite e conte sua experiência abaixo, vou gostar de saber a sua opinião!
Referências
- Docker, tudo o que você precisa saber | Blog Zup Innovation
- Enhancing application container security and compliance with Podman
- Executando o daemon Docker sem privilégios de root
- O que é Podman?
- Podman Compose
- Podman Desktop
- Podman for Windows
- Podman oficial
- Segurança no Docker
- Um pouco de Docker na prática | Blog Zup Innovation