Podman vs Docker: qual escolher?

Se você está no mundo da virtualização e conteinerização, provavelmente já encontrou o Podman e o Docker e pode estar se perguntando como eles são diferentes um do outro.

Neste post, vamos explorar as diferenças entre Docker e Podman e tentar descobrir qual será a escolha certa para você!

Docker

Docker é uma tecnologia de conteinerização que facilita o gerenciamento de dependências dentro de um projeto em todos os níveis (desenvolvimento e implantação).

Disponível no Linux, Windows e Mac OS, o mecanismo do Docker gira em torno de contêineres e sua orquestração, e é aí que a conteinerização difere da virtualização.

O Docker tem dois blocos de construção principais: Docker CLI e Docker Daemon.

Daemon Docker:

É um processo constante em segundo plano que ajuda a gerenciar imagens, contêineres, redes e volumes de armazenamento do Docker. O Docker usa sua API REST do Docker Engine para interagir com o daemon do Docker, acessado via protocolo HTTP.

Docker CLI:

Crédito da imagem: Redhat

É o cliente de linha de comando do Docker para interagir com o daemon do Docker. É o que você usa quando executa qualquer comando do Docker.

A operação do Docker é baseada no kernel Linux e nas funções deste kernel, como cgroups e namespaces. Essas funções separam os processos para que possam ser executados de forma independente, pois o objetivo dos contêineres é executar vários processos e aplicativos separadamente.

É isso que permite otimizar o uso da infraestrutura sem reduzir o nível de segurança em relação aos sistemas separados.

Todas as ferramentas de contêiner, como o Docker, vêm com um modelo de implantação baseado em imagem. Esse modelo simplifica o compartilhamento de um aplicativo ou conjunto de serviços em vários ambientes.

Além disso, o Docker ajuda a automatizar a implantação de aplicativos em um ambiente de contêiner. Com essas diversas ferramentas, os usuários obtêm acesso total aos aplicativos e podem acelerar a implantação, controlar versões e atribuí-los.

Podman

Podman (o POD MANager) constrói, executa e gerencia contêineres OCI e imagens de contêineres. Ele foi desenvolvido pela Red Hat e originalmente destinado ao Linux 8 corporativo. Ele é usado para gerenciamento de contêineres e atua como o sucessor oficial do Docker.

A Red Hat conseqüentemente descontinuou o suporte para o Docker, mas garantiu que a troca seria fácil para os usuários, já que o Podman é baseado no Docker, embora originalmente fosse apenas uma ferramenta de depuração.

  Como corrigir o loop de inicialização do iPhone a partir do bug do caractere Telugu

Ele gerencia todo o ecossistema de contêineres usando a biblioteca libpod. Como o Podman funciona apenas em plataformas Linux, uma API REST e clientes estão atualmente em desenvolvimento para permitir que os sistemas Mac e Windows chamem o serviço.

No entanto, existe atualmente um cliente remoto baseado em Varlink que funciona em plataformas Mac ou Windows que permite a comunicação remota com um servidor Podman baseado em Linux. A biblioteca libpod oferece suporte a vários métodos para fazer upload de imagens com segurança, incluindo confiança e verificação de imagem.

Ele também oferece suporte a pods para gerenciar grupos de contêineres juntos e vários formatos de imagem, incluindo formatos de imagem OCI e Docker.

Em ambientes muito pequenos e gerenciáveis, o Podman pode até servir como um precursor do Kubernetes. Ele preenche a lacuna entre o gerenciamento singular de instâncias individuais desde os primeiros anos do hype do contêiner e a orquestração moderna com o Kubernetes.

Usuários ambiciosos de contêineres já podem aproveitar o próximo nível com os pods. A construção e operação de um cluster Kubernetes não são mais necessárias. No caso mais simples, pods recém-projetados podem ser testados e aprimorados em operações individuais. Mesmo uma transferência subsequente para o Kubernetes é possível.

O comando podman generate kube fornece os arquivos de configuração correspondentes. Eles servem um a um como entrada para a ferramenta kubectl do Kubernetes.

As versões atuais do Podman podem até mesmo criar arquivos de configuração para o systemd – um prazer para quem usa o onipresente sucessor do init para orquestração de contêineres.

Podman vs Docker: Diferenças

O Docker rapidamente se estabeleceu como o cavalo de batalha para o gerenciamento de contêineres. No entanto, o Docker tem muitas vantagens e, acima de tudo, o repertório crescente de imagens, bem como desvantagens e possíveis riscos de segurança. Além disso, o Docker não é mais suportado como um contêiner para o Kubernetes.

O fato de os contêineres, ao contrário dos sistemas virtuais, não exigirem seu kernel é geralmente visto como uma das grandes vantagens. No entanto, representa um grande risco de segurança com o Docker porque os contêineres do Docker só podem ser executados com privilégios de root.

Ele permite que os processos em execução nos contêineres acessem o kernel com privilégios de root e, assim, ataquem o sistema host.

A primeira distinção é aparente quando você o usa pela primeira vez. Embora o Docker exija que o daemon do Docker seja iniciado primeiro, um contêiner Podman pode ser iniciado diretamente na linha de comando. Portanto, não há processo em segundo plano e o aplicativo só é executado quando necessário.

  10 principais provedores de hospedagem de servidor de colocation para pequenas e médias empresas

