Docker

Docker é uma plataforma, desenvolvida em GO, de código aberto para a execução de programas utilizando a técnica de containers.

Caso já tenha ouvido falar de Docker, deve ter observado que o assunto é bem extenso e isso pode ocasionar algum mal entendidos sobre a forma que o Docker trabalha. Para evitar algumas confusões com todas essas informações, vamos falar um pouco sobre o que o Docker não é! Para início, o Docker não é um virtualizador comum, ele não trabalha com Virtualização Total e Paravirtualização. Muitos tentam associar o Docker a estes termos assim que passam a ter um primeiro contato com a ferramenta.

A Virtualização Total simula um hardware completo e dedicado a VM, o S.O não sabe que está sendo virtualizado. Já na Paravirtualização ocorre o oposto, não há hardware completo e dedicado emulado, o S.O tem consciência de que está sendo virtualizado e o seu Kernel já é voltado para trabalhar desta forma, interagindo de forma harmoniosa com a camada Hypervisor.

O Hypervisor pode ser visto como uma camada de software em cima do hardware ou em cima de um S.O que está sobre o hardware. Ele é o responsável pelo gerenciamento das VMs, também controla o acesso aos recursos do Hardware real solicitados pelos S.Os residentes nas VMs.

Passada essas informações iniciais, vamos entender a diferença entre a virtualização comum e a utilização de containers. Na virtualização comum, o S.O convidado possui seu próprio Kernel. Isso não acontece no Docker, pois ele utiliza o Kernel do S.O instalado na máquina física. O Docker utiliza a técnica de containers e estes só carregam aquilo que é necessário para o seu funcionamento. Eles não são Máquinas Virtuais, eles são, simplesmente, containers.

Como forma de exemplo, podemos associar um container a um envelope, onde dentro desse envelope está o espaço de trabalho. Um container é o espaço de trabalho, onde se dá a execução de uma aplicação, por exemplo. A grosso modo, o container isola o processo e as suas dependências dentro de um espaço sem a necessidade de um novo sistema operacional completo para a execução desse processo.

Essa ideia de container não é nova, porém ganhou mais notoriedade com a popularização do Docker em 2015. Essa ideia, de forma bem simples, começou no Unix com o chroot e aos poucos foi se atualizando, passando pelo Jails no Freebsd e Solaris Zones da Sun, por exemplo. Antes do Docker, a plataforma mais conhecida era a LXC, criada em 2008, que era uma melhoria do chroot.

A imagem acima exemplifica bem essa ideia. Na esquerda, um exemplo de Infraestrutura baseada em virtualização comum utilizando a camada Hypervisor. Para a execução das aplicações é necessário um sistema operacional, depois a camada Hypervisor, um outro sistema operacional, porém virtualizado com as bibliotecas e dependências instaladas e só depois a execução da aplicação.

Com o Docker, algumas dessas camadas são eliminadas. Há o sistema operacional base, a Docker Engine, as bibliotecas e dependências, e o container com a aplicação. A camada Hypervisor dá lugar ao Docker Engine que permite que o Kernel seja acessado diretamente pelas aplicações, assim eliminando a necessidade de um sistema operacional para cada aplicação e compartilhando um único Kernel.
Resumindo: com o Hypervisor um sistema operacional completo é virtualizado para poder executar a aplicação. Já o Docker executa a aplicação sem a necessidade de um sistema operacional completo e aproveitando o Kernel do sistema operacional já instalado, sem a necessidade de criar outro sistema operacional de forma virtualizada. Ou seja, com container é possível virtualizar a nível de S.O, iniciando-o como um “processo”.

 

Esse foi o primeiro post sobre Docker e como você pode observar, tem muita informação nova e muitos conceitos. Os próximos posts serão mais práticos
Para uma leitura complementar recomendo a documentação do Site Oficial do Docker, o Mundo Docker e o Canal Linux Tips.
Agradecimento ao Will de Souza pela co-participação do post.

Ao som de Death – Symbolic

Nesse segundo exercício vou utilizar o mesmo IP do primeiro exercício (pode ver clicando aqui), porém de /44 para /47 vou utilizar de /47 para /50.

Repito a informação do post anterior: vou primeiro propor o exercício e depois mostrar a forma que eu utilizo para chegar a resolução.

Mais uma vez um agradecimento especial à Professora Silvana Correa

Dado o seguinte IPv6: FDEC:0000:2390:9023:1137:7311:88D4:4D88 /47
a) Transforme o /47 para um /50.
b) Quantas sub-redes são possíveis com essa transformação?
c) Quais são as sub-redes?

Continuar lendo

No post passado vimos um exercício de Sub-redes em IPv4. Neste post vamos ver fazer um exercício de Sub-redes em IPv6. No momento não serão abordadas as novidades e características do IPv6. Isso será assunto para um outro post, porém recomendo a leitura do site ipv6.br para maiores informações.

Assim como no post sobre IPv4, vou primeiro propor o exercício e depois mostrar a forma que eu utilizo para chegar a resolução. Também repete-se a recomendação de experimentar outros IPs e outros CIDRs.

 

Mais uma vez um agradecimento especial à Professora Silvana Correa

 

Dado o seguinte IPv6: FDEC:0000:2390:9023:1137:7311:88D4:4D88 /44
a) Transforme o /44 para um /47.
b) Quantas sub-redes são possíveis com essa transformação?
c) Quais são as sub-redes?

 

Continuar lendo