Existem algumas perguntas sobre contêineres , como:
- Qual o papel que as ferramentas de Gerenciamento de Configuração desempenham na infraestrutura imutável?
- Quais problemas uma orquestração de contêiner resolve?
- Contêineres simples de CI / CD na AWS
Minhas perguntas :
- O que é realmente um "contêiner" (no contexto do DevOps)?
- Por que eles são usados?
terminology
containers
Pierre.Vriens
fonte
fonte
Respostas:
A primeira coisa a saber sobre um contêiner é:
É, antes de tudo, um processo.
Uma vez entendido, pode-se começar a entender como os contêineres se comparam e contrastam com as máquinas virtuais. Contêineres e VMs compartilham o isolamento de seus hosts. O método de isolamento é a diferença crítica.
Os processos de contêiner usam extensões para o host do kernel do SO em que são executados para se isolarem de outros processos. Outras extensões também fornecem isolamento de disco e recurso. Os contêineres compartilham seu kernel e memória com o sistema operacional host.
Máquinas virtuais usam um hipervisor para isolar VMs de seus hosts. Essa é uma camada de software que encaminha solicitações de recursos de "convidados" (VMs) para o hardware. O isolamento do disco é fornecido pela virtualização do disco. As VMs não compartilham um kernel com o host - elas carregam seus próprios kernels no espaço de memória dedicado à VM.
Um impacto importante dessa diferença é que um contêiner deve ser compatível com o kernel com seu host. Por exemplo, não é possível executar um contêiner baseado no Windows Nano Server em um host Linux ou um contêiner Ubuntu diretamente em um host Windows. As máquinas virtuais, por outro lado, podem executar qualquer kernel, independentemente do sistema operacional host. Ao executar um contêiner Linux em um host Windows, o Docker executa o contêiner em uma VM Linux.
As diferenças operacionais estão na agilidade: os contêineres começam e param tão rápido quanto um processo normal. As VMs são "mais pesadas", exigindo recursos dedicados reservados para elas e levam mais tempo para iniciar e desligar.
Os contêineres oferecem muita flexibilidade a um modelo operacional do DevOps:
fonte
O contêiner de palavras refere-se a uma tecnologia de virtualização leve disponível nos kernels modernos do Linux; essa tecnologia é muito semelhante às cadeias do FreeBSD.
Um kernel Linux mais antigo, sem capacidade de contêiner, é capaz de executar processos simultaneamente. Alguns atributos do sistema são particulares ao processo, como o ambiente do processo ou a memória do processo: somente o processo que possui esses atributos e o próprio sistema operacional podem acessar esses dados. (Existem muitas brechas, como algumas implementações do ps , mas isso é essencialmente verdade!) Alguns outros atributos são compartilhados entre os processos, como o sistema de arquivos e as interfaces de rede, por exemplo.
Um kernel Linux moderno, capaz de contêiner, é capaz de lidar com mais atributos do sistema como dados privados associados a um processo ou a um grupo de processos. O contexto resultante é um contêiner e, em vez de executar um programa nos “contêineres iniciais” usando o sistema de arquivos e as interfaces de rede inicializadas pelo sistema operacional, é possível executar processos em outros contêineres, para que eles vejam um sistema de arquivos diferente e um lista diferente de interfaces de rede. Portanto, dois processos em execução em contêineres distintos apenas compartilham realmente o kernel. Talvez você esteja familiarizado com o comando chroot, que pode executar um processo em uma hierarquia de arquivos distinta; os contêineres levam a idéia um passo adiante.
Obviamente, essa é apenas uma explicação muito grosseira, mas espero que ajude a esclarecer a ideia do que são os contêineres. Agora, para que servem?
Uma interface popular para os recursos de contêiner dos kernels Linux é implementada pelo docker, um utilitário de linha de comando que pode ser usado para produzir artefatos representando sistemas de arquivos ( imagens do docker ) e executar processos em contêineres onde esses sistemas de arquivos são acessíveis. Esse pacote de software também é capaz de criar sistemas de rede virtual ad-hoc para permitir que vários contêineres se comuniquem em uma rede privada.
As tecnologias baseadas em contêiner são convenientes para:
(Como você parece familiarizado com outras tecnologias de virtualização como o Virtual Box, você pode observar que essas tecnologias também podem abordar convenientemente os três pontos acima. Atualmente, existe um espectro bastante pequeno de tecnologias de virtualização e podemos comparar a questão de sua popularidade em certos contextos com a popularidade das linguagens de computador: depende provavelmente dos méritos técnicos de cada solução individual, mas também de muitos fatores que chamarei de “acaso”.)
fonte
Normalmente, os contêineres se referem a algo como contêineres de docker que popularizaram o nome
Cito a partir da definição do docker:
A nomeação raiz vem de contêineres linux (lxc) cujo objetivo era isolar um processo de seu sistema host, o primeiro objetivo era evitar o comprometimento do processo de assumir o controle do sistema host.
Agora eles são usados em um escopo mais amplo. Em uma definição moderna de 'contêiner', você mais ou menos libera um pacote para tempo de execução que já inclui seu aplicativo, é um middleware subjacente, se necessário, e todas as bibliotecas necessárias e garante que ele seja executado em qualquer sistema compatível.
A segunda vantagem é que ela permite usar vários aplicativos com a mesma dependência em uma versão diferente, sem precisar ajustar muito suas variáveis de ambiente para carregar a correta.
Improvável para um sistema de VM como a máquina virtual de caixa virtual ou uma instância do EC2 na AWS, os contêineres são virtuais apenas no nível do sistema de arquivos e isolados apenas na pilha de memória. Eles ainda compartilham o mesmo host e o sistema operacional sob eles arbitrará os ticks da CPU.
Uma máquina virtual é virtual no nível do hardware, e você executa um sistema operacional, um contêiner é virtual no nível do SO e você executa um processo no interior.
fonte
Da definição da AWS :
Containerizar é atender a todas as necessidades essenciais necessárias para executar uma tarefa / ambiente específico, de modo que seja auto-suficiente e possa ser executado em qualquer plataforma, o que elimina muita dor quando se trata de configurar e instalar coisas.
fonte