Vous êtes sur la page 1sur 9

Karl Matthias

Sean P. Kane

Novatec

Authorized Portuguese translation of the English edition of titled Docker: Up and Running, ISBN
9781491917572 2015 Karl Matthias, Sean P. Kane. This translation is published and sold by
permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same.
Traduo em portugus autorizada da edio em ingls da obra Docker: Up and Running, ISBN
9781491917572 2015 Karl Matthias, Sean P. Kane. Esta traduo publicada e vendida com a
permisso da O'Reilly Media, Inc., detentora de todos os direitos para publicao e venda desta obra.
Novatec Editora Ltda. 2016.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. proibida a reproduo
desta obra, mesmo parcial, por qualquer processo, sem prvia autorizao, por escrito, do autor e
da Editora.
Editor: Rubens Prates YG20151222
Assistente editorial: Priscila A. Yoshimatsu
Traduo: Alison Miazaki
Reviso tcnica: Rafael Gomes
Reviso gramatical: Lia Gabriele Regius
Editorao eletrnica: Carolina Kuwabata
ISBN: 978-85-7522-473-1
Histrico de impresses:
Janeiro/2016

Primeira edio

Novatec Editora Ltda.


Rua Lus Antnio dos Santos 110
02460-000 So Paulo, SP Brasil
Tel.: +55 11 2959-6529
E-mail: novatec@novatec.com.br
Site: www.novatec.com.br
Twitter: twitter.com/novateceditora
Facebook: facebook.com/novatec
LinkedIn: linkedin.com/in/novatec

captulo 1

Introduo

Origem do Docker
O Docker foi inicialmente apresentado ao mundo sem aviso prvio ou qualquer
tipo de alarde por Solomon Hykes, fundador e CEO da dotCloud, em uma palestra relmpago de cinco minutos na Python Developers Conference, em Santa
Clara, na Califrnia, em 15 de maro de 2013. No momento do anncio, cerca de
apenas 40 pessoas de fora da dotCloud tiveram a chance de experimentar o Docker.
Em poucas semanas aps o anncio, houve uma quantidade impressionante de
notcias sobre o Docker. O projeto foi rapidamente transformado em open source
e disponibilizado publicamente no GitHub, no qual qualquer um poderia fazer
o download e contribuir para o projeto. Em poucos meses, mais e mais pessoas
no mercado comearam a ouvir sobre o Docker e em como ele revolucionaria a
maneira como os softwares eram desenvolvidos, entregues e executados. E dentro
de um ano, poucos no conheciam o Docker, mas muitos no tinham certeza sobre
o que exatamente ele era e por que as pessoas estavam to animadas com ele.
O Docker uma ferramenta que promete encapsular facilmente o processo de
criao de um artefato distribudo para qualquer aplicao, implant-lo em escala
em qualquer ambiente e racionalizar o fluxo de trabalho e a responsividade das
organizaes de software gil.

O que esperar do Docker


Embora visto como uma plataforma de virtualizao, o Docker muito mais
que isso. O domnio do Docker se estende por alguns segmentos bem estabelecidos do mercado, que incluem tecnologias como KVM, Xen, OpenStack, Mesos,
22

Captulo 1 Introduo

23