Do ponto de vista da segurança, isso é bom porque o Podman é menos vulnerável a ataques se o daemon não precisar ser executado 24 horas por dia, 7 dias por semana, com privilégios de superusuário. O Podman não requer um processo em segundo plano devido à arquitetura, que difere fundamentalmente do Docker.

Enquanto o Docker segue o modelo cliente-servidor, onde o cliente Docker se comunica com o daemon Docker por meio de uma API, o Podman segue o modelo fork-exec. Cada contêiner é executado como um processo filho do Podman.

Um namespace de usuário é criado no primeiro uso quando o Podman é executado com privilégios normais de usuário. No namespace do usuário, o Podman é executado com privilégios de root e tem direitos para montar sistemas de arquivos e criar contêineres.

Conseqüentemente, o contêiner Podman possui apenas os direitos que o usuário executor possui. Usar namespaces de usuário significa que cada usuário pode criar e gerenciar seus próprios contêineres, mas eles não são visíveis para outros usuários e para o superusuário.

Como o Podman é operado independentemente do Docker, os desenvolvedores têm muita margem de manobra e podem atender aos desejos da comunidade. Adições interessantes ao Podman incluem o comando mount/unmount e a integração systemd.

O host pode usar o comando mount/unmount para montar o sistema de arquivos do contêiner, por exemplo, para acessar ou alterar arquivos e depois desmontá-los novamente.

Embora o monitoramento dos contêineres usando o systemd não funcione devido ao daemon no Docker com Podman, os contêineres podem ser iniciados, monitorados e até mesmo reiniciados via systemd.

Além disso, o Podman fornece o comando podman generate systemd, que gera um serviço systemd correspondente para o respectivo contêiner e, assim, libera o usuário da criação dos serviços systemd, o que significa que a integração no sistema host está disponível.

Outra diferença crucial entre o Podman e o Docker é que o último não altera as regras do firewall ou a instalação atual do dnsmasq devido à sua capacidade de criar uma rede interna. Por outro lado, o Docker precisa sobrescrever as regras do firewall para permitir a comunicação entre contêineres.

PodmanDockerArchitecture DaemonDaemon lessServices Management SystemdDocker EngineCompatibilidade com firewallSubstitui regras de firewallRespeita regras de firewallPlataformaSuporte nativo para linuxLinux, Windows e Mac

Quando você deve migrar do Docker para o Podman

Se você estiver implantando contêineres em um ambiente baseado em RHEL, nesse caso, não terá muitas opções, exceto usar o Podman, pois é nativo do RHEL. Você também pode migrar ou escolher o Podman em vez do Docker se tiver pequenas implantações com poucos contêineres.

  Quais configurações de câmera devo usar para fotos de ruas e viagens

No entanto, se você quiser ser mais complexo do que isso, tenha vários contêineres e uma pilha de contêineres coordenados com docker-compose/podman-compose em uma rede. É melhor usar o Docker, pois ele lida com a rede muito melhor.

Da mesma forma, se você está apenas começando a entrar no mundo dos contêineres, nesse caso, o Docker é uma opção melhor, pois é estável, bem estabelecido com documentação adequada e possui uma curva de aprendizado rasa em comparação com o Podman, que ainda carece de estabilidade e não possui documentação bem definida.

Migração de Podman para Docker

Se você estiver na linha de comando, é muito fácil alternar do Docker Engine para o Podman. Na sua forma mais simples, um $ alias faz o comando docker=podman na maioria das vezes funciona.

Obviamente, isso pressupõe que o software apropriado esteja instalado no sistema. No caso do Linux, isso também não é um problema; pacotes de software prontos estão disponíveis para distribuições disponíveis comercialmente.

Windows ou macOS não estão entre os sistemas operacionais suportados. A abordagem de alias funciona porque muitos comandos do Docker têm um equivalente do Podman.

Mas também há exceções, pois alguns comandos do Docker não têm contrapartida no mundo Podman. Da mesma forma, alguns comandos se comportam de maneira diferente no Docker e no universo Podman. No momento, isso afeta apenas o manuseio de volumes que já foram configurados.

A mudança é um pouco mais difícil quando ferramentas gráficas como o Docker Desktop estão em uso. Isso deve afetar particularmente os desenvolvedores que trabalham com Windows ou macOS.

Os usuários do Docker Desktop terão que se acostumar com a linha de comando, e o mesmo se aplica ao Docker Compose. No entanto, existe o projeto podman-compose. Escrito em Python, o software serve como um substituto para o Docker Compose.

Palavras Finais

A substituição do Docker pelo Podman pode ser considerada quase concluída. Para usuários e administradores, a maioria dos aspectos dessa mudança é fácil. Muitos recursos do Docker têm equivalentes idênticos no Podman.

Um benefício real é a falta de um processo de daemon singular e privilégios de root, sem mencionar o uso natural de grupos de contêineres. No entanto, vale ressaltar que o Docker continua sendo a principal tecnologia em relação aos contêineres, mas isso provavelmente mudará no longo prazo.

Você também pode explorar alguns comandos do Docker para gerenciar contêineres.