Containers

O que é um container Linux?

Um container Linux® é um conjunto de processos que são isolados do resto do sistema. Esses processos são executados a partir de uma imagem distinta que fornece todos os arquivos necessários a eles. Por fornecer uma imagem que contém todas as dependências de um aplicativo, o container é portátil e consistente durante todas as etapas desde o desenvolvimento, teste e, por fim, produção.

O que é um container

Por exemplo, imagine que você está desenvolvendo um aplicativo. Você trabalha em um laptop, e o seu ambiente tem uma configuração específica. Outros desenvolvedores podem ter configurações um pouco diferentes. O aplicativo em desenvolvimento baseia-se na sua configuração e depende de arquivos específicos. No entanto, a empresa em que você trabalha possui ambientes de teste e de produção padronizados com uma configuração própria, além de ter conjuntos próprios de arquivos de suporte. Você deseja emular esses ambientes localmente, sem a necessidade de recriar os ambientes do servidor. Então, como fazer o aplicativo funcionar em ambientes diferentes, ser aprovado pela garantia de qualidade e implantá-lo sem muito esforço nem a necessidade de reescrever ou realizar reparos no código? A resposta: containers. O container que contém o aplicativo tem as configurações e os arquivos necessários que você precisa para migrá-lo para os ambientes de desenvolvimento, teste e produção sem maiores problemas. Dessa forma, evita-se o conflito e todos ficam satisfeitos.

Esse foi um exemplo simples. No entanto, é possível usar os containers Linux em diversas situações problemáticas das mais variadas maneiras, sempre que for necessário obter o máximo de portabilidade, configurabilidade e isolamento. Seja qual for o tipo de infraestrutura (on-premise, na cloud ou híbrida), os containers atendem a qualquer demanda.

Mas isso não é o mesmo que virtualização?

Sim e não. Veja uma maneira fácil de distinguir ambos:

  • Com a virtualização, é possível executar muitos sistemas operacionais simultaneamente em um único sistema.
  • Os containers compartilham o mesmo kernel do sistema operacional e isolam os processos do aplicativo do restante do sistema.

virtualização x containers

O que isso significa? Em primeiro lugar, o sistema fica mais pesado quando são executados vários sistemas operacionais em um hipervisor (o software que possibilita a virtualização), em vez de usar containers. Quando a capacidade e os recursos são limitados, é necessário usar aplicativos leves que possam ser implantados densamente. Os containers Linux são executados a partir de um único sistema operacional, compartilhando-o com todos os outros containers. Assim, os aplicativos e serviços permanecem leves e são executados em paralelo com agilidade.


Breve história dos containers

Botão de download da Evolução dos containers

A ideia do que atualmente chamamos de tecnologia de containers surgiu inicialmente em 2000 como o FreeBSD jail, uma tecnologia que permite particionar um sistema FreeBSD em vários subsistemas ou "jails". Os jails foram desenvolvidos como ambientes seguros que podiam ser compartilhados por um administrador de sistemas com vários usuários internos ou externos à empresa. O propósito do jail era a criação de processos em um ambiente modificado por chroot (no qual o acesso ao sistema de arquivos, rede e usuários é virtualizado), que não pudesse escapar ou comprometer o sistema como um todo. A implementação dele era limitada, e os métodos de escape do ambiente em jail foram descobertos com o tempo.

No entanto, esse era um conceito interessante.

Em 2001, Jacques Gélinas deu o primeiro passo para a implementação de ambientes isolados em Linux por meio de seu projeto VServer. Como o próprio Jacques Gélinas definiu, esse foi um esforço para executar “vários servidores Linux de uso geral em uma única caixa com um grau elevado de independência e segurança”. Após essa base ser estabelecida para vários espaços de usuário controlados em Linux, as peças começaram a se encaixar para formar o que o container Linux é hoje.

A praticidade dos containers

Em pouquíssimo tempo, mais tecnologias foram combinadas para tornar essa abordagem isolada uma realidade. Os grupos de controle (cgroups) são uma funcionalidade de kernel que controla e limita o uso de recursos por um processo ou grupo de processos. E o systemd, um sistema de inicialização que configura o espaço do usuário e gerencia processos, é usado pelo cgroups para dar mais controle sobre os processos isolados. Ambas as tecnologias, além de adicionarem um controle geral ao Linux, serviram como estrutura para a separação eficaz de ambientes.

