DevSecOpsARTIGO

Podman, a nova opção para container engine – uma alternativa ao Docker

Docker é surgiu em 2013 e ajudou os devs a trabalharem localmente em suas máquinas e disponibilizar um código em produção. Mas agora, há também o Podman.

Podman, a nova opção para container engine – uma alternativa ao Docker
Imagem: Roberto Sousa

Em todos os âmbitos do mercado de tecnologia existe uma competitividade muito alta, porém existem casos em que determinadas tecnologias ao surgirem dominam o mercado e não existe um concorrente direto disputando espaço de forma igualitária. Esse foi o caso do Git que surgiu e dominou o mercado de versionamento de código-fonte frente às opções da época (CVS, Subversion, Mercurial, entre outros).

E aconteceu algo semelhante ao Docker. Essa incrível ferramenta surgiu em 2013 e ressignificou uma série de atributos no ciclo de desenvolvimento de software desde a forma como um desenvolvedor trabalhar localmente na sua máquina até a forma de disponibilizar um código em produção, tornando-se praticamente um requisito a todo programador.

E ainda quebrou o paradigma do “Na minha máquina funciona”.

Se o Docker é tão bom, por que aprender uma alternativa?

A empresa por trás do Docker, a Docker, Inc. e o próprio Docker estiveram ligadas a fortes decisões que provocaram bastante agitação na comunidade de software no mundo inteiro.

  • Venda da Docker Enterprise para a Mirantis. Entre os acontecimentos, a Docker, Inc., deixa de ter posse do Docker Swarm, ferramenta de orquestração de containers nativa do Docker (para mais detalhes, clique aqui).
  • Restrição de solicitações pull no Docker Hub (para mais detalhes, clique aqui).
  • Kubernetes anuncia que deixará de dar suporte a containers Docker (para mais detalhes, clique aqui).

Todos os acontecimentos (com exceção do terceiro), possuem seu lado positivo e negativo e estão abertos a discussão e pontos de vistos.
E ainda, sobre o anuncio do Kubernetes, não é uma decisão pessoal contra o Docker, e sim uma decisão técnica devido ao Docker não ter se adequado ao CRI (Container Runtime Interface) do Kubernetes.

E de acordo com o próprio Kubernetes, o suporte ao Docker só será removido em uma versão futura (atualmente planejada para a versão 1.22, no final de 2021).

Isso não significa que o Docker está morto. Particularmente, acredito que o Docker se adequará ao CRI do Kubernetes.

O exatamente significa o fim do suporte do Kubernetes ao Docker?

O Kubernetes é o que chamamos de orquestrador de containers extensível. O que significa que o Container Runtime não é dele. É uma interface chamada de CRI – Container Runtime Interface. Isso quer dizer que o Kubernetes não é o responsável pelo build de imagem, pela execução do container em si. Ele orquestra quem o faz.

O Docker, por padrão, não é uma implementação CRI compliant. Com isso, é necessário criar um adapter para usar o runtime de containers do Docker no Kubernetes. Esse adapter chama-se DockerShim.

Logo, não é o Docker que será deprecated, e sim o DockerShim. E você pode entender todos os argumentos no Dockershim Deprecation FAQ, diretamente no blog do Kubernetes.

E assim chegamos ao Podman

Nesse momento de mudanças e definições a respeito do futuro do Docker, concorrentes que não eram tão conhecidos, vão ganhando força como ContainerD, CRI-O e o Podman.

A seguir vamos falar especificamente do Podman.

O Podman (o POD MANager) é uma ferramenta para gerenciar contêineres e imagens, volumes montados nesses contêineres e pods feitos de grupos de contêineres. Totalmente baseada em libpod, uma biblioteca para gerenciamento do ciclo de vida do contêiner que também está contida neste repositório. A biblioteca libpod fornece APIs para gerenciar contêineres, pods, imagens de contêiner e volumes.

Essa incrível ferramenta é um projeto de código aberto que está disponível na maioria das plataformas Linux e reside no GitHub .

Por fim, o Podman fornece um front-end de linha de comando compatível com Docker que pode simplesmente criar um alias para o Docker cli, **alias docker = podman** .

Isso é algo que a sua própria documentação sugere, consulte aqui

Principais diferenças entre Docker e Podman

O Docker possui dois blocos principais: Docker CLI e Docker Daemon.

Docker Daemon: é um processo constante em segundo plano que ajuda a gerenciar imagens Docker, contêineres, redes e volumes de armazenamento. E ainda existe uma API Docker Engine REST para interagir com o daemon Docker, acessada via protocolo HTTP.

Docker CLI é o cliente de linha de comando Docker para interagir com o daemon Docker. Naturalmente o usamos quando executamos qualquer comando Docker.

Devido essa arquitetura o Docker possui alguns problemas:

  • Docker é executado em um único processo (e todos os processos filhos pertencem a este processo), o que pode resultar em um único ponto de falha;
  • Se o Docker Daemon falhar, todos os processos filhos perderão o controle e entrarão no estado órfão;
  • Todas as etapas precisam ser executadas pelo root para as operações do Docker.

Enquanto isso o Podman foi criado sem daemon, ainda assim, é possível desenvolver, gerenciar e executar contêineres OCI em seu sistema Linux. Os contêineres podem ser executados como root ou no modo rootless. Com isso, possui alguns benefícios adicionais como:

  • Interage diretamente com o registro de imagens, contêineres e armazenamento de imagens;
  • O Docker é construído sobre um runtime container chamado runC e usa Daemon, em vez de usar o daemon, o Podman está usando diretamente o runC;
  • Não há necessidade de iniciar ou gerenciar um processo de daemon;
  • Há compatibilidade entre imagens do Podman e do Docker.

Instalando o Podman

O cliente MacOS está disponível por meio do Homebrew:

brew install podman

O cliente Linux/CentOS está disponível por meio do Yum:

sudo yum -y install podman

O cliente remoto mais recente para Windows está disponível nesse link.

Para outras distruições, consulte a documentação do Podman, clicando aqui.

Comandos no Podman

Help

podman -–help

Na versão 2.2.1 do Podman, ao executar o comando acima, obterá a seguinte saída:

Para quem está habituado com os comandos Docker, percebe-se que realmente há bastante semelhança com a CLI do Podman, trazendo praticamente as mesmas opções de comandos, assim podemos simplesmente seguir trabalhando com os comandos que já conhecemos.

Conclusão

Nesse artigo aprendemos sobre o Podman, uma nova opção de container engine.
Entretanto, vale ressaltar que o Docker continua sendo a principal tecnologia quando o assunto é container e possivelmente isso não mudará tão cedo. Mas é válido conhecermos e explorarmos novas opções ao atual favorito do mundo de containers. Afinal, tecnologias podem passar, mas os conceitos são imutáveis.

Desenvolvedor desde os 14 anos. Entusiasta de Arquitetura de Software. Mentor em comunidades, eventos e cursos online. Contribuidor Open Source. Atualmente trabalha como Engenheiro de Software Sênior e Líder Técnico

Ver perfil