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, ser aprovada pela garantia de qualidade e implantá-la sem muito esforço, sem a necessidade de reescrever ou realizar reparos no código? A resposta é: containers.

O container que abriga a aplicação tem as bibliotecas, as dependências e os arquivos necessários para migrá-la por todos os ambientes até a 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. Dessa forma, evita-se o conflito e todos ficam satisfeitos.

Esse é só um dos exemplos mais comuns. 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. O uso de containers Linux tem como objetivo desenvolver mais rapidamente e atender às necessidades empresariais conforme elas surgem. Em alguns casos, como a transmissão de dados em tempo real com o Apache Kafka, os containers são essenciais, pois são a única maneira de dar a escalabilidade que a aplicação necessita. 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 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 densamente. 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. Assim, isso ajuda a garantir que os trabalhos contidos no laptop do desenvolvedor sejam executados 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 diversas 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, é no mundo open source que as melhores ideias são emprestadas, modificadas e aprimoradas. Foi o que aconteceu com os containers.

A ideia do que atualmente chamamos de tecnologia de containers surgiu inicialmente no ano 2000 como jails do FreeBSD, uma tecnologia que permite particionar um sistema FreeBSD em vários subsistemas ou celas (por isso o nome "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.

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 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 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é-criadas e o conceito de servidor de registros. Combinadas, essas tecnologias possibilitaram aos usuários criar novos containers em camadas com rapidez e compartilhá-los facilmente 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, pense em uma situação em que você precisa introduzir imagens personalizadas no servidor de registro do provedor de cloud). Atualmente, a Red Hat e a 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. Nós podemos lhe ajudar.


Nós podemos lhe 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. E por isso também damos suporte a 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ê.

É possível fazer muito mais com os containers