Os avanços em namespaces de usuários representaram a próxima etapa na criação dos containers. Os namespaces de usuários “permitem realizar mapeamentos de usuários e grupos de IDs por espaço de nomes. No contexto dos containers, isso significa que os usuários e grupos podem ter privilégios para realizar determinadas operações dentro de um container, sem ter esses mesmos privilégios fora dele”. Isso assemelha-se ao conceito de jail, mas com a segurança adicional de um isolamento maior dos processos, em vez do uso de um ambiente modificado.

O projeto Linux Containers (LXC) contribuiu com as ferramentas, bibliotecas, associações de linguagens e modelos necessários para esses avanços, o que melhorou a experiência do usuário na utilização de containers.

O Docker entra em cena

Em 2008, o Docker entrou em cena (por meio do dotCloud) com sua tecnologia de container homônima. A tecnologia docker é uma combinação do trabalho do LXC com as ferramentas aprimoradas para desenvolvedores, aumentando, assim, a facilidade da utilização dos containers. O docker, uma tecnologia open source, é atualmente o projeto e o método mais famoso para implantar e gerenciar containers Linux.

Atualmente, a Red Hat e o Docker, além de muitas outras organizações, são membros da Open Container Initiative (OCI), cujo objetivo é padronizar as tecnologias de containers no setor open source.


Padronização e a Open Container Initiative

A Open Container Initiative (OCI), parte da Linux Foundation, foi lançada em 2015 “com o claro intuito de criar formatos e ambiente de tempo de execução de containers dentro dos padrões abertos do setor”. O foco desse projeto é determinar e definir as especificações que, atualmente, são duas: ambiente de execução e imagem.

A Runtime Specification (especificação do ambiente de execução) define padrões abertos para o grupo de sistemas de arquivos, a estrutura dos arquivos de suporte e os artefatos de um container, além de como esse grupo é desempacotado por um ambiente de execução em conformidade. Basicamente, essa especificação existe para garantir que os containers funcionem corretamente e que todos os ativos de suporte estejam disponíveis nos locais certos.

A Image Specification (especificação de imagem) da OCI define como as imagens dos containers devem ser criadas. A criação da imagem resulta em “um manifesto de imagem, uma serialização de sistemas de arquivos e uma configuração da imagem”.

A união dessas especificações é o que define o que uma imagem de container deve ter e as dependências, ambientes, argumentos e outros fatores necessários para que a imagem seja executada corretamente.


Os containers são uma abstração

Os containers Linux são mais um salto evolucionário no desenvolvimento, implantação e gerenciamento de aplicativos. Com as imagens de containers Linux, é possível ter portabilidade e controle de versão. Assim, isso ajuda a garantir que os trabalhos contidos no laptop do desenvolvedor sejam executados corretamente no ambiente de produção.

A execução de um container Linux exige menos recursos do que uma máquina virtual, além de manter o isolamento do aplicativo e ser mais fácil de gerenciar como parte de uma aplicação maior.

O foco dos containers Linux está na capacidade de desenvolver aplicativos com mais rapidez e atender às necessidades da empresa à medida que elas surgem, e não o software usado para realizar esse trabalho. Talvez você acredite que cada container deva conter um único aplicativo inteiro. No entanto, é possível usar os containers para isolar partes de aplicativos ou serviços. Portanto, você pode usar outras tecnologias, como o Kubernetes, para automatizar e orquestrar os aplicativos em containers. Um container hospeda a lógica, o ambiente de execução e as dependências do aplicativo. Por isso, o container pode incluir tudo ou você pode criar um aplicativo composto de vários containers que funcionam como microsserviços.


Containers em ambientes de produção

Adotar os containers é uma excelente maneira de disponibilizar softwares e aplicativos aos clientes com mais rapidez. Isso significa que eles devem ser usados nos ambientes de produção. No entanto, isso representa um risco maior para os processos executados nesses containers.

Felizmente, a Red Hat está pronta para ajudar. A Red Hat tem um longo histórico de colaboração com a comunidade open source, a fim de tornar tecnologias abertas, como os containers, mais seguras, estáveis e confiáveis. Essa é a nossa especialidade. Portanto, também oferecemos suporte para essas tecnologias. Sempre que você precisar, estaremos prontos para ajudar.

Com as tecnologias da Red Hat, você não terá dúvidas na hora de implantar e usar os containers. Seja para criar uma plataforma de desenvolvimento com containers, executar uma infraestrutura de containers no melhor sistema operacional do mercado ou fornecer armazenamento para o grande volume de dados gerados pelos containers, a Red Hat tem a solução perfeita para você.

Você pode fazer muito mais com os containers