Karl Matthias Sean P. Kane



Documentos relacionados
Pete Goodliffe. Novatec

Google Android para Tablets

Jonathan Stark Brian Jepson

Ricardo Lino Olonca. Novatec

Wilson Moraes Góes. Novatec

Google Analytics Justin Cutroni

Desenvolvimento de Grandes Aplicações Web

PDF Explicado John Whitington

Crie Seu Próprio Site

marketing ágil Utilização de Metodologias Ágeis em Projetos de Marketing Michelle Accardi-Petersen Novatec

Primeiros Passos com o Raspberry Pi

Desenvolvendo Websites com PHP

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

David Hows Peter Membrey Eelco Plugge

Novatec Editora Ltda. [2014].

Ademir C. Gabardo. Novatec

Karl Matthias Sean P. Kane

Scrum em Ação. Gerenciamento e Desenvolvimento Ágil de Projetos de Software. Andrew Pham Phuong-Van Pham. Novatec

As Leis Fundamentais do Projeto de Software

Design Centrado no Usuário

A Arte de SEO. Eric Enge, Stephan Spencer, Jessie Stricchiola e Rand Fishkin Introdução de John Battelle. Novatec

Padrões de Projeto em PHP

Introdução à Computação

TUTORIAL VMWARE WORKSTATION 8. Aprenda a instalar e configurar corretamente uma máquina virtual utilizando VMware Workstation com este tutorial

Laboratório de Redes. Professora Marcela Santos

Plataforma na nuvem do CA AppLogic para aplicativos corporativos

Planejando o aplicativo

Desenvolvimento de Grandes Aplicações Web

Julia Elman e Mark Lavin. Novatec

Aprendendo. Unix no OS X. Mountain Lion. Mergulhando no Terminal e no Shell. Dave Taylor. Novatec

Ricardo R. Lecheta. Novatec

Hélio Engholm Jr. Novatec

1. Quem somos nós? A AGI Soluções nasceu em Belo Horizonte (BH), com a simples missão de entregar serviços de TI de forma rápida e com alta qualidade.

Empresa. Dave Gray. Novatec. com Thomas Vander Wal

Processos Técnicos - Aulas 4 e 5

Equipes de Software. Um guia para o desenvolvedor de software se relacionar melhor com outras pessoas. Brian W. Fitzpatrick Ben Collins-Sussman

Distribuidor de Mobilidade GUIA OUTSOURCING

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores

Aprendendo Programação. ios. Alasdair Allan. Novatec

Gerenciamento. de projetos. Bart Gerardi. Novatec. Como evitar problemas previsíveis para o sucesso do projeto

Forneça a próxima onda de inovações empresariais com o Open Network Environment

ESTUDO DE CASO WINDOWS VISTA

Lojas Virtuais com. Magento. André Nobrega Gugliotti. Novatec

Adail Henrique Spínola Horst Aécio dos Santos Pires André Luis Boni Déo. Novatec

Conceitos Básicos de Rede. Um manual para empresas com até 75 computadores

Josh Lockhart. Novatec

Sistemas Operacionais

Hands On para (web)developers: Docker vs Vagrant

Administração de Sistemas de Informação Gerenciais

Construindo Aplicações Node com MongoDB e Backbone Mike Wilson

Soluções em. Cloud Computing. Midia Indoor. para

Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes

Entrar neste site/arquivo e estudar esse aplicativo Prof. Ricardo César de Carvalho

