View
1
Download
0
Category
Preview:
Citation preview
VIRTUALIZAÇÃO COM DOCKER
RODRIGUES, C. W. N. 1
CANATO, R. L. C. 2
RESUMO: A virtualização de recursos já se consolidou como opção de baixo custo, flexível e escalável, e as empresas têm investido cada vez mais nesse cenário. No entanto, a virtualização de máquinas virtuais apresenta alguns pontos a serem considerados, como por exemplo, como criar ambientes isolados, que possam rodar simultaneamente diferentes aplicações, onde a divisão é realizada em nível de recursos disponíveis. Com base nesta afirmação, este trabalho pretende apresentar uma introdução ao Docker, uma tecnologia de virtualização baseada em contêiner, suas principais vantagens e possíveis desvantagens em comparação a virtualização baseada em máquinas virtuais.
PALAVRAS-CHAVE: Docker. Contêiner. Máquinas Virtuais. Virtualização.
ABSTRACT: Resource virtualization has already been consolidated as a low-cost, flexible and scalable option, and companies have invested more and more in this scenario. However, virtualization of virtual machines presents some points to be considered, such as how to create isolated environments that can simultaneously run different applications, where the division is performed at the level of available re-sources. Based on this assertion, this paper intends to present an introduction to Docker, a container-based virtualization technology, its main advantages and possible disadvantages compared to virtualiza-tion based on virtual machines.
KEYWORDS: Docker. Container. Virtual Machines. Virtualization.
1. INTRODUÇÃOA crescente demanda por computação em nuvem tem impulsionado e
consolidado a tecnologia de virtualização. A virtualização não é uma tecnologia nova.
Iniciou-se por volta de 1970, com a arquitetura do IBM 370, na qual o sistema
operacional VM pode apresentar várias máquinas virtuais completas para diferentes
programas em execução no mesmo computador (Coulouris, 2013).
De extrema utilidade no nosso cotidiano, a virtualização de servidores (criação
de máquinas virtuais) permite a execução de uma variedade de sistemas operacionais
através da alocação de recursos de hardware, como por exemplo, memória RAM,
armazenamento, processamento, etc., que são gerenciados através de uma camada
de virtualização, o hipervisor, que consiste em um software, firmware ou hardware que
1 carloswnr@gmail.com2 canato.fmpfm@gmail.com
Faculdade Municipal Professor Franco Montoro
12
123456789
1011121314151617181920212223242526272829
30
31
32
33
34
35
36
37
38
39
3456
2
possibilita a criação e monitoramento de máquinas virtuais, que entre outras tarefas,
traduzem as solicitações para o hardware da máquina física.
Inúmeras são as vantagens de uma máquina virtual em comparação a
instalação de sistemas operacional diretamente no hardware físico, sendo uma das
principais, o isolamento proporcionado pela máquina virtual, assegurando que não
haverá interferência do que é executado em uma máquina virtual em um ambiente
físico e o que é executado no ambiente físico também não vá interferir no ambiente
virtual. No entanto, por necessitar de uma camada de sistema operacional para cada
aplicação, demanda mais recursos, consumindo mais espaço em disco e reduz o nível
de portabilidade. Dessa forma, o objetivo deste trabalho é apresentar uma introdução
ao Docker, uma tecnologia de virtualização baseada em containeres, suas principais
vantagens e possíveis desvantagens em comparação a virtualização tradicional.
1.1 MOTIVAÇÃOApesar da sua ampla utilização, as máquinas virtuais tradicionais necessitam de
um sistema operacional inteiro, bibliotecas e kernel parcial que são simulados através
de um hardware artificial. Dessa forma, como manter o desempenho, levando em
consideração o crescente número de aplicações e serviços alavancados pela
computação em nuvem? Uma das alternativas propostas tem sido a utilização do
Docker, uma tecnologia recente de virtualização baseada em container, utilizado para
“empacotar” uma aplicação (Gomes, 2017). Diferentemente da virtualização tradicional,
a virtualização com o Docker faz uso compartilhado das estruturas com o sistema
operacional hospedeiro, o que resulta em maior desempenho na virtualização, com
container leves, já que ao invés de simular o hardware, os containeres fazem
simulação do sistema operacional, proporcionando economia significativa de recursos,
maior disponibilidade, similaridade do sistema e consequentemente a sua
padronização e replicação, ou seja, o Docker busca adotar a filosofia, construa uma
vez, execute onde quiser (Gomes, 2017). As motivações de uso da ferramenta Docker
são diversas, entre as principais podemos citar: a facilidade de replicação, velocidade
no desenvolvimento e ambiente de produção com mesmas versões e sistemas
operacionais. Um comparativo entre a virtualização tradicional (baseada em máquinas
78
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
3
virtuais) e a virtualização com o Docker (baseada em containers) poder ser verificado
na Figura 1 a seguir:
Figura 1: Virtualização máquinas virtuais x containers.
Fonte: Adaptado de (IBM, 2015).
2. CONCEITOS FUNDAMENTAIS
2.1 DockerDe acordo com (GOMES, 2017), o Docker é uma plataforma de virtualização
open source, desenvolvida para facilitar a implantação e execução de aplicações em
ambientes isolados, desenhada com o objetivo de disponibilizar uma aplicação de
forma mais rápida possível. Com o Docker é possível gerenciar facilmente a
infraestrutura da aplicação, o que resulta em mais agilidade nos processos de criação,
manutenção e modificação de um serviço (GOMES, 2017). O Docker possibilita a
compilação de imagens e execução de aplicações distribuídas em um ambiente isolado
de forma flexível, definido como container.
910
71
72
73
747576
77
78
7980
81
82
83
84
85
86
87
88
4
O Docker foi desenvolvido utilizando a linguagem de programação GO, criada
pela Google (GO, 2009) e mantida pela Docker Inc., sediada em São Francisco,
Califórnia (DOCKER, 2013).
Com o uso do Docker é possível ter acesso a ambientes prontos, que são
compartilhados através de uma nuvem pública disponibilizada pelo Docker,
possibilitando que possam ser criados ambientes específicos através de customizações
dos ambientes disponibilizados. Um exemplo dessa utilização é a configuração de
módulos específicos de um determinado software, de acordo com a necessidade da
aplicação, criando um ambiente customizado, com o menor esforço possível.
Segundo (GOMES, 2017), normalmente os ambientes em Docker são
viabilizados com maior velocidade, visto que, neste caso, o ambiente não consiste em
um sistema operacional inteiro, mas sim, do início de um processo, sendo o tempo de
disponibilização inferior ao da virtualização tradicional, já que a virtualização com o
Docker é realizada em nível de sistema operacional, através da execução de múltiplos
processos isolados no mesmo host, gerenciados pelo kernel do sistema operacional. A
Figura 2 ilustra esses processos isolados, denominados no Docker como container.
Figura 2: Execução de processos isoladamente - container.
Fonte: (GTA-UFRJ, 2016).
1112
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106107108
109
5
De acordo com (GOMES, 2017), por possuir um conjunto de softwares, o Docker
pode ser considerado um ecossistema, o qual é composto dos seguintes softwares:
Docker Engine: Daemon responsável tanto pelos containers quanto pelo
cliente que é usado para enviar comandos ao daemon, considerado como
o software base de toda a solução.
Docker Compose: Baseado em um arquivo de definição, é a ferramenta
responsável pela execução de múltiplos containers.
Docker Machine: Ferramenta responsável pela criação e manutenção de
ambientes Docker, independente do ambiente (máquinas físicas, virtuais
ou nuvem).
A instalação das ferramentas do Ecossistema Docker pode ser realiza em
diversos sistemas operacionais, como por exemplo, Linux, Windows e MacOS.
2.1.1 ContainerO container é o modelo utilizado pelo Docker para realizar o "empacotamento"
da aplicação. Considerada como propriedade fundamental de um container é de serem
isolados em nível de disco, memória, processamento e rede, atribuindo-lhe maior
flexibilidade, proporcionando a coexistência de ambientes distintos num mesmo host.
De forma simplificada, podemos concluir que o objetivo de um container é a execução
de múltiplos processos e aplicativos de forma independente, resultando em melhor
utilização de infraestrutura ao mesmo tempo em que mantém a segurança como se
fossem executados em sistemas operacionais separados. A Figura 3 a seguir, ilustra
um container Docker:
1314
110
111
112
113
114
115
116
117
118119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
6
Figura 3: Exemplo de um container Docker.
Fonte: (MUNDODOCKER, 2018).
Com o uso de container existe a possibilidade de desativação de uma parte de
aplicação, que pode ocorrer por necessidade de manutenção ou atualização, que
nesse caso, utilizando containers, não será necessário interromper a aplicação como
um todo. Outra vantagem dos containers é de não necessitarem de um sistema
operacional completo. Estes são executados através do uso de imagens, conforme
mencionado a seguir.
2.1.2 ImagemDe forma bem simplificada, podemos definir uma imagem Docker como sendo
um template de um determinado sistema operacional, a qual pode ou não, conter um
software específico. Consideradas a estrutura de base na construção de um container,
concluímos que, uma imagem Docker consiste da abstração da infraestrutura em
estado somente leitura, de onde será instanciado o container. O container é iniciado a
partir de uma imagem, sendo assim, nunca teremos uma imagem em execução.
Normalmente, um container é iniciado a partir de uma única imagem, no entanto, caso
seja necessário, basta realizar customizações na imagem. A Figura 4 ilustra uma
imagem Docker:
1516
136137138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
7
Figura 4: Exemplo de uma imagem Docker.
Fonte: (MUNDODOCKER, 2018).
As imagens Docker podem ser oficiais ou não oficiais. A identificação de uma
imagem oficial ou não oficial pode ser feita com base no seu nome, sendo que as
imagens oficiais não possuem usuário no seu nome e as não oficiais possuem a
identificação do usuário no seu nome, como por exemplo, para a imagem php
disponibilizada pelo repositório oficial o nome é “php”, e a disponibilizada pelo
repositório não oficial é precedida pelo nome do usuário que a mantém, ou seja, o
nome da imagem é “naugebec/php/fpm”. As imagens oficiais são mantidas e
disponibilizadas na nuvem Docker (EXPLORE, 2018). As imagens não oficiais são
disponibilizadas por outros usuários, como por exemplo, pelo usuário identificado por
naugebec (NAUGEBEC, 2014). Esse repositório de imagens é conhecido como
registros do Docker. As Figuras 5 e 6 a seguir, ilustram a disponibilização das imagens
oficiais e não oficiais, respectivamente.
Figura 5: Repositório de imagens oficiais mantidas pelo Docker.
Fonte: (EXPLORE, 2018).
1718
156157158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173174175
8
Figura 6: Repositório de imagens não-oficiais mantidas por outros usuários.
Fonte: (NAUGEBEC, 2014).
2.1.3 RegistrosRepositório que permite aos usuários a construção, armazenamento e
distribuição de imagens Docker que é realizada através do Docker Hub (DOCKER-
HUB, 2016), que possui funcionalidade semelhante ao github, uma plataforma de
hospedagem e repositório de código fonte que usa o git como controle de versões,
possibilitando a construção e compartilhamento de imagens.
3. Arquitetura DockerUtilizando recursos nativos do Linux para gerenciamento de processamento,
memória, acessos de usuários, firewall, entre outros, o Docker teve sua versão beta
lançada em 2013 e em 2014 a primeira versão estável, a qual, trazia como principais
melhorias: testes, implantação e execução das aplicações. Suas bibliotecas são
escritas em Linguagem GO, C e C++, dando suporte a uma ampla gama de tecnologias
de isolamento. Um exemplo de composição da arquitetura do Docker pode ser
visualizado na Figura 7 a seguir:
1920
176177178179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
9
Figura 7: Exemplo de arquitetura Docker.
Fonte: Adaptado de (JANCORG, 2015).
4. Docker versus Máquina VirtualA virtualização de uma máquina virtual instancia o sistema operacional por
inteiro, ou seja, todas suas bibliotecas e dependências para cada uma das máquinas
virtuais criadas.
Já o Docker (container) é executado em cima de um arquivo de sistema
operacional, sendo assim, vários containers podem ser executados em cima de uma
mesma imagem. Dessa forma, os containers necessitam de muito menos recursos,
pois possuem apenas "parte" do sistema operacional, resultando em maior velocidade
de inicialização e de resposta as requisições. Um esboço desse comparativo pode ser
verificado na Figura 8 a seguir:
2122
196197198
199
200
201
202
203
204
205
206
207
208
209
210
10
Figura 8: Container x Virtual Machines.
Fonte: Adaptado de (DZONE, 2018).
Com base na Figura 8, podemos verificar que para cada uma das aplicações
que estão sendo executadas no modelo de virtualização tradicional (Virtual Machine), é
necessário que exista uma instalação de sistema operacional. Diferentemente, no
modelo de virtualização através de Containers, uma única instalação de sistema
operacional é necessária para executar todas as aplicações.
5. VANTAGENSDiversas são as vantagens oferecidas pelo modelo de virtualização baseada em
containers pelo Docker, sendo destacada a seguir uma compilação das principais:
Ambiente flexível: Em ambientes que utilizam testes contínuos, uma vez
que não existe a necessidade de ambientes com as mesmas configurações.
Camada extra de abstração: Adição de uma camada de abstração, já que
com o uso do Docker, as aplicações são executadas dentro de containers;
2324
211212213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
11
Economia de recursos: Provavelmente uma das maiores vantagens do
Docker em relação à virtualização de máquinas é a possibilidade de
economizar recursos computacionais.
Isolamento: Segundo relatório publicado pela Gartner, os containers Docker
são tão bons quanto o hipervisor de uma máquina virtual em se tratando de
isolamento e segregação de recursos.
Portabilidade: Considerada como uma das principais vantagens do Docker,
proporcionando facilidade de migração e funcionamento em diversos
provedores de computação em nuvem devido a sua característica
multiplataforma.
Replicação: Indicado quando é necessário replicar o ambiente, seja por uma
ou muitas alterações. Esta replicação é facilitada com o uso de containers,
tornando mais rápida a replicação sem impactar o sistema como um todo.
Versionamento: Diferentemente da virtualização tradicional, onde era
necessária a criação e manutenção do repositório de imagens, utilizando o
Docker, o ciclo de desenvolvimento pode ser simplificado através de um
esquema de controle de versões, semelhante ao GIT.
6. DESVANTAGENSAlgumas das desvantagens da virtualização utilizando o Docker citado na
literatura são:
Overhead: O processo de criação do container, transmissão e captura dos
pacotes recebidos para a aplicação no Docker pode criar overhead das
operações, além do consumo de memória, disco e processamento do
gerenciamento desses processos.
2526
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
12
Segurança: Diferentemente da virtualização utilizando a tecnologia de
máquinas virtuais onde o isolamento é total, na virtualização de containers o
isolamento é parcial, o que pode reduzir os níveis de segurança.
7. CONSIDERAÇÕES FINAISPor utilizar diretamente o kernel do seu host, trabalha de forma diferente de
virtualização baseada em máquinas virtuais, consumindo menos recursos e trazendo
melhoria no desempenho. Dessa forma, a tecnologia de virtualização baseada em
containers proposta pelo Docker proporciona maior velocidade na disponibilização e
atualização de ambientes, favorecendo quando existe a necessidade de múltiplos
ambientes com diferentes versões de software. Além da agilidade e economia de
recursos, a sua utilização proporciona maior autonomia, impactando diretamente na
entrega de mais soluções em menos tempo.
8. REFERÊNCIAS
COULOURIS, G; Dollimore, J; Kindberg, T. Blair, G. Sistemas Distribuídos - Conceitos e
Projetos. Bookman. 5ª Edição. 2013.
DOCKER. Company. 2013. Disponível em: https://www.docker.com/company. Acessado
em: 11/11/2018.
DOCKER-EXPLORE. Explore Official Repositories. Disponível em:
https://hub.docker.com/explore/?page=2. Acessado em: 15/11/2018.
DOCKER-HUB. 2016. Disponível em: https://hub.docker.com/. Acessado em:
12/11/2018.
DZONE. Containers vs. Serverless from a DevOps Standpoint. Disponível em:
https://dzone.com/articles/containers-vs-serverless-from-a-devops-standpoint.
Acessado em: 12/11/2018.
2728
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
13
GO. A linguagem de programação Go. 2009. Disponível em: http://www.golangbr.org.
Acessado em: 11/11/2018.
GOMES, R. Docker para desenvolvedores. LeanPub. 2017.
GTA-UFRJ. Containers. Uma maneira de compartimentalizar processos. 2016.
Disponível em: https://www.gta.ufrj.br/ensino/eel879/trabalhos_vf_2017_2/
docker/containers.html. Acessado em 10/11/2018.
IBM. Container, o novo passo para a virtualização. 2015. Disponível em:
https://www.ibm.com/developerworks/community/blogs/tlcbr/entry/mp234?lang=en.
Acessado em 10/11/18.
JANCORG. Docker Code Curiosities. 2015. Disponível em: http://jancorg.github.io.
Acessado em: 11/11/2018.
MUNDODOCKER. Disponível em: https://www.mundodocker.com.br. Acessado em:
12/11/2018.
NUAGEBEC. Repositório Docker não oficial. 2014. Disponível em:
https://hub.docker.com/r/nuagebec/. Acessado em: 11/11/2018.
2930
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
Recommended