Capistrano, Fabric, Ansible, Chef, Puppet, SaltStack etc. H algo muito revelador
sobre a lista de produtos com os quais o Docker compete, e talvez voc j tenha
percebido. Por exemplo, a maioria dos engenheiros no diria que uma ferramenta
de virtualizao compete com uma ferramenta de gerenciamento de configuraes
e, ainda assim, ambas so atingidas pelo Docker. As tecnologias listadas tambm
so aclamadas por sua habilidade de aumentar a produtividade, e isso que tem
causado muita agitao no meio. O Docker est exatamente no meio de algumas
das tecnologias mais promissoras da ltima dcada.
Se voc fizer uma comparao funcionalidade por funcionalidade do Docker e
do maior campeo de cada uma dessas tecnologias, o Docker se pareceria muito
com um competidor mediano. Ele mais forte em algumas reas do que em
outras, mas o que o Docker oferece um conjunto de recursos que atendem a
uma ampla variedade de desafios no fluxo de trabalho. O Docker fornece vrias
funcionalidades teis ao combinar a facilidade de ferramentas de implantao,
como Capistrano e Fabric, com a facilidade de administrar sistemas de virtualizao e, ento, prov elos que tornam simples de implementar a automatizao
do fluxo de trabalho e orquestrao.
Novas tecnologias vm e vo aos montes, e uma dose de ceticismo quanto a
uma nova onda sempre saudvel. Sem se aprofundar na tecnologia, seria fcil
considerar o Docker como mais uma tecnologia que resolve algum problema
especfico para equipes de desenvolvimento e operao. Se voc olhar para o
Docker apenas como uma tecnologia de virtualizao ou implantao, ele pode
no parecer muito atraente. No entanto, o Docker muito mais do que aparenta
ser em sua superfcie.
difcil e, s vezes, caro fazer a comunicao e os processos entre equipes funcionar bem, mesmo em pequenas empresas. Ao mesmo tempo, vivemos em um
mundo em que a comunicao eficaz de informaes detalhadas entre equipes
cada vez mais necessria. Uma ferramenta que reduz essa complexidade de
comunicao enquanto ajuda na produo de um software mais robusto seria
um grande acerto. E exatamente por isso que o Docker merece um olhar mais
profundo. No nenhuma panaceia, e uma implementao bem feita do Docker
requer algum esforo mental, mas o Docker uma boa abordagem para resolver
alguns dos problemas de empresas do mundo real e ajuda empresas a entregar
softwares de melhor qualidade com mais rapidez. Entregar um fluxo de trabalho
do Docker com um bom design pode tornar as equipes tcnicas mais felizes e
aumentar o lucro real para as empresas.

24

Primeiros passos com Docker

Ento, onde di mais para as empresas? Entregar um software na velocidade


esperada no mundo de hoje difcil de se fazer bem e, com o crescimento das
empresas de um ou dois desenvolvedores para muitas equipes de desenvolvedores, o nus da comunicao relativa a entregas de novos releases torna-se muito
mais pesado e difcil de gerenciar. Os desenvolvedores tm que entender muitos
aspectos complexos sobre o ambiente no qual eles entregaro o software, e as
equipes de operaes da produo precisam entender cada vez mais da essncia
do software que eles implantam. Em geral, todas essas so habilidades interessantes de se trabalhar, porque levam a uma melhor compreenso do ambiente
como um todo e, portanto, incentivam o desenho de um software robusto, mas
essas mesmas habilidades so muito difceis de escalar de forma eficaz com a
acelerao do crescimento de uma organizao.
Os detalhes do ambiente de cada empresa muitas vezes exigem muita comunicao que no agrega valor para as equipes envolvidas. Por exemplo, exigir que os
desenvolvedores solicitem a uma equipe de operaes a implantao 1.2.1 de uma
biblioteca em particular os atrasa e no agrega nenhum valor de negcio para a
empresa. Se os desenvolvedores pudessem simplesmente atualizar a verso da biblioteca que eles usam, escrever seu cdigo, testar com a nova verso e implant-la,
o tempo de entrega seria consideravelmente reduzido. Se o pessoal de operao
pudesse atualizar o software no host sem ter que coordenar mltiplas equipes
de desenvolvedores o processo seria mais gil. O Docker ajuda na construo de
uma camada de isolamento em software que reduz a carga de comunicao no
mundo dos humanos.
Alm de ajudar com problemas de comunicao, o Docker influencia a arquitetura do software no sentido de encorajar aplicaes trabalhadas de modo mais
robusto. Sua filosofia de arquitetura gira em torno de contineres atmicos ou
descartveis. Durante a implantao, todo ambiente sobre o qual a aplicao
antiga roda jogado fora com ela. Nada no ambiente da aplicao viver mais
do que a aplicao em si; essa uma pequena ideia com grandes repercusses.
Isso significa que as aplicaes no so suscetveis a, acidentalmente, se sustentar
sobre artefatos de releases anteriores. Isso significa que mudanas efmeras de
debug so menos propensas a continuar existindo em futuros releases que as
recolheram do sistema de arquivos local. E isso significa que as aplicaes so
altamente portveis entre servidores porque todo estado tem que ser includo diretamente dentro do artefato de implantao e ser imutvel, ou enviado para uma
dependncia externa, como um banco de dados, cache ou servidor de arquivos.

Captulo 1 Introduo

25

Isso leva a aplicaes que no so apenas mais escalveis, mas mais confiveis.
Instncias de contineres da aplicao podem ir e vir com pouca repercusso no
uptime do frontend. Essas so escolhas comprovadas de arquitetura que tm sido
bem-sucedidas para aplicaes sem uso do Docker, mas as opes de design includas no design prprio do Docker seguiro as melhores prticas, e isso timo.

