Containers

Uma maneira de compartimentalizar processos

Containers

Containers já existiam bem antes do surgimento do Docker, que originalmente usava containers do Linux, eventualmente migrando para runC(conhecido anteriormente como libcontainer, que é executado na mesma máquina do host). Docker incorporou a funcionalidade de containers à um serviço de fornecimento dos mesmos através da nuvem, tornando-os o alicerce de seu serviço, e uma ferramenta indispensável para muitos desenvolvedores atualmente.

Funcionamento dos containers


Retirado de https://www.docker.com/what-container

A existência dos containers é possível a partir de virtualização a nível de SO. Nesse nível de virtualização, o kernel do sistema operacional do Docker host permite a existência de várias instâncias de usuário, em vez de apenas uma. Do ponto de vista do usuário e dos programas que este executa, a sensação é de que os mesmos estão sozinhos na máquina e ela é um computador real e inteiro, ao invés de uma mera partição que divide recursos de hardware com outras instâncias.

Containers são úteis pois eles são construídos para se adaptar às necessidades impostas pelo desenvolvedor. Dessa forma, quando um desenvolvedor cria um container com as configurações desejadas por ele, este já vem com todos os binários, bibliotecas e file systems necessários para o início da produção de aplicativos.

Um exemplo de uso efetivo de containers é na realização de testes. Suponha que um usuário precise realizar diversos testes num banco de dados, e cada teste modifica este banco. A existência de uma imagem que contém o banco em seu estado padrão, pré-testes, e a possibilidade de criar diversos containers, cada um executando um teste com uma cópia dessa imagem, agiliza imensamente o trabalho.

Os containers utilizam o host do Docker para tarefas como conexão a redes e conexão ao kernel(para ter acesso ao hardware da máquina). Além disso, um desenvolvedor pode salvar essas configurações em docker files, permitindo assim que vários containers com configurações idênticas sejam criados, além de poder compartilhar tal arquivo com uma equipe de desenvolvimento, para que todos possam produzir software utilizando um ambiente com a mesma configuração.




Containers são máquinas virtuais então?

Não. Um container é executado em cima de um arquivo de SO, porém ao contrário de uma máquina virtual inteira, vários containers podem funcionar em cima de um mesmo arquivo de imagem.

Retirado de http://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/

Supondo que um usuário possua uma imagem de um sistema operacional com 2GB de tamanho. O tamanho necessário para executar 10 máquinas virtuais seria de no mínimo 20GB, pois cada máquina virtual executaria uma instância do SO. Por outro lado, 10 containers ocupariam pouco mais do que 2GB, pois seriam executados em cima da mesma imagem(supondo que todos estejam utilizando o mesmo tipo e versão de SO).



A seguir, veremos o funcionamento do roteamento do Docker, e as vantagens e desvantagens do uso do sistema. →

Redes II - Docker