Containers

O que é um container Linux?

Um container Linux® é um conjunto de um ou mais processos organizados isoladamente do sistema. Todos os arquivos necessários à execução de tais processos 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 de desenvolvimento, teste e produção. Essas características os tornam uma opção muito mais rápida do que os pipelines de desenvolvimento, que dependem da replicação dos ambientes de teste tradicionais.

O que é um container

Imagine que você esteja desenvolvendo uma aplicação. Você trabalha em um laptop e o seu ambiente tem uma configuração específica. Outros desenvolvedores podem ter configurações um pouco diferentes. A aplicação é baseada nessa configuração e depende de bibliotecas, dependências e arquivos específicos. Ao mesmo tempo, a empresa em que você trabalha possui ambientes de desenvolvimento e de produção padronizados com uma configuração própria, e também possui seus próprios conjuntos de arquivos auxiliares. Você deseja emular esses ambientes localmente, sem a necessidade de recriar os ambientes do servidor. Então, como fazer a aplicação funcionar em ambientes diferentes, passar pelo controle de qualidade e ser implementada de maneira simples, sem dor de cabeça, sem necessidade de reescrever código e sem apelar para o método de tentativa e erro? A resposta é: containers.

O container que abriga a aplicação tem as configurações e as bibliotecas, dependências e arquivos necessários para migrá-la para os ambientes de desenvolvimento, teste e produção, sem os efeitos colaterais indesejados. Na verdade, você deve imaginar o conteúdo de uma imagem de container como uma instalação de uma distribuição do Linux, pois essa imagem é completa, com pacotes RPM, arquivos de configuração e outros elementos. No entanto, é muito mais fácil lidar com uma distribuição de imagem de container do que instalar novas cópias de sistemas operacionais. Fim do conflito, para a felicidade de todos.

Esse é só um dos exemplos, mas com os containers Linux é possível solucionar diversas situações problemáticas das mais variadas maneiras, graças ao máximo de portabilidade, configurabilidade e isolamento. O uso de containers Linux tem como objetivo desenvolver mais rapidamente e atender às necessidades empresariais, conforme elas surgem. Seja qual for o tipo de infraestrutura (on-premise, na cloud ou híbrida), os containers atendem a qualquer demanda. E vale lembrar, escolher a plataforma de container ideal é tão importante quanto os próprios containers.

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

Não exatamente. As duas tecnologias são complementares. Aqui está uma maneira fácil de distinguir entre ambas:

  • Com a virtualização, é possível executar sistemas operacionais (Windows ou Linux) simultaneamente em um único sistema de hardware.
  • Os containers compartilham o mesmo kernel do sistema operacional e isolam os processos da aplicação do restante do sistema. Por exemplo: os sistemas ARM Linux executam containers ARM Linux, os sistemas x86 Linux executam containers x86 Linux e os sistemas x86 Windows executam containers x86 Windows. Os containers Linux são extremamente portáteis, mas devem ser compatíveis com o sistema operacional subjacente.

virtualização x containers

O que isso significa? Para começar, a virtualização usa um hipervisor para emular o hardware, o que permite executar vários sistemas operacionais simultaneamente. Essa não é uma solução tão leve quanto o uso de containers. Quando a capacidade e os recursos são limitados, é necessário usar aplicações leves que possam ser implantadas intensamente. Os containers Linux são executados de maneira nativa no sistema operacional, compartilhando-o com todos os outros containers. Assim, as aplicações e os serviços permanecem leves e são executados em paralelo, com agilidade.

Os containers Linux são mais um salto evolucionário no desenvolvimento, implantação e gerenciamento de aplicações. Com as imagens de containers Linux, é possível ter portabilidade e controle de versão. Isso ajuda a garantir que as tarefas executadas no laptop de um desenvolvedor também serão executadas corretamente no ambiente de produção. Em comparação com as máquinas virtuais, executar containers Linux consome menos recursos, oferece uma interface padrão (início, interrupção, variáveis de ambiente etc.), mantém a aplicação isolada e facilita o gerenciamento dos processos, como parte de uma aplicação maior (vários containers). Além disso, é possível orquestrar as aplicações em vários containers em várias clouds.


Breve história dos containers

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

Embora os containers não tenham se originado no Linux, foi no mundo open source que as melhores ideias foram emprestadas, modificadas e aprimoradas. Foi o que aconteceu com os containers.

A ideia do que atualmente chamamos de tecnologia de containers surgiu inicialmente em 2000 como jails do FreeBSD, uma tecnologia que permite particionar um sistema FreeBSD em vários subsistemas ou “celas”. 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 dos jails 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 hoje é o container Linux.

Os containers se tornam práticos

Em pouquíssimo tempo, mais tecnologias foram combinadas para tornar essa abordagem isolada uma realidade. Os grupos de controle (cgroups) são um recurso 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 kernel representaram a próxima etapa na criação dos containers. Com os namespaces de kernel, absolutamente tudo, desde IDs de processos a nomes de rede, puderam ser virtualizados em um kernel Linux. Um dos avanços mais recentes, os namespaces de usuários “permitem realizar mapeamentos de IDs de usuários e grupos por namespace. 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”. 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 LXC tornou mais fácil para os usuários iniciar containers com uma interface de linha de comando simples.

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 adicionou muitos dos novos conceitos e ferramentas: uma interface de linha de comando simples para executar e criar novas imagens em camadas, um daemon de servidor, uma biblioteca de imagens de container pré-criada e o conceito de servidor de registros. Combinadas, essas tecnologias possibilitaram aos usuários criar novos containers em camadas com rapidez e facilmente compartilhá-los com outras pessoas.

A Red Hat reconheceu o poder da colaboração nesse novo ecossistema e usou a tecnologia subjacente no nosso OpenShift Container Platform. Para afastar o receio de haver um único fornecedor controlando uma tecnologia tão importante, a Docker Inc. contribuiu com muitos dos componentes subjacentes utilizados em projetos open source realizados pela comunidade (o runc faz parte da Open Containers Initiative (OCI) e o containerd foi transferido para o CNCF).

Há três padrões principais que garantem a interoperabilidade das tecnologias de containers: as especificações Image, Distribution e Runtime da OCI. A combinação dessas especificações permite que projetos da comunidade, soluções comerciais e provedores de cloud criem tecnologias de container interoperáveis (por exemplo, numa situação em que você precisa introduzir imagens personalizadas no servidor de registro do provedor de cloud). Atualmente, a Red Hat e o Docker, juntamente com muitas outras organizações, são membros da Open Container Initiative, cujo objetivo é padronizar as tecnologias de containers no setor open source.


E quanto à segurança dos containers?

Os containers são populares, mas será que são seguros? A segurança dos containers é composta por diversos elementos variáveis: é necessário proteger o pipeline de containers e a aplicação, bem como os ambientes de implantação e a infraestrutura. Além disso, é necessário planejar a integração com as ferramentas e políticas de segurança da empresa. Para isso, você precisa de um bom plano. Podemos ajudar.


Podemos ajudar.

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

Com as tecnologias da Red Hat, você estará confiante na hora de implantar e usar os containers. Seja para desenvolver utilizando uma plataforma criada 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ê.

Com os containers, é possível fazer muito mais