O Docker e seus containers: a nova era da virtualização!

PorIago Corrêa

O Docker e seus containers: a nova era da virtualização!

O PET-SI está a todo vapor em 2017! E como prova disso, viemos lhes trazer, quentinho do forno, mais uma edição do nosso já amado PET-Redação. Nesta edição, falaremos sobre o Docker, o ambiente de virtualização que mais tem ganhado adeptos ao redor mundo!

O Docker é uma plataforma de virtualização Open Source escrita na linguagem Go (linguagem de alto desempenho criada pela Google) e mantida pela Docker Inc (empresa localizada na Califórnia – EUA), que permite a criação e administração de ambientes isolados hospedados em um sistema operacional (SO). A plataforma, permite que seja encapsulado uma aplicação ou, até mesmo um sistema operacional inteiro dentro desses ambientes, que são chamados de containers. Partindo de arquivos de definição chamados dockerfiles (explicado melhor posteriormente) ainda é possível criar imagens de um container, podendo replicar a mesma configuração de um container em qualquer outro host que tenha o Docker instalado.

Uma das maiores vantagens no uso do Docker, é o desempenho superior frente às máquinas virtuais com hypervisor. Enquanto nas máquinas virtuais comuns, existe um SO inteiro, com suas rotinas de bibliotecas e parte do kernel simuladas em sobre um hardware artificial, o Docker compartilha, quando possível, essas estruturas com o SO hospedeiro, resultando em um grande ganho no desempenho da virtualização e acarretando em containers excepcionalmente leves. Falando de forma grosseira, a diferença é básica: enquanto as vms simulam o hardware, os containers simulam o SO.

A imagem abaixo mostra de forma mais simples as diferenças de estruturas entre vm comum e o Docker.

Sendo “filho” do Linux Containers (LXC), o Docker consegue utilizar recursos como namespaces, cgroups e chroot de seu pai para solidificar a sua proposta. Utilizado os namespaces, o Docker garante a criação de um ambiente próprio, podendo a partir de então, utilizar o chroot para isolar esse ambiente do resto do sistema e, por fim, garante com o cgroups os recursos como CPU, memória, I/O de disco e rede para o ambiente. Abusando dessa arquitetura, o Docker consegue criar containers leves, isolados e prontos para serem gerenciados de forma independente e transparente aos demais vizinhos.

Para a definição da imagem de um container, são os dockerfiles que aparecem! Os dockerfiles são arquivos de compilação que definem a estrutura de um container a partir de um ponto pré-estabelecido. Com um dockerfile bem definido, o erro humano na hora de criação da imagem pode ser minimizando, sendo necessário apenas a execução do arquivo. Um exemplo de dockerfile pode ser visualizado aqui, nesse exemplo, é feito a instalação do PostgreSQL no Docker, um trecho do arquivo pode ser visto abaixo.

A Docker Inc. mantém um repositório onde usuários podem compartilhar suas imagens para containers, o website pode ser acessado aqui. No repositório, existem os mais diversos tipos de imagens que vão desde imagens focadas em virtualizar um SGBD, até virtualização de ferramentas como o Apache Hadoop, para o processamento de grandes conjuntos de dados.

Com ascensão destacável na indústria desde 2015, o Docker vem amplamente substituindo vms, já sendo utilizado por gigantes da TI como a Google, Amazon e até mesmo a Microsoft, que recentemente criou implementações de extensão para a Azure executar o  Docker. Também é utilizado por empresas de streaming como Spotify e Netflix.

O crescimento demasiado do uso da ferramenta levou a Datadog (empresa especializada em gerência em TI) a analisar informações sobre adoção da ferramenta em ambientes de produção, a pesquisa ficou interessante e explana 8 fatos surpreendentes sobre essa adesão da ferramenta, a investigação pode ser encontrada nesse link.

Para instalar o ambiente, é necessário fazer o download a partir dos repositórios oficiais do Docker para a sua distribuição (caso use Linux) ou, fazer download de alguma versão no site oficial da ferramenta (para MAC e Windows).

Alguns comandos interessantes:

Build de uma imagem

docker build -t <nome_da_imagem> <caminho_para_dockerfile>

Executar um container

docker run -d -p <porta_host>:<porta_container> –name <nome_container> <nome_imagem> 

Iniciar uma sessão bash em um container que esteja rodando

docker exec -it <nome_container> bash

Ver os logs de um container

docker logs <nome_container>

Ver todas as imagens no host

docker images

Ver todos os containers

docker ps -a  

Remover um container

docker rm -f <nome_container>  

Remover TODOS os containers

docker rm -f $(docker ps -a -q)  

Remover uma imagem

docker rmi -f <nome_imagem>

Assim, com versatilidade e flexibilidade, o Docker e seus containers vêm ganhando fiéis ao redor do mundo. Trazendo uma nova forma de virtualização, o mesmo consegue ter um desempenho melhor frente às vms convencionais, o que acaba lhe tornando a nova febre no mundo das virtualizações.

Referências e Links úteis

1 – DockerDocker Inc.

2 – mundoDocker O que é Docker?

3 – DigitalOcean O Ecossistema do Docker: Uma Visão geral da Conteinerização!

4 – Hub Docker Hub.

5 – Getup Docker Docker Docker — E aí, quais os benefícios?

6 – Datadog 8 Surprising facts about real Docker adoption.

Avaliação

Antes de você partir gostaria de pedir sua ajuda para avaliar nossa atividade, é com sua colaboração que o grupo PET-SI vai melhorar ainda mais os conteúdos aqui abordados. Por favor, preencha o formulário neste LINK e nos ajude <3

Redações Anteriores

1 – Uma Introdução aos Conceitos e Utilização do Big Data

0 – Por que utilizar o Sublime Text?

Comentários não são aceitos para este Post!!!