Benefcios do fluxo de trabalho do Docker


difcil categorizar de modo coeso tudo que o Docker possibilita. Quando
bem implementado, ele beneficia a empresa, as equipes, os desenvolvedores e
os engenheiros de operao de vrias maneiras. Isso simplifica as decises de
arquitetura, pois todas as aplicaes so parecidas do ponto de vista do sistema
que as hospeda. Isso facilita a escrita e o compartilhamento de ferramentas entre
aplicaes. Nada no mundo traz benefcios sem desafios, mas o Docker surpreendentemente mais benfico do que desafiador. Aqui esto mais algumas coisas
que voc obtm com o Docker:
Empacotamento de software que extrai o melhor das habilidades que os desenvolvedores
j tm.

Muitas empresas tm que criar posies de trabalho para liberar e desenvolver


engenheiros para gerenciar todo conhecimento e ferramentas necessrias para
criar pacotes de software para suas plataformas suportadas. Ferramentas como
rpm, mock, dpkg e pbuilder podem ser complicadas de usar, sendo necessrio
aprender cada uma delas separadamente. O Docker junta todos os seus requisitos em um nico pacote que definido em um nico arquivo.
Empacotamento de aplicao de software e sistemas de arquivos (filesystems) necessrios
do sistema operacional juntos em um nico formato de imagem padronizado.

No passado, normalmente voc precisaria no apenas empacotar sua aplicao,


mas muitas das dependncias envolvidas, incluindo bibliotecas e daemons.
Entretanto, voc no conseguia assegurar que 100% do ambiente de execuo era idntico. Tudo isso tornava o empacotamento difcil de dominar e de
conquistar a confiana de muitas empresas. No raro, algum executando
Scientific Linux tentava implantar um pacote de comunidade, testado apenas
no Red Hat Linux, esperando que os pacotes fossem parecidos o suficiente
para o que eles precisavam. Com o Docker voc implanta sua aplicao com
todo e qualquer arquivo que ela precisa para ser executada. As imagens em
camadas do Docker fazem disso um processo eficiente que assegura que sua
aplicao est rodando no ambiente esperado.

26

Primeiros passos com Docker

Uso de artefatos empacotados para testar e entregar exatamente o mesmo artefato para
todos os sistemas em todos os ambientes.

Quando os desenvolvedores fazem um commit para um sistema de controle de


verso, pode-se criar uma nova imagem do Docker, que pode passar por todo
o processo de teste e ser implantado em produo sem qualquer necessidade
de recompilao e reempacotamento em qualquer passo do processo.
Abstrao de softwares de hardwares sem sacrificar recursos.

As tradicionais solues de virtualizao como VMware so normalmente


usadas quando as pessoas precisam criar uma camada de abstrao entre o
hardware e o software que roda nele, comprometendo recursos. Os hypervisors que gerenciam as VMs e cada kernel de VM em execuo consomem uma
porcentagem dos recursos do hardware, que no mais estaro disponveis para
hospedar aplicaes. Um continer, por outro lado, apenas outro processo
que fala diretamente com o kernel do Linux e logo pode utilizar mais recursos,
at que a cota limite de recursos seja atingida.
Quando o Docker foi lanado pela primeira vez, os contineres do Linux j existiam h alguns anos, e muitas das outras tecnologias que foram construdas sobre
eles no so realmente novas. Entretanto, a mistura nica da forte arquitetura e
das escolhas de fluxo de trabalho do Docker combinadas se tornou muito mais
potente que a soma das partes. O Docker finalmente torna os contineres do Linux,
que j existem h mais de uma dcada, algo acessvel a tecnlogos medianos.
Ele encaixa os contineres dentro de fluxos de trabalho e processos de empresas
reais. E os problemas discutidos anteriormente afetaram tantas pessoas que o
interesse no projeto Docker tem aumentado com mais rapidez do que qualquer
pessoa esperaria.
No primeiro ano, novos usurios do projeto se surpreenderam ao descobrir que o
Docker ainda no estava pronto para a produo. Entretanto, um fluxo constante
de commits da comunidade open source do Docker moveram o projeto adiante
a passos largos. E esses passos parecem s acelerar com o tempo. Agora que o
Docker j est no ciclo 1.x de lanamento, a estabilidade est boa, a adoo em
produo j uma realidade e vrias empresas esto encarando o Docker como
a soluo para alguns srios problemas que elas tm enfrentado no processo de
entrega de software.

Captulo 1 Introduo

