Definir containers
À medida que a Contoso migra e virtualiza várias cargas de trabalho, pode ocorrer uma opção para colocar algumas das cargas de trabalho em contêiner. O administrador do Windows Server avaliará os contêineres, entenderá como eles funcionam e quais podem ser os benefícios de usá-los. Os benefícios podem incluir mobilidade, agilidade, maior eficiência e densidades de servidores. Todos esses benefícios contribuem para cargas de trabalho de servidor mais otimizadas e consistência dos ambientes de desenvolvimento.
O que são os contentores?
Um contêiner é usado para empacotar um aplicativo junto com todas as suas dependências e abstraí-lo do sistema operacional (SO) host no qual ele será executado. Os contêineres fornecem um ambiente leve de desenvolvimento e tempo de execução no qual os aplicativos podem ser executados e compartilhados facilmente durante o desenvolvimento. Não só um contêiner é isolado do sistema operacional host, mas também é isolado de outros contêineres. Os contêineres isolados fornecem um tempo de execução virtual, que também pode melhorar a segurança e a confiabilidade dos aplicativos executados neles.
Tradicionalmente, um aplicativo de software é desenvolvido para ser executado em um processador, hardware e plataforma de sistema operacional suportados. Os aplicativos de software normalmente exigem codificação adicional para fornecer suporte para as diferentes plataformas de tempo de execução. Com tantos sistemas de computação diversos, uma plataforma de desenvolvimento e gerenciamento de software mais eficiente é necessária para suportar a portabilidade entre vários ambientes de computação. Os contentores ajudam a proporcionar essa portabilidade.
Benefícios da utilização de contentores
Os benefícios do uso de contêineres incluem o seguinte:
A capacidade de correr 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 datacenters locais ou provisionados na nuvem.
Isolamento. Para um aplicativo, um contêiner parece ser um sistema operacional completo. A CPU, a memória, o armazenamento e os recursos de rede são virtualizados dentro do contêiner e isolados da plataforma host e de outros aplicativos.
Maior eficiência. Os contêineres podem ser rapidamente implantados, atualizados e dimensionados para oferecer suporte a um ciclo de vida de desenvolvimento, teste e produção mais ágil. Por serem mais eficientes em termos de recursos que consomem, sua pegada é menor, o que permite maior densidade nos servidores.
Um ambiente de desenvolvimento consistente. Os desenvolvedores usam contêineres como um ambiente de desenvolvimento consistente e previsível que suporta várias linguagens de desenvolvimento, como Java, .NET, Python e Node.js. Os desenvolvedores sabem que, não importa onde o aplicativo seja implantado, o contêiner garantirá que o aplicativo seja executado conforme pretendido.
Como funcionam os contentores
O processador em um computador Windows padrão tem dois modos diferentes: um modo kernel e um modo de usuário. Os componentes principais 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 host. Um contêiner se baseia e compartilha a maior parte do kernel do sistema operacional 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 próprio ambiente de modo de usuário do host. A capacidade de isolar o modo de usuário é fornecida por uma imagem base de contêiner, que consiste nos arquivos de sistema de modo de usuário necessários para dar suporte a um aplicativo empacotado. Os modelos de imagem base de contêiner fornecem uma camada fundamental de serviços de sistema operacional usados pelo aplicativo em contêiner que não são fornecidos (ou restritos) da camada de modo kernel do host.
A camada na qual o aplicativo e as alterações de código são feitas fica sobre essas camadas de imagem do sistema operacional de base de contêiner pré-construídas. Essas camadas básicas do sistema operacional são desenvolvidas e atualizadas separadamente das camadas de contêiner que são usadas ativamente para alterações de aplicativos ou códigos. As camadas de base são puxadas para baixo para o ambiente de trabalho local sem serem atualizadas e, em seguida, o trabalho é iniciado em camadas de contêiner que são executadas nas camadas de base. Isso permite ambientes de desenvolvimento menores, mais leves e mais portáteis.
Ao criar sua própria imagem de contêiner para hospedar seu aplicativo, você começa aproveitando uma imagem de sistema operacional de base de contêiner ou uma imagem de contêiner pré-criada que tem as dependências de que você precisa. Além 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 é construída sobre a última. Isso aumenta o tamanho da imagem, mas permite que você segregue convenientemente o sistema operacional, a estrutura, as dependências e as camadas de aplicativos.
Contentores e micro-serviços
Os aplicativos de microsserviços são definidos como uma abordagem de arquitetura nativa da nuvem na qual um único aplicativo é composto por muitos componentes ou serviços menores acoplados de forma flexível e implantáveis de forma 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 essa intenção. Por padrão, o Docker (ou outro tempo de execução de contêiner), bem como o orquestrador de contêineres, assumirão que um contêiner sempre pode ser excluído/removido com segurança e outro contêiner pode simplesmente tomar seu lugar, se necessário. Em uma VM, se você configurar um aplicativo para gravar no disco da VM, poderá parar e iniciar a VM com segurança e os dados persistirão no disco - assim como a VM inicializará e continuará sua operação com segurança. Com contêineres, se você remover um contêiner e trazer outro em seu lugar, apenas as camadas existentes dessa imagem de contêiner estarão lá. Em um ambiente de microsserviços, isso não deve ser um problema se você tiver persistência do estado e dos dados.
Embora você possa executar um contêiner e gerenciá-lo como uma VM, é recomendável adotar as práticas de separação de estado e dados e garantir que seu contêiner possa ser excluído. Isso permitirá que você aproveite outras práticas, como DevOps.
Na prática, você não deve armazenar nenhum dado ou estado dentro da imagem do contêiner e suas camadas. Em vez disso, você deve usar o armazenamento persistente externo que permite que qualquer instância de contêiner o acesse.