O que é um contêiner?

Saiba o que são contêineres e a diferença entre plataformas de contêiner populares.

Sten Pittet Sten Pittet

Um contêiner é um pacote de software que inclui todas as dependências: código, tempo de execução, configuração e bibliotecas de sistema para que ele possa ser executado em qualquer sistema host. No tempo de execução, o contêiner também recebe sua própria fatia isolada de recursos do sistema operacional, como CPU, RAM, disco e rede.

Um diagrama mostrando como os contêineres são estruturados

Por que você precisa de contêineres?

Os contêineres são extremamente úteis para dimensionar a eficiência de DevOps em várias bases de código e número de funcionários desenvolvedores. Os contêineres ajudam a dimensionar com o número de funcionários desenvolvedores, garantindo que o código em contêiner funcione consistentemente em qualquer máquina em que o contêiner seja implementado. Os desenvolvedores recém-contratados podem obter um contêiner do aplicativo em que vão trabalhar e vão ficar em dia na hora para iniciar o desenvolvimento.

Vários cenários de base de código, como uma arquitetura de microsserviço, se beneficiam de contêineres, mantendo cada microsserviço portátil e isolado em um contêiner. Os contêineres de microsserviço em conjunto com uma robusta plataforma de gerenciamento de contêineres facilitam muito o gerenciamento e a orquestração de cluster. Essa combinação habilita recursos de escalabilidade dinâmica que se adaptam ao aumento do tráfego ou carga em um aplicativo.

Como eles funcionam?

Para primeiro entender os contêineres, devemos discutir a virtualização. A virtualização é o ato de dividir recursos computacionais compartilhados: CPU, RAM, disco e rede em recursos isolados que não têm conhecimento do escopo compartilhado original. Ao virtualizar uma máquina usando máquinas virtuais (VMs) ou contêineres, os recursos da máquina host são essencialmente fatiados para que os componentes virtualizados os usem.

Os contêineres virtualizam um sistema operacional de máquinas no nível de espaço do usuário. A virtualização do espaço do usuário aproveita os mecanismos existentes que dividem os recursos do sistema entre contas de usuário e programas separados em um sistema operacional.

Os sistemas de contêiner costumam ter um comando do utilitário de orquestração separado ou um daemon de servidor. Os membros da equipe de DevOps vão usar a interface com o utilitário de orquestração para criar e gerenciar os contêineres individuais. O utilitário de orquestração é responsável por dividir os recursos de espaço do usuário dos sistemas operacionais host, alocar esses recursos para contêineres e, em seguida, executar e monitorar os contêineres.

Casos de uso

Os contêineres resolvem uma das causas clássicas de falha na distribuição de software: “não funciona na minha máquina”. Neste cenário infeliz, o código do aplicativo se comporta como esperado em uma máquina, mas quando executado em outra, ele falha. Em geral, esse problema ocorre por causa de diferenças sutis entre as duas máquinas. Essas diferenças podem ser versões de dependência incompatíveis ou outras discrepâncias de configuração. Os contêineres resolvem essa questão criando um pacote repetível estático de tudo o que o código do aplicativo precisa executar.

Contêineres vs. VMs

Contêineres e VMs são muito semelhantes em seus objetivos. Ambos ajudam a distribuir software de aplicativos em um pacote isolado repetível. Onde eles diferem é no quanto da pilha de hardware eles tentam virtualizar. As VM simulam toda a máquina e o sistema operacional. Ou seja: as VMs simulam recursos de CPU, RAM, sistemas de arquivos e rede.

Os contêineres virtualizam apenas o espaço de usuário de um sistema operacional existente. Nesse sentido, os contêineres são muito mais leves que as VMs. Os contêineres podem ser utilizados em um sistema operacional host existente.

Ferramentas de tempo de execução do contêiner

Um tempo de execução de contêiner é o conjunto de ferramentas que é usado para especificar as dependências que precisam ser empacotadas em um contêiner. Em seguida, o tempo de execução constrói o contêiner e o executa.

Docker

O tempo de período de execução do contêiner mais popular e amplamente utilizado. O Docker iniciou a explosão moderna de DevOps da infraestrutura baseada em contêiner. O Docker tem um repositório público cheio de contêineres que abrigam ferramentas populares de código aberto.

Linux Containers - LXC

O Linux Containers usa uma coleção de utilitários nativos do Linux de código aberto para criar uma experiência de período de execução do contêiner. O objetivo do contêiner do Linux é oferecer um ambiente neutro de fornecedor para desenvolver tecnologias de contêineres. De fato, o Docker usa LXC nos bastidores. O foco do Linux Containers é manter a experiência do contêiner o mais próxima possível da de uma VM.

CRI-O

Uma especificação de contêiner emergente direcionada para o sistema de gerenciamento de contêineres Kubernetes que afirma ser leve. O CRI-O implementa a iniciativa de contêiner aberto (OCI). O OCI é um padrão desenvolvido por colaboradores de empresas como Red Hat, Intel e IBM.

RKT e Rktlet

Pronunciado "rocket", RKT é uma especificação de contêiner que adota uma abordagem de segurança em primeiro lugar. Os contêineres RKT não permitem qualquer funcionalidade de insegurança, a menos que um usuário desative explicitamente os recursos de segurança. O RKT é nativo do pod, o que o torna adequado para o sistema de gerenciamento de contêineres Kubernetes.

Plataformas de gerenciamento de contêineres

As plataformas de gerenciamento de contêineres são ferramentas de nível superior que são usadas para orquestrar um grupo ou cluster de contêineres de tempo de execução. As plataformas de gerenciamento de contêiner usam um sistema de tempo de execução do contêiner subjacente. Algumas plataformas de gerenciamento de contêineres permitem combinar vários tempos de execução de contêineres.

Kubernetes

O Kubernetes é um sistema de gerenciamento de contêineres de código aberto projetado e lançado pelo Google. O Kubernetes é usado para criar um cluster distribuído de contêineres hospedados. O Kubernetes oferece ferramentas robustas de orquestração de cluster de contêiner que incluem monitoramento de integridade, implementação, failover e escalabilidade automática.

Docker

O Docker também oferece um conjunto de utilitários para iniciar, orquestrar e gerenciar um cluster de contêineres. O Docker é tão amplamente utilizado que seu sistema de definição de contêiner é suportado por muitos sistemas de gerenciamento de contêineres de terceiros, como o Amazon ECS e o Kubernetes.

Amazon ECS

O Amazon Elastic Container Service é um serviço baseado em nuvem da Amazon que facilita o gerenciamento de contêineres do Docker em um cluster. O ECS tem uma API poderosa e está totalmente integrado ao resto do pacote de nuvem da Amazon, permitindo fluxos de trabalho poderosos de DevOps.

OpenShift

A plataforma de contêineres OpenShift é um produto corporativo da Red Hat Linux. É um produto híbrido que oferece integração na nuvem Kubernetes e OpenShift. O OpenShift é uma plataforma de nuvem corporativa confiável que se integra a outras ferramentas da Red Hat.

Conclusão

Os contêineres são uma parte essencial do conjunto de ferramentas de DevOps moderno. Seja qual for o tempo de execução ou a plataforma de contêiner que você escolher, os benefícios dos contêineres vão dar mais eficiência para que a equipe execute. Os contêineres ajudam a simplificar o processo de desenvolvimento local e o processo de implementação remota, garantindo que você possa disponibilizar produtos de software de maior qualidade aos seus clientes.