Docker – resumo

docker

Docker (software)

Docker é uma tecnologia de software que fornece contêineres, promovido pela empresa Docker, Inc. O Docker fornece uma camada adicional de abstração e automação de virtualização de nível de sistema operacional no Windows e no Linux. O Docker usa as características de isolação de recurso do núcleo do Linux como cgroups e espaços de nomes do núcleo, e um sistema de arquivos com recursos de união, como OverlayFS e outros[3] para permitir “contêineres” independentes para executar dentro de uma única instância Linux, evitando a sobrecarga de iniciar e manter máquinas virtuais (VMs).

O suporte para espaços de nomes do núcleo do Linux na maioria das vezes isola uma visão da aplicação do ambiente operacional, incluindo árvores de processo, rede, IDs de usuário e sistemas de arquivos montados, uma vez que os cgroups do núcleo fornecem limitação de recursos, incluindo a UCP, memória, bloco de E/S e rede. Desde a versão 0.9, o Docker inclui a biblioteca libcontainer como seu próprio mecanismo de usar diretamente os recursos de virtualização fornecidos pelo núcleo do Linux, além de usar interfaces de virtualização abstrata via libvirt, LXC (Linux Containers) e systemd-nspawn.

O docker é uma alternativa de virtualização em que o kernel da máquina hospedeira é compartilhado com a máquina virtualizada ou o software em operação, portanto um desenvolvedor pode agregar a seu software a possibilidade de levar as bibliotecas e outras dependências do seu programa junto ao software com menos perda de desempenho do que a virtualização do hardware de um servidor completo. Assim, o docker torna operações em uma infraestrutura como serviços web mais intercambiável, eficientes e flexíveis.

Segundo uma análise da 451 Research, o “docker é uma ferramenta que pode empacotar um aplicativo e suas dependências em um recipiente virtual que pode ser executado em qualquer servidor Linux. Isso ajuda a permitir flexibilidade e portabilidade de onde o aplicativo pode ser executado, quer nas instalações, nuvem pública, nuvem privada, entre outros.”

Uma introdução ao Docker e Kubernetes

Tendo em mente o gerenciamento e escalabilidade de serviços na nuvem e em servidores, as ferramentas Docker e Kubernetes formam uma dupla inseparável e indispensável. Com a possibilidade da execução de instancias e serviços em contêineres, Docker dispõe um sistema relativamente simples de compartimentação de recursos e o Kubernetes, de gerenciamento e escalonamento dos serviços de conteinerização.

Docker:
O sistema Docker, ao contrário de técnicas de segregação convencionais que utilizam um hypervisor, funciona baseado em containers. O conceito de containers não é tão recente, vindo do projeto LXC (Linux container) que era uma tecnologia que possibilitava a criação de um ambiente próximo de uma instalação Linux sem a necessidade de um kernel separado, permitindo encapsular um sistema inteiro dentro de uma estrutura de diretório, impedindo que o sistema hospede acesse qualquer coisa além do que é definido em sua arquitetura. Utilizando um conceito semelhante, Docker cria containers logo acima do sistema operacional sem a necessidade de um sistema operacional inteiro rodando dentro do container, como em maquinas virtuais.

Um container Docker é uma instancia de uma imagem, que pode ser baixada diretamente do chamado Docker Hub ou criada pelo usuário para atender suas necessidades. Uma imagem contém todos os binários e dependências necessárias para o funcionamento da aplicação do container e pode ser inicializada em segundos, uma vez que não há necessidade de boot de um sistema operacional inteiro. Além da instanciação quase instantânea, o fechamento de um container é extremamente rápido. Com essa tecnologia, a instanciação de aplicativos e programas pode ser feita apensa no momento em que é necessário, com o intuito de economizar tempo de processamento na nuvem ou simplesmente para um maior nível de desempenho e responsividade.

Contudo, o software Docker não tem capacidades avançadas de gerenciamento além da criação de volumes de dados, networking e configurações básicas de instancia, e para um gerenciamento avançado entra em ação o Kubernetes, software open source da google para o gerenciamento de instanciação e segregação dos containers.

Kubernetes:
O Kubernetes não tem nenhuma relação direta com o Docker, sendo simplesmente um orquestrador de conteiners e pode ser utilizado com outras aplicações de conteinerização da mesma forma que o Docker pode ser utilizado com outras ferramentas de orquestração. Mas no dado momento, esse conjunto é o padrão de mercado, por serem os maiores e mais famosos.

Ao contrário do Docker, o Kubernetes contém uma interface gráfica para a manutenção, configuração e monitoramento dos chamados Pods (um pod é a menor unidade gerivel pelo Kubernetes, no caso, um contêiner) e configurações avançadas de gerencia e manutenção, sendo uma ferramenta poderosa. A capacidade de monitorar o comportamento de pods e tomar decisões de fechamento de pods travados e instanciação dos mesmos além de tecnologias de distribuição de carga entre diferentes servidores se mostra fator importante na escalabilidade dinâmica de uma aplicação ou serviço.

Talvez em aplicações de pequeno porte ou que a possibilidade de ampliação não é visionada as ferramentas citadas aqui não sejam de grande importância, mas em qualquer sistema ou serviço no qual crescimento é uma possibilidade, a utilização de sistemas de conteinerização e de gerenciamento de instanciação se dá cada vez mais necessária, principalmente quando o tempo de serviço nos servidores tem custo por quantidade de processamento, como se da o caso em hospedagem na nuvem, a conteinerização deve ser considerada ainda nas etapas de planejamento do serviço e aplicação.

Autor: Rogerio Lazzari Jr.