Web Analytics (Google analytics, Web trafic XITI, Coremetrics, etc.); Ferramentas de gestão de listas de s (Mailchimp, constant contact, etc.

agility made possible

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V

Virtualização de Sistemas Operacionais

Sistemas Operacionais. Conceitos de um Sistema Operacional

VERIFIQUE SE SEUS SITES ESTÃO PRONTOS PARA O BLACK FRIDAY 11 MANEIRAS DE ACABAR COM OS PROBLEMAS DE DESEMPENHO

Introdução ao Modelos de Duas Camadas Cliente Servidor

Análise de custo projetado da plataforma SAP HANA

ADMINISTRAÇÃO DE ATIVOS DE TI GERENCIAMENTO DE LIBERAÇÃO

TUTORIAL PRÁTICO SOBRE Git. Versão 1.1

Brandon Rhodes John Goerzen

Parceiro Oficial de Soluções Zabbix no Brasil

ENGENHARIA DE SOFTWARE I

Pramod J. Sadalage Martin Fowler

Operador de Computador. Informática Básica

Como incluir artigos:

CA Mainframe Chorus for Storage Management Versão 2.0

Fábrica de Software 29/04/2015

5 Considerações finais 5.1. Reflexões sobre os resultados

edirectory Plataforma ios / Android

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Desenvolvendo Websites com PHP

SISTEMAS DISTRIBUÍDOS

UNIVERSIDADE FEDERAL DE PELOTAS

MINICURSO WINDOWS SERVER 2008 UTILIZANDO O VMWARE PLAYER

Tecnologia para garantir qualidade e eficiência

PÚBLICA, PRIVADA OU HÍBRIDA: QUAL É A MELHOR NUVEM PARA SEUS APLICATIVOS?

18/05/2014. Problemas atuais com o IPv4

Terceirização de RH e o líder financeiro SUMÁRIO EXECUTIVO. Você e o RH estão falando a mesma língua? EM ASSOCIAÇÃO COM

Editor: Rubens Prates Revisão gramatical: Patrizia Zagni Capa: Victor Bittow Editoração eletrônica: Camila Kuwabata e Carolina Kuwabata

Família CJ2. Novos CLPs com alta qualidade comprovada. Controladores Programáveis

EDITORES DE TEXTO Capítulo 1: Avaliação técnica e econômica dos principais editores de texto do mercado.

PARANÁ GOVERNO DO ESTADO

Freelapro. Título: Como o Freelancer pode transformar a sua especialidade em um produto digital ganhando assim escala e ganhando mais tempo

MRP II. Planejamento e Controle da Produção 3 professor Muris Lage Junior

Sistemas Distribuídos

Harrison Kinsley Will McGugan

FUNDAMENTOS DE SISTEMAS DE INFORMAÇÃO

NOKIA. Em destaque LEE FEINBERG

Escolha seu serviço Cloud O melhor do Cloud

No mercado atual, podemos encontrar vários tipos de sistemas operacionais que fazem parte das seguintes classes:

CONSULTORIA E SERVIÇOS DE INFORMÁTICA

Gestão de Relacionamento com o Cliente CRM

Transcrição:

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. Tradução em português autorizada da edição em inglês da obra Docker: Up and Running, ISBN 9781491917572 2015 Karl Matthias, Sean P. Kane. Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. Novatec Editora Ltda. 2016. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates YG20151222 Assistente editorial: Priscila A. Yoshimatsu Tradução: Alison Miazaki Revisão técnica: Rafael Gomes Revisão gramatical: Lia Gabriele Regius Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-473-1 Histórico de impressões: Janeiro/2016 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São 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

capítulo 1 Introdução Origem do Docker O Docker foi inicialmente apresentado ao mundo sem aviso prévio ou qualquer tipo de alarde por Solomon Hykes, fundador e CEO da dotcloud, em uma palestra relâmpago de cinco minutos na Python Developers Conference, em Santa Clara, na Califórnia, em 15 de março de 2013. No momento do anúncio, cerca de apenas 40 pessoas de fora da dotcloud tiveram a chance de experimentar o Docker. Em poucas semanas após o anúncio, houve uma quantidade impressionante de notícias 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 começaram 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 não conheciam o Docker, mas muitos não tinham certeza sobre o que exatamente ele era e por que as pessoas estavam tão animadas com ele. O Docker é uma ferramenta que promete encapsular facilmente o processo de criação de um artefato distribuído para qualquer aplicação, implantá-lo em escala em qualquer ambiente e racionalizar o fluxo de trabalho e a responsividade das organizações de software ágil. O que esperar do Docker Embora visto como uma plataforma de virtualização, o Docker é muito mais que isso. O domínio do Docker se estende por alguns segmentos bem estabelecidos do mercado, que incluem tecnologias como KVM, Xen, OpenStack, Mesos, 22

Capítulo 1 Introdução 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 não diria que uma ferramenta de virtualização compete com uma ferramenta de gerenciamento de configurações e, ainda assim, ambas são atingidas pelo Docker. As tecnologias listadas também são aclamadas por sua habilidade de aumentar a produtividade, e é isso que tem causado muita agitação no meio. O Docker está exatamente no meio de algumas das tecnologias mais promissoras da última década. Se você fizer uma comparação funcionalidade por funcionalidade do Docker e do maior campeão 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 várias funcionalidades úteis ao combinar a facilidade de ferramentas de implantação, como Capistrano e Fabric, com a facilidade de administrar sistemas de virtualização e, então, provê elos que tornam simples de implementar a automatização do fluxo de trabalho e orquestração. Novas tecnologias vêm e vão aos montes, e uma dose de ceticismo quanto a uma nova onda sempre é saudável. Sem se aprofundar na tecnologia, seria fácil considerar o Docker como mais uma tecnologia que resolve algum problema específico para equipes de desenvolvimento e operação. Se você olhar para o Docker apenas como uma tecnologia de virtualização ou implantação, ele pode não parecer muito atraente. No entanto, o Docker é muito mais do que aparenta ser em sua superfície. É difícil e, às vezes, caro fazer a comunicação e os processos entre equipes funcionar bem, mesmo em pequenas empresas. Ao mesmo tempo, vivemos em um mundo em que a comunicação eficaz de informações detalhadas entre equipes é cada vez mais necessária. Uma ferramenta que reduz essa complexidade de comunicação enquanto ajuda na produção de um software mais robusto seria um grande acerto. E é exatamente por isso que o Docker merece um olhar mais profundo. Não é nenhuma panaceia, e uma implementação bem feita do Docker requer algum esforço 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 técnicas mais felizes e aumentar o lucro real para as empresas.

24 Primeiros passos com Docker Então, onde dói mais para as empresas? Entregar um software na velocidade esperada no mundo de hoje é difícil de se fazer bem e, com o crescimento das empresas de um ou dois desenvolvedores para muitas equipes de desenvolvedores, o ônus da comunicação relativa a entregas de novos releases torna-se muito mais pesado e difícil de gerenciar. Os desenvolvedores têm que entender muitos aspectos complexos sobre o ambiente no qual eles entregarão o software, e as equipes de operações da produção precisam entender cada vez mais da essência do software que eles implantam. Em geral, todas essas são habilidades interessantes de se trabalhar, porque levam a uma melhor compreensão do ambiente como um todo e, portanto, incentivam o desenho de um software robusto, mas essas mesmas habilidades são muito difíceis de escalar de forma eficaz com a aceleração do crescimento de uma organização. Os detalhes do ambiente de cada empresa muitas vezes exigem muita comunicação que não agrega valor para as equipes envolvidas. Por exemplo, exigir que os desenvolvedores solicitem a uma equipe de operações a implantação 1.2.1 de uma biblioteca em particular os atrasa e não agrega nenhum valor de negócio para a empresa. Se os desenvolvedores pudessem simplesmente atualizar a versão da biblioteca que eles usam, escrever seu código, testar com a nova versão e implantá-la, o tempo de entrega seria consideravelmente reduzido. Se o pessoal de operação pudesse atualizar o software no host sem ter que coordenar múltiplas equipes de desenvolvedores o processo seria mais ágil. O Docker ajuda na construção de uma camada de isolamento em software que reduz a carga de comunicação no mundo dos humanos. Além de ajudar com problemas de comunicação, o Docker influencia a arquitetura do software no sentido de encorajar aplicações trabalhadas de modo mais robusto. Sua filosofia de arquitetura gira em torno de contêineres atômicos ou descartáveis. Durante a implantação, todo ambiente sobre o qual a aplicação antiga roda é jogado fora com ela. Nada no ambiente da aplicação viverá mais do que a aplicação em si; essa é uma pequena ideia com grandes repercussões. Isso significa que as aplicações não são suscetíveis a, acidentalmente, se sustentar sobre artefatos de releases anteriores. Isso significa que mudanças efêmeras de debug são menos propensas a continuar existindo em futuros releases que as recolheram do sistema de arquivos local. E isso significa que as aplicações são altamente portáveis entre servidores porque todo estado tem que ser incluído diretamente dentro do artefato de implantação e ser imutável, ou enviado para uma dependência externa, como um banco de dados, cache ou servidor de arquivos.

Capítulo 1 Introdução 25 Isso leva a aplicações que não são apenas mais escaláveis, mas mais confiáveis. Instâncias de contêineres da aplicação podem ir e vir com pouca repercussão no uptime do frontend. Essas são escolhas comprovadas de arquitetura que têm sido bem-sucedidas para aplicações sem uso do Docker, mas as opções de design incluídas no design próprio do Docker seguirão as melhores práticas, e isso é ótimo. Benefícios do fluxo de trabalho do Docker É difícil categorizar de modo coeso tudo que o Docker possibilita. Quando bem implementado, ele beneficia a empresa, as equipes, os desenvolvedores e os engenheiros de operação de várias maneiras. Isso simplifica as decisões de arquitetura, pois todas as aplicações são parecidas do ponto de vista do sistema que as hospeda. Isso facilita a escrita e o compartilhamento de ferramentas entre aplicações. Nada no mundo traz benefícios sem desafios, mas o Docker é surpreendentemente mais benéfico do que desafiador. Aqui estão mais algumas coisas que você obtém com o Docker: Empacotamento de software que extrai o melhor das habilidades que os desenvolvedores já têm. Muitas empresas têm que criar posições de trabalho para liberar e desenvolver engenheiros para gerenciar todo conhecimento e ferramentas necessárias para criar pacotes de software para suas plataformas suportadas. Ferramentas como rpm, mock, dpkg e pbuilder podem ser complicadas de usar, sendo necessário aprender cada uma delas separadamente. O Docker junta todos os seus requisitos em um único pacote que é definido em um único arquivo. Empacotamento de aplicação de software e sistemas de arquivos (filesystems) necessários do sistema operacional juntos em um único formato de imagem padronizado. No passado, normalmente você precisaria não apenas empacotar sua aplicação, mas muitas das dependências envolvidas, incluindo bibliotecas e daemons. Entretanto, você não conseguia assegurar que 100% do ambiente de execução era idêntico. Tudo isso tornava o empacotamento difícil de dominar e de conquistar a confiança de muitas empresas. Não raro, alguém 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 aplicação 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 aplicação 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 versão, pode-se criar uma nova imagem do Docker, que pode passar por todo o processo de teste e ser implantado em produção sem qualquer necessidade de recompilação e reempacotamento em qualquer passo do processo. Abstração de softwares de hardwares sem sacrificar recursos. As tradicionais soluções de virtualização como VMware são normalmente usadas quando as pessoas precisam criar uma camada de abstração entre o hardware e o software que roda nele, comprometendo recursos. Os hypervisors que gerenciam as VMs e cada kernel de VM em execução consomem uma porcentagem dos recursos do hardware, que não mais estarão disponíveis para hospedar aplicações. Um contêiner, 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 lançado pela primeira vez, os contêineres do Linux já existiam há alguns anos, e muitas das outras tecnologias que foram construídas sobre eles não são 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 contêineres do Linux, que já existem há mais de uma década, algo acessível a tecnólogos medianos. Ele encaixa os contêineres 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 usuários do projeto se surpreenderam ao descobrir que o Docker ainda não estava pronto para a produção. 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 lançamento, a estabilidade está boa, a adoção em produção já é uma realidade e várias empresas estão encarando o Docker como a solução para alguns sérios problemas que elas têm enfrentado no processo de entrega de software.

Capítulo 1 Introdução 27 O que o Docker não é 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 específico. Por exemplo, algumas organizações podem acreditar que poderão remover completamente a ferramenta de gerenciamento de configuração quando migrarem para o Docker, mas o real poder do Docker é que, embora possa substituir alguns aspectos das mais tradicionais ferramentas, ele geralmente é compatível com essas ferramentas ou até aperfeiçoado ao se combinar a elas. Na lista a seguir, nós exploramos algumas das categorias de ferramentas que o Docker não substitui de forma direta, mas que geralmente podem ser utilizadas em conjunto com ele para alcançar grandes resultados: Plataforma de virtualização (VMware, KVM etc.) Um contêiner não é uma máquina virtual no sentido tradicional. Uma máquina virtual contém um sistema operacional completo, rodando sobre o sistema operacional do host. A maior vantagem é que é fácil rodar várias máquinas virtuais com sistemas operacionais radicalmente diferentes em um único host. Com contêineres, tanto o host quanto o contêiner dividem o mesmo kernel. Isso significa que os contêineres 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 virtualização, o fluxo de trabalho de um contêiner tem muitas similaridades superficiais com plataformas de nuvem. Ambos são aclamados por permitir que aplicações sejam escaladas horizontalmente em resposta a uma mudança na demanda. O Docker, entretanto, não é uma plataforma de nuvem. Ele só lida com a implantação, execução e gerenciamento de contêineres em um host de Docker preexistente. Ele não permite que você crie uma novo host (instância), armazenamento de objetos, armazenamento em bloco e muitos dos outros recursos que são normalmente associados a uma plataforma de nuvem. Gerenciamento de configurações (Puppet, Chef etc.) Embora o Docker possa melhorar de forma significativa a habilidade de uma empresa de gerenciar aplicações e suas dependências, ele não substitui diretamente o gerenciamento de configurações tradicional. Dockerfiles são

28 Primeiros passos com Docker usados para definir como um contêiner deveria se parecer no momento de criação (build), mas não gerenciam o estado atual do contêiner e não podem ser usados para gerenciar o host do Docker. Framework de implantação (Capistrano, Fabric etc.) O Docker facilita muitos aspectos da implantação por criar imagens de contêineres autocontidas que encapsulam todas as dependências de uma aplicação e que podem ser implantadas, em todos os ambientes, sem mudanças. Entretanto, o Docker não pode ser utilizado sozinho para automatizar processos complicados de implantação. Outras ferramentas ainda são necessárias para unir a automação de um fluxo de trabalho maior. Ferramenta de gerenciamento de carga (Mesos, Fleet etc.) O servidor Docker não tem nenhum conceito interno de cluster. Ferramentas de orquestração adicionais (incluindo a ferramenta Swarm do próprio 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 inventário dos contêineres em execução. Ambiente de desenvolvimento (Vagrant etc.) O Vagrant é uma ferramenta de gerenciamento de máquina virtual para desenvolvedores que costumam simular pilhas de servidores que se assemelham ao ambiente de produção no qual a aplicação será implantada. Entre outras coisas, o Vagrant facilita a execução do Linux em máquinas 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 máquinas Docker com base em Linux em várias plataformas. O boot2docker e o Docker Machine são suficientes para muitos fluxos de trabalho padrão do Docker, mas eles não disponibilizam a variedade de recursos encontrados no Vagrant. Desvendar o Docker pode ser bem desafiador quando alguém o conhece sem uma referência de peso. No próximo capítulo, faremos uma ampla visão geral do Docker: o que é, como deveria ser usado e quais vantagens ele oferece quando implementado com tudo isso em mente.