1. O documento discute virtualização e Docker, incluindo suas definições e objetivos.
2. Docker permite empacotar aplicações e ambientes em containers, tornando-os portáteis entre hosts.
3. Imagens Docker são usadas para criar containers, que são instâncias em execução de uma imagem.
4. Virtualização
Algo real teria características físicas, concretas. Já o virtual está
associado aquilo que é simulado, abstrato.
A virtualização pode ser definida como a criação de um ambiente
virtual que simula um ambiente real, propiciando a utilização de
diversos sistemas e aplicativos sem a necessidade de acesso físico à
máquina na qual estão hospedados.
5. Virtualização
Isso reduz a relação de dependência que os recursos de computação
exercem entre si, pois possibilita, por exemplo, a dissociação entre
um aplicativo e o sistema operacional que ele utiliza.
Por exemplo, com o uso de virtualização é possível utilizar softwares
exclusivos de um S.O em outro, algo como o uso do Microsoft Word
no Linux.
7. Vantagens
Economia e otimização de recursos computacionais;
Independência de recursos e bibliotecas, pois o ambiente o qual a aplicação irá
rodar será configurada pelo desenvolvedor;
A economia barateia serviços que provem servidores, o que possibilita que
pequenas inovações tenham mais facilidade em alocar essas tecnologias para
seus projetos.
9. Origem
Surgiu em sistemas GNU-Linux e engloba tecnologias já existentes.
Sendo o comando chroot seu precursor mais famoso que foi lançado
em 1979 pelo Unix V7 com o intuito de segregar acessos de
diretórios e evitar que o usuário possa ter acesso à estrutura raiz (“/”
ou root).
Com base na ideia de virtualização a nível de Sistema Operacional,
surge em 2008 o Linux Container ou LXC como é mais conhecido.
10. LXC
É uma tecnologia que permite a criação de múltiplas instâncias isoladas
de um determinado Sistema Operacional dentro de um único hospedeiro
ou em outras palavras, é uma maneira de virtualizar aplicações dentro de
um servidor GNU/Linux.
Ao comparar com a virtualização tradicional, fica mais claro que uma
aplicação sendo executada em um LXC demanda muito menos recursos,
consumindo menos espaço em disco e com um nível de portabilidade
difícil de ser alcançado por outras plataformas.
11. LXC
A grande diferença entre o chroot e o LXC é o nível de
segurança que se pode alcançar. Com relação à
virtualização, a diferença está no fato do LXC não necessitar
de uma camada de sistema operacional para cada aplicação,
como pode ser visto na figura a seguir:
12.
13. Mercado
Mas não foi só a adoção de desenvolvedores e administradores
que tornou essa tecnologia recentemente tão popular. A
consolidação da virtualização no mercado e a crescente
demanda por computação em nuvem criaram o ambiente
perfeito para o LXC se espalhar rapidamente. Aplicações podem
ser portadas direto do notebook do desenvolvedor para o
servidor de produção, ou ainda para uma instância virtual em
uma nuvem pública.
14. Mercado
Suas facilidades de uso ficaram evidentes ao mercado com a
rápida adoção dos principais competidores de computação
em nuvem, que perceberam o valor do LXC e adequaram
seu catálogo para suportar essa implementação.
16. Introdução
Basicamente, o Docker é uma implementação open source de uma
virtualização a nível de sistema operacional (operating system level
virtualization).
É uma abordagem que tenta solucionar os problemas da virtualização de
hardware, que basicamente consiste em recursos limitados, ou seja,
virtualizar todo o hardware consome muito recurso.
Utiliza a tecnologia LXC.
17. Introdução
O Docker faz uso de parte do conceito de Software como Serviço,
frequentemente chamado SaaS (Software as a Service), o que é um método de
entrega que provê acesso remoto ao software e suas funções, baseado em
tecnologias como as de web-services.
Internamente sua estrutura é desenvolvida em GO e nasceu como um projeto
open source da DotCloud, uma empresa de PaaS (Platform as a Service) que
apesar de estar mais interessada em utilizar LXC apenas em suas aplicações,
acabou desenvolvendo um produto que foi muito bem aceito pelo mercado.
18. Funcionalidades
O Docker possibilita o empacotamento de uma aplicação ou ambiente
inteiro dentro de um container, e a partir desse momento o ambiente
inteiro torna-se portável para qualquer outro Host que contenha o Docker
instalado.
Isso reduz drasticamente o tempo de deploy de alguma infraestrutura ou
até mesmo aplicação, pois não há necessidade de ajustes de ambiente
para o correto funcionamento do serviço, o ambiente é sempre o mesmo,
configure-o uma vez e replique-o quantas vezes quiser.
19. Imagem
Fazendo um paralelo com o conceito de orientação a objeto, a imagem é a
classe e o container o objeto, ou seja, a imagem é a abstração da
infraestrutura em um estado somente leitura, que é de onde será
instanciado o container.
Todo container é iniciado a partir de uma imagem, dessa forma podemos
concluir que nunca teremos uma imagem em execução.
Um container só pode ser iniciado a partir de uma única imagem, ou
seja, caso deseje um comportamento diferente será necessário
customizar a imagem.
20. Imagem
Há duas formas de criar uma imagem:
◦Dando um commit em um container já criado, que foi
instanciado com outra imagem.
◦Iniciando uma nova imagem a partir de um dockerfile,
especificando todas as preferências, mas tendo como base
outra imagem.
22. Container
O Container é uma instância de uma Imagem em execução
naquele momento.
As camadas são montadas como leitura e escrita. É onde de fato
estão as modificações da "máquina" em execução. Toda
modificação realizada em uma imagem é feita a partir de um
container com o commit citado anteriormente.
23. Container
Entretanto, as informações alteradas no container serão
perdidas na próxima vez em que ele for executado, caso não
haja commit para criar uma nova imagem.
Em essência, cada container executa um ambiente distindo, que
pode ser compartilhado entre outros container se necessário.