A história dos containers Linux

A tecnologia envolvida em containers, mais especificamente para sistemas operacionais Linux, tem recebido constante melhorias. Nos últimos dois anos, ocorreram mudanças significativas que afetaram e continuam afetando a maneira como os containers são adotados. Mas afinal de contas, o que são containers?

Um container Linux é um conjunto de um ou mais processos organizados isoladamente do sistema. Todos os arquivos necessários para executá-los são fornecidos por uma imagem distinta. Na prática, os containers Linux são portáteis e consistentes durante toda a migração entre os ambientes, sejam eles desenvolvimento, teste e produção.

Há alguns anos, a infraestrutura de TI era criada com aplicações desenvolvidas diretamente sobre máquinas virtuais. Ou, em alguns casos, em máquinas físicas, dependendo de quão legada era a aplicação. À medida que a infraestrutura evoluiu, as máquinas virtuais passaram a permitir níveis mais altos de gerência e centralização do ambiente.

As VMs por si só não atendem completamente às necessidades de uma abordagem ágil de desenvolvimento em se tratando de portabilidade. Nesse caso, os containers ganham espaço, já que fornecem um modo de virtualizar o sistema operacional para executar várias cargas de trabalho em uma única instância do sistema. Apesar de ambos serem técnicas de virtualização, em muitos cenários possuem um espaço próprio e podem coexistir no mesmo ecossistema.

Uma volta ao passado

Containers não são uma tecnologia relativamente nova, então, convido vocês a darem uma volta comigo ao passado para entenderem como essa tecnologia surgiu até chegar nos dias atuais.

1979: Unix V7

Durante o desenvolvimento do Unix V7 em 1979, a chamada de sistema chroot foi introduzida, alterando o diretório raiz de um processo e seus filhos para um novo local no sistema de arquivos. Esse avanço foi o início do isolamento do processo, segregando o acesso aos arquivos para cada processo. O chroot foi adicionado ao BSD em 1982.

2000: FreeBSD Jails

No início dos anos 2000, com a aparição do FreeBSD Jails a tecnologia de containers começou a ganhar forma pois permitia aos sysadmins dividir um sistema operacional FreeBSD em vários sistemas menores e independentes conhecido como “jails” (jaulas), com a capacidade de atribuir um endereço IP para cada sub-sistema.

2001: Linux VServer

Assim como no FreeBSD Jails, o Linux VServer utiliza de um mecanismo de “prisão” que pode particionar recursos (sistema de arquivos, endereços de rede, memória) em um sistema operacional. Introduzida em 2001, esse tipo de virtualização foi implementado através do patch do kernel do Linux.

2004: Solaris Containers

Em 2004, a Oracle lança a primeira versão beta pública do Solaris Containers, combinando controles de recursos do sistema e separação de limites fornecidos por zonas, que eram capazes de aproveitar recursos como instantâneos e clonagem do ZFS.

2005: Open VZ (Open Virtuozzo)

Open VZ é uma tecnologia de virtualização em nível de sistema operacional para Linux que usa um kernel Linux corrigido para virtualização, isolamento, gerenciamento de recursos e pontos de verificação. O código não foi lançado como parte do kernel oficial do Linux.

2006: Process Containers

Process Containers (lançado pelo Google em 2006) foi projetado para limitar, contabilizar e isolar o uso de recursos de uma árvore de processos. Ele foi renomeado para “Control groups (cgroups)” um ano depois e, eventualmente, se fundiu ao kernel do Linux na versão 2.6.24.

2008: LXC

LXC (Linux Containers) foi a primeira e mais completa implementação para gerenciamento de containers Linux. Ele foi implementado em 2008 utilizando de cgroups e namespaces e funciona em um único kernel Linux sem a necessidade de patches.

2011: Warden

A CloudFoundry iniciou o Warden em 2011, usando o LXC nos estágios iniciais e, posteriormente, substituindo-o por sua própria implementação. O Warden conseguia isolar ambientes em qualquer sistema operacional, rodando como um daemon e fornecendo uma API para gerenciamento de containers. Inclui um serviço para gerenciar cgroups, namespaces e o ciclo de vida do processo.

2013: LMCTFY

Let Me Contain That For You (LMCTFY) surgiu em 2013 como uma versão open-source da stack de containers do Google. Sua implantação foi interrompida em 2015 depois que o Google começou a contribuir com os principais conceitos do LMCTFY para o libcontainer, que agora faz parte da Open Container Initiative.

2013: Docker

Quando o Docker surgiu em 2013, os containers explodiram em popularidade. Não é por acaso que o crescimento do Docker e o uso de containers caminham lado a lado. Assim como o Warden fez, o Docker também usou o LXC em seus estágios iniciais e, mais tarde, substituiu esse gerenciador de container por sua própria biblioteca.

No próximo post, vamos entender mais sobre a história do Docker.