Definir contêineres

Concluído

Conforme a Contoso migra e virtualiza várias cargas de trabalho, uma opção para colocar algumas das cargas de trabalho em contêineres pode ser disponibilizada. O administrador do Windows Server avaliará os contêineres, entenderá como eles funcionam e quais poderão ser os benefícios de usá-los. Os benefícios podem incluir mobilidade, agilidade, maior eficiência e densidades de servidor. Todos esses benefícios contribuem para otimizar e aumentar a consistência dos ambientes de desenvolvimento das cargas de trabalho de servidor.

O que são contêineres?

Um contêiner é usado para empacotar um aplicativo com todas as dependências relacionadas e abstraí-lo do sistema operacional host no qual ele será executado. Os contêineres fornecem um ambiente leve de desenvolvimento e runtime no qual os aplicativos podem ser executados e compartilhados com facilidade durante o desenvolvimento. O contêiner não só é isolado do sistema operacional do host, como também é isolado de outros contêineres. Os contêineres isolados fornecem um runtime virtual, que também pode melhorar a segurança e a confiabilidade dos aplicativos executados dentro deles.

Tradicionalmente, um aplicativo de software é desenvolvido para ser executado em um processador, hardware e plataforma de sistema operacional com suporte. Aplicativos de software geralmente exigem codificação adicional para fornecer suporte para as diferentes plataformas de runtime. Com a diversidade dos sistemas de computação, as plataformas de gerenciamento e desenvolvimento de software precisam ser mais eficientes para dar suporte à portabilidade entre vários ambientes de computação. Os contêineres ajudam a fornecer tal portabilidade.

Benefícios do uso de contêineres

Os benefícios do uso de contêineres incluem:

  • Capacidade de execução em qualquer lugar. Os contêineres podem ser executados em várias plataformas, como sistemas operacionais Linux, Windows e Mac. Eles podem ser hospedados em uma estação de trabalho local, em servidores em data centers locais ou provisionados na nuvem.

  • Isolamento. Para um aplicativo, um contêiner parece ser um sistema operacional completo. Os recursos de CPU, memória, armazenamento e rede são virtualizados dentro do contêiner e isolados da plataforma de host e de outros aplicativos.

  • Maior eficiência. Os contêineres podem ser rapidamente implantados, atualizados e dimensionados para dar suporte a um ciclo de vida de desenvolvimento, teste e produção mais ágil. Como eles são mais eficientes em termos dos recursos que consomem, seu volume de memória é menor, aumentando a densidade nos servidores.

  • Um ambiente de desenvolvimento consistente. Os desenvolvedores usam contêineres como um ambiente de desenvolvimento consistente e previsível que dá suporte a várias linguagens de desenvolvimento, como Java, .NET, Python e Node.js. Os desenvolvedores sabem que, independentemente de onde o aplicativo seja implantado, o contêiner garantirá que ele seja executado conforme o esperado.

Como os contêineres funcionam

O processador em um computador Windows padrão tem dois modos diferentes: um modo kernel e um modo de usuário. Os principais componentes do sistema operacional e a maioria dos drivers de dispositivo são executados no modo kernel, enquanto os aplicativos são executados no modo de usuário.

Quando você instala a tecnologia de contêiner em um computador, cada contêiner cria um silo leve e isolado, usado para executar um aplicativo no sistema operacional do host. Um contêiner se baseia e compartilha a maior parte do kernel do sistema operacional do host para obter acesso ao sistema de arquivos e ao registro.

Cada contêiner tem sua própria cópia dos arquivos de sistema do modo de usuário, que são isolados de outros contêineres e do ambiente do modo de usuário próprio do host. A capacidade de isolar o modo de usuário é fornecida por uma imagem base de contêiner, que consiste nos arquivos do sistema de modo do usuário necessários para dar suporte a um aplicativo empacotado. Os modelos de imagem base do contêiner fornecem uma camada básica de serviços de sistema operacional usados pelo aplicativo em contêiner que não são fornecidos (ou restritos) da camada do modo kernel do host.

A camada em que as alterações de aplicativo e código são feitas fica acima dessas camadas de imagem de sistema operacional base de contêiner predefinidas. Essas camadas de sistema operacional base são desenvolvidas e atualizadas separadamente das camadas de contêiner, que são usadas de forma ativa para alterações de aplicativo ou código. As camadas base são extraídas para o ambiente de trabalho local sem serem atualizadas, e o trabalho é iniciado nas camadas de contêiner que são executadas nas camadas base. Isso permite ambientes de desenvolvimento menores, mais leves e mais portáteis.

Diagrama que mostra um exemplo de camada de contêiner definida com camadas em uma pilha na seguinte ordem de baixo para cima: camada base do SO, camada IIS, camada ASP.NET e camada do site.

Ao criar sua própria imagem de contêiner para hospedar o aplicativo, você utiliza uma imagem de sistema operacional de contêiner base ou uma imagem de contêiner predefinida com as dependências necessárias. Acima dessas camadas, você cria suas próprias camadas com o aplicativo que deseja executar em um contêiner. Cada operação para criar a imagem de contêiner é baseada na anterior. Isso aumenta o tamanho da imagem, mas permite separar convenientemente o sistema operacional, a estrutura, as dependências e as camadas do aplicativo.

Contêineres e microsserviços

Os aplicativos de microsserviços são definidos como uma abordagem arquitetônica nativa da nuvem na qual um único aplicativo é composto de muitos componentes ou serviços menores fracamente acoplados e implementáveis de maneira independente. Cada um desses componentes ou serviços menores pode ser representado por um contêiner. No entanto, os contêineres não implementam necessariamente uma arquitetura de microsserviços.

Um contêiner pode hospedar um aplicativo monolítico, mas eles não foram projetados para esse fim. Por padrão, o Docker (ou outro runtime de contêiner), bem como o orquestrador de contêineres, assumirá que um contêiner sempre pode ser excluído/removido com segurança e que outro pode simplesmente ocupar seu lugar, se necessário. Em uma VM, ao configurar um aplicativo a fim de gravá-lo no disco da VM, é possível parar e iniciar a VM com segurança e os dados persistirão no disco, assim como ocorre quando a VM é inicializada com segurança e continua sua operação. No caso dos contêineres, se você remover um deles e colocar outro no lugar, somente as camadas existentes dessa imagem de contêiner estarão lá. Em um ambiente de microsserviços, isso não deve ser um problema quando você tem a persistência do estado e dos dados.

Embora seja possível executar um contêiner e gerenciá-lo como uma VM, é recomendado adotar as práticas de separação de estado e dados e garantir que ele possa ser excluído. Com isso, você aproveita outras práticas, como DevOps.

Na prática, você não deve armazenar nenhum dado ou estado dentro da imagem do contêiner e em suas camadas. Em vez disso, é necessário usar o armazenamento persistente externo que permite que qualquer instância de contêiner o acesse.