01 — Apanhado geral sobre Docker

Iniciei a algumas semanas os estudos em Docker. Tenho costume de escrever bastante enquanto aprendo, então irei disponibilizar minhas anotações aqui conforme irei aprendo. Talvez pode ajudar alguém que esteja começando, assim como eu neste momento. Irei atualizando conforme dou andamento nos estudos.

O que é?

Neste primeiro momento, iremos apenas dar uma passada rápida no conceito geral de Docker e Container. Para começar, o Docker não é um sistema de virtualização tradicional, muita gente pode confundir o conceito de ambos. O sistema de virtualização tradicional, onde utilizamos um hypervisor como base, temos um sistema operacional/kernel como base rodando diretamente em cada instancia de virtual machine. Já com Docker, a história muda, é utilizado o próprio kernel do host para disponibilizar recursos isolados, com isso o contêiner e o host compartilham bibliotecas de kernel entre si (não havendo uma camada de S.O entre eles). Quando um container é executado em um Linux por exemplo, ele vira apenas um processo no sistema operacional.

Abaixo podemos verificar a diferença entre Docker com Container e Virtualização usando Hypervisor:

Sendo um projeto software livre, o Docker é uma plataforma de código aberto, mantido pela Docker Inc. Escrito em GO (linguagem de programação desenvolvida dentro da Google). É uma aplicação desenvolvida para ter alto desempenho, facilitando o deploy e automação de ambientes e serviços, isolando recursos e garantindo a rápida entrega para o usuário final.

Porque devo me preocupar em conhecer Docker?

Simplesmente pelas vantagens que ele proporciona, seja para um desenvolvimento de aplicação ou para a equipe de infra homologar ou entregar de forma mais ágil suas demandas.

Uma das vantagens, que se destacam, na utilização do Docker, é a rapidez em que uma aplicação ou uma infraestrutura podem serem entregues, alguns especialistas costumam indicar que seja 7 vezes mais rápida do que com um ambiente de virtualização tradicional. Um outro ponto importante a ser destacado, é o empacotamento inteiro da aplicação ou infraestrutura dentro de um único container, isso facilita na administração e portabilidade para um outro host Docker (diminuindo a possibilidade de incompatibilidade de recursos entre ambiente de desenvolvimento e produção).

Outro recurso que podemos destacar, são as Camadas e controle de versões de Imagens.

Uma imagem pode contar diversas camadas. Nela, contem binários, bibliotecas e código fonte de uma aplicação, tudo pre compilado para ser utilizado de maneira rápida e por diversos serviços diferentes. Se é inserido um novo arquivo dentro da imagem, usando COPY, ou executando um novo comando, é criada uma nova camada nesta imagem, assim, caso seja necessário pode voltar diferentes camadas.

Já um container, que é gerado a partir de uma imagem, é possível executar a partir de uma camada de imagem. Quando o container é executado, todas as alterações provenientes da aplicação rodando, é executada dentro dele.

… e como funciona por trás disso tudo?

Basicamente, tudo funciona através da comunicação entre cliente e servidor, entre o Docker Daemon e o Docker Client através de REST API, assim podemos ter o serviço Docker rodando em um servidor e um cliente instalado em outra estação para gerencia-lo.

Para finalizar, temos que dar destaque também a biblioteca libcontainer, implementada na versão 0.9 e escrita também em linguagem GO, ela fornece toda a administração nativa dos containers com namespace, cgroups, recursos e controles de acessos aos filesystems, tanto do container, quando do Docker host. Além de usar interfaces de virtualização abstrata via libvirt, LXC (Linux Containers) e systemd-nspawn, assim conseguindo gerenciar todo o ciclo de vida desde da criação do container.

Bom esta é apenas o começo de minhas anotações sobre este assunto. É uma tecnologia bem nova para min, então este conceito pode ter atualizações futuras.

Monitoring, DevOps Student and content creation!

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store