Docker para desenvolvedores Rafael Gomes Esselivroestáàvendaem http://leanpub.com/dockerparadesenvolvedores Essaversãofoipublicadaem2017-03-07 ThisisaLeanpubbook.Leanpubempowersauthorsand publisherswiththeLeanPublishingprocess.Lean Publishingistheactofpublishinganin-progressebook usinglightweighttoolsandmanyiterationstogetreader feedback,pivotuntilyouhavetherightbookandbuild tractiononceyoudo. ThisworkislicensedunderaCreativeCommons Attribution4.0InternationalLicense Tweet Sobre Esse Livro! PorfavorajudeRafaelGomesadivulgaresselivrono Twitter! Ahashtagsugeridaparaesselivroé #docker-para-desenvolvedores. Descubraoqueasoutraspessoasestãofalandosobreesse livroclicandonesselinkparabuscarahashtagnoTwitter: https://twitter.com/search?q=#docker-para-desenvolvedores Conteúdo Prefácio . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Abraços, . . . . . . . . . . . . . . . . . . . . . . . 2 Comoleresselivro . . . . . . . . . . . . . . . . . . . 3 Agradecimentos . . . . . . . . . . . . . . . . . . . . . 5 Introdução . . . . . . . . . . . . . . . . . . . . . . . . 8 PorqueusarDocker? . . . . . . . . . . . . . . . . . . 9 OqueéDocker? . . . . . . . . . . . . . . . . . . . . . 17 Instalação . . . . . . . . . . . . . . . . . . . . . . . . . 21 InstalandonoGNU/Linux . . . . . . . . . . . . . . 21 InstalandonoMacOS . . . . . . . . . . . . . . . . 25 InstalandonoWindows . . . . . . . . . . . . . . . 28 Comandosbásicos . . . . . . . . . . . . . . . . . . . . 32 Executandoumcontainer . . . . . . . . . . . . . . 32 Verificandoalistadecontainers . . . . . . . . . . 36 Gerenciamentodecontainers . . . . . . . . . . . . 37 CriandosuaprópriaimagemnoDocker . . . . . . . 39 EntendendoarmazenamentonoDocker . . . . . . . 47 CONTEÚDO EntendendoaredenoDocker . . . . . . . . . . . . . 53 UtilizandoDockeremmúltiplosambientes . . . . . . 63 GerenciandomúltiploscontainersdockercomDoc- kerCompose . . . . . . . . . . . . . . . . . . . . . 73 ComousarDockersemGNU/Linux . . . . . . . . . . 81 Transformandosuaaplicaçãoemcontainer . . . . . 89 Basedecódigo . . . . . . . . . . . . . . . . . . . . . . 91 Dependência . . . . . . . . . . . . . . . . . . . . . . . 95 Configurações . . . . . . . . . . . . . . . . . . . . . . 99 ServiçosdeApoio . . . . . . . . . . . . . . . . . . . . 103 Construa,lance,execute . . . . . . . . . . . . . . . . 107 Processos . . . . . . . . . . . . . . . . . . . . . . . . . 112 Vínculodeportas . . . . . . . . . . . . . . . . . . . . 115 Concorrência . . . . . . . . . . . . . . . . . . . . . . . 119 Descartabilidade . . . . . . . . . . . . . . . . . . . . . 127 Paridadeentredesenvolvimento/produção . . . . . . 132 Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Processosdeadministração . . . . . . . . . . . . . . 137 DicasparausodoDocker . . . . . . . . . . . . . . . . 141 DicasparaRodar . . . . . . . . . . . . . . . . . . . 141 Boaspráticasparaconstruçãodeimagens . . . . . 150 CONTEÚDO Apêndice . . . . . . . . . . . . . . . . . . . . . . . . . 160 Containeroumáquinavirtual? . . . . . . . . . . . 160 Comandosúteis . . . . . . . . . . . . . . . . . . . 166 PossorodaraplicaçõesGUI? . . . . . . . . . . . . 167 Prefácio Nodesenvolvimentodesoftwareécomumcriar-seboaspráti- casapadrões.Emespecíficoaaplicaçõesweb,certosconceitos e práticas como DevOps, infraestrutura em Nuvem,phoenix, imutávele12factorappssãoteoriasbemaceitasqueajudam naprodutividadeemanutençãodossistemas.Porseremcon- ceitos não tão novos, são muitas as ferramentas e sistemas quepodemauxiliarnaimplantaçãodesses.MasDockeréuma das primeiras e mais comentadas ferramentas e plataformas que combina tantos desses conceitos de maneira coesa e relativamente simples de usar. Como qualquer ferramenta, Dockeréuminvestimentoqueoferecemelhorretornoquando seentendeseupropósitoecomousa-loapropriadamente. Existemváriasapresentações,artigosedocumentaçõessobre Docker. Porém existia a oportunidade de um livro ligando a teoria com a prática da ferramenta. Em que o leitor pode entenderasmotivaçõesdeDockeretambémcomoorganizar sua aplicação para extrair o maior proveito da ferramenta. Estou muito alegre que o Rafael escreveu este livro, que acredito ser uma contribuição importante para nossa área. O Rafael é extremamente engajado na comunidade de Docker e Devops pelo Brasil, além disso entende o que as pessoas buscam de conhecimento na área. Nesse livro você vai poder entenderobásicosobreDockercomumaliguagemsimplese vários exemplos práticos. Espero que esse livro seja mais um passoparaimpulsionarsuajornada.Desejo-lhesucessoetudo demelhor. Prefácio 2 Abraços, LuísArmandoBianchin Como ler esse livro Essematerialfoidivididoemduasgrandespartes.Aprimeira trata das questões mais básicas do Docker. É exatamente o mínimo necessário que um desenvolvedor precisa saber para utilizar essa tecnologia com propriedade, ou seja, ciente do queexatamenteaconteceaoexecutarcadacomando. Nessa primeira parte tentaremos não abordar questões de “baixonível”doDocker,poissãodemaiorapeloparaaequipe responsávelpelainfraestrutura. CasovocênãosaibanadasobreDocker,aconselhamosmuito aleituradessaprimeiraparte,poisassimconseguiráaprovei- tar a segunda parte, focada na construção de uma aplicação web no Docker seguindo as melhores práticas, sem pausas. Nestelivro,adotamosaspráticasdo12factor¹. O 12factor será detalhado no início da segunda parte, mas podemos adiantar que o consideramos os “12 mandamentos para aplicações web no Docker”, ou seja, uma vez que sua aplicaçãosigatodasasboaspráticasapresentadasnestedocu- mento, você possivelmente estará usando todo potencial que oDockertemalheproporcionar. Essa segunda parte é dividida por cada boa prática do12fac- tor. Dessa forma, apresentamos um código de exemplo no primeiro capítulo, que será evoluído ao longo do desenvol- vimento do livro. A ideia é que você possa exercitar com um código de verdade e, assim, assimilar o conteúdo de forma ¹https://12factor.net/pt_br/ Comoleresselivro 4 prática.Tambémorganizamosalgunsapêndicescomassuntos extrasimportantes,masquenãoseencaixaramnoscapítulos.