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:
- Descrever implantações complexas escaláveis .
- Forneça aos desenvolvedores de aplicativos um ambiente muito semelhante ao ambiente de produção.
- Implemente um padrão imutável de servidor, pois os artefatos de software geralmente descrevem um sistema operacional completo, não apenas um pacote de aplicativos.
(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”.)