Foi publicada uma comparação de imagens de container Linux, onde são abordadas as melhores práticas na escolha de uma imagem. Arquitetura, segurança e desempenho são alguns requisitos, enquanto usuários comerciais procuram também por opções de suporte.
Um container Linux permite o gerenciamento de espaços do kernel, componentes e usuários de maneira separada, através da utilização de cgroups e namespaces, que são mecanismos de isolamento de recursos e processos. Sistemas Operacionais como Solaris e BSD também possuem abstrações semelhantes aos containers Linux, mas o foco deste artigo é apenas em containers Linux.
O host que está executando o container possui o kernel do Sistema Operacional e um conjunto de bibliotecas e ferramentas necessárias para executar containers. A imagem do container, por outro lado, possui bibliotecas e interpretadores necessários para executar a aplicação que está sendo distribuída no container, os quais dependem de bibliotecas de sistemas subjacentes. Isso também é válido para as linguagens interpretadas, pois os próprios interpretadores estão escritos em linguagens de baixo nível.
O tamanho do espaço em disco de várias imagens de container varia de 230 MB para o Fedora até 4 MB para o Alpine Linux. O tamanho, no entanto, não é a única consideração que deve ser dada ao escolher uma distribuição. Os principais grupos são Debian / Ubuntu, RHEL, Centos, Fedora e Alpine.
As vulnerabilidades de segurança em containers têm sido objeto de vários relatórios. As imagens públicas de containers Debian no DockerHub têm a menor quantidade de vulnerabilidades, de acordo com um estudo recente, enquanto as imagens do Ubuntu possuem o máximo. O espaço de amostra deste estudo foi limitado às imagens públicas do Docker. Ferramentas de código aberto, como Clair e Vuls, e comerciais, como o Twistlock, oferecem diferentes recursos e graus de proteção. A maioria dos fornecedores possuem testes automatizados para vulnerabilidades conhecidas na distribuição, bem como para software padrão, como servidores web e bancos de dados. Existem esforços conhecidos para minimização de vulnerabilidades de contêineres, (slides 7-9) que afetam a comunicação do host com os containers, e também o contrário.
Os formatos de pacotes e as principais bibliotecas como o glibc afetam a segurança e o desempenho do container. Bibliotecas maduras como o glibc e o gcc tornaram-se robustas ao longo de muitos anos de uso e possuem uma grande comunidade de usuários, sendo a principal razão para que as imagens de container utilizem-nas. Entretanto, algumas distribuições como Alpine permaneceram com alternativas que levaram a problemas.
Para além destes três critérios, os clientes empresariais também procuram se informar sobre o ciclo de vida e as opções de suporte. RHEL e Ubuntu possuem opções de suporte comercial através de fóruns da comunidade disponíveis para todos os gostos. O Ubuntu e RHEL lideram em termos de duração do ciclo de vida - o período de tempo para o qual uma versão é suportada em termos de correções de bugs, correções de backport, recursos e suporte.
A conclusão é que escolher uma imagem de container é semelhante à escolha de uma distribuição Linux. As imagens "desconstruidas" oferecem um subproduto interessante sobre este tópico. As imagens desconstruídas são imagens apenas da aplicação e de suas dependências em tempo de execução. Elas não contêm nenhum programa como shells e gerenciadores de pacotes geralmente encontrados em uma distribuição Linux.