27

O que o Docker no
O Docker pode ser utilizado para resolver uma ampla variedade de desafios que
outras categorias de ferramentas tradicionalmente deveriam corrigir; entretanto,
a variedade de funcionalidades do Docker muitas vezes significa que ele falta
em profundidade em um recurso especfico. Por exemplo, algumas organizaes
podem acreditar que podero remover completamente a ferramenta de gerenciamento de configurao quando migrarem para o Docker, mas o real poder do
Docker que, embora possa substituir alguns aspectos das mais tradicionais ferramentas, ele geralmente compatvel com essas ferramentas ou at aperfeioado
ao se combinar a elas. Na lista a seguir, ns exploramos algumas das categorias
de ferramentas que o Docker no substitui de forma direta, mas que geralmente
podem ser utilizadas em conjunto com ele para alcanar grandes resultados:
Plataforma de virtualizao (VMware, KVM etc.)

Um continer no uma mquina virtual no sentido tradicional. Uma mquina


virtual contm um sistema operacional completo, rodando sobre o sistema
operacional do host. A maior vantagem que fcil rodar vrias mquinas
virtuais com sistemas operacionais radicalmente diferentes em um nico host.
Com contineres, tanto o host quanto o continer dividem o mesmo kernel.
Isso significa que os contineres utilizam menos recursos do sistema, mas
precisam estar sob o mesmo sistema operacional (i.e., Linux).
Plataforma de nuvem (Openstack, CloudStack etc.)

Assim como a virtualizao, o fluxo de trabalho de um continer tem muitas


similaridades superficiais com plataformas de nuvem. Ambos so aclamados
por permitir que aplicaes sejam escaladas horizontalmente em resposta
a uma mudana na demanda. O Docker, entretanto, no uma plataforma
de nuvem. Ele s lida com a implantao, execuo e gerenciamento de contineres em um host de Docker preexistente. Ele no permite que voc crie
uma novo host (instncia), armazenamento de objetos, armazenamento em
bloco e muitos dos outros recursos que so normalmente associados a uma
plataforma de nuvem.
Gerenciamento de configuraes (Puppet, Chef etc.)

Embora o Docker possa melhorar de forma significativa a habilidade de


uma empresa de gerenciar aplicaes e suas dependncias, ele no substitui
diretamente o gerenciamento de configuraes tradicional. Dockerfiles so

28

Primeiros passos com Docker

usados para definir como um continer deveria se parecer no momento de


criao (build), mas no gerenciam o estado atual do continer e no podem
ser usados para gerenciar o host do Docker.
Framework de implantao (Capistrano, Fabric etc.)

O Docker facilita muitos aspectos da implantao por criar imagens de contineres autocontidas que encapsulam todas as dependncias de uma aplicao
e que podem ser implantadas, em todos os ambientes, sem mudanas. Entretanto, o Docker no pode ser utilizado sozinho para automatizar processos
complicados de implantao. Outras ferramentas ainda so necessrias para
unir a automao de um fluxo de trabalho maior.
Ferramenta de gerenciamento de carga (Mesos, Fleet etc.)

O servidor Docker no tem nenhum conceito interno de cluster. Ferramentas


de orquestrao adicionais (incluindo a ferramenta Swarm do prprio Docker)
devem ser usadas para coordenar o trabalho de maneira inteligente por um
conjunto de hosts Docker, para rastrear o estado atual de todos os hosts e seus
recursos e manter um inventrio dos contineres em execuo.
Ambiente de desenvolvimento (Vagrant etc.)

O Vagrant uma ferramenta de gerenciamento de mquina virtual para desenvolvedores que costumam simular pilhas de servidores que se assemelham ao
ambiente de produo no qual a aplicao ser implantada. Entre outras coisas, o
Vagrant facilita a execuo do Linux em mquinas Mac OS X e Windows. Como
o servidor Docker s roda no Linux, o Docker fornece o boot2docker e o Docker
Machine para permitir que os desenvolvedores utilizem rapidamente mquinas
Docker com base em Linux em vrias plataformas. O boot2docker e o Docker
Machine so suficientes para muitos fluxos de trabalho padro do Docker, mas
eles no disponibilizam a variedade de recursos encontrados no Vagrant.
Desvendar o Docker pode ser bem desafiador quando algum o conhece sem
uma referncia de peso. No prximo captulo, faremos uma ampla viso geral do
Docker: o que , como deveria ser usado e quais vantagens ele oferece quando
implementado com tudo isso em mente.