{"id":42175,"date":"2019-03-18T00:00:00","date_gmt":"2019-03-17T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem"},"modified":"2020-02-18T13:45:00","modified_gmt":"2020-02-18T10:45:00","slug":"evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","title":{"rendered":"A evolu\u00e7\u00e3o dos meios de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"A evolu\u00e7\u00e3o dos meios de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros\" src=\"\/wp-content\/uploads\/2019\/03\/3c677d0628824497039901c0179a8749.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEm algum momento, decidi escrever um artigo sobre a entrega em cont\u00eaineres Docker e pacotes deb, mas quando comecei, acabei sendo levado a tempos distantes dos primeiros computadores pessoais e at\u00e9 mesmo calculadoras. No geral, em vez de compara\u00e7\u00f5es secas entre Docker e deb, surgiram estas reflex\u00f5es sobre a evolu\u00e7\u00e3o, que agora apresento para o seu julgamento.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nQualquer produto, independente do que seja, precisa de alguma forma chegar aos servidores de produ\u00e7\u00e3o, ser configurado e iniciado. \u00c9 sobre isso que este artigo tratar\u00e1.<\/p>\n<p>Refletirei dentro de um contexto hist\u00f3rico, \"o que vejo \u2014 disso canto\", sobre o que observei quando comecei a programar e o que vejo agora, o que usamos atualmente e por qu\u00ea. O artigo n\u00e3o tem pretens\u00e3o de ser uma pesquisa completa, alguns pontos foram deixados de lado, \u00e9 minha vis\u00e3o pessoal do que foi e do que \u00e9 hoje.<\/p>\n<p>Ent\u00e3o, nos bons velhos tempos\u2026 a forma mais primitiva de entrega que conheci foram as fitas de cassete dos gravadores. Eu tinha um computador BK-0010.01...<\/p>\n<h2>A era das calculadoras<\/h2>\n<p>\nN\u00e3o, havia um momento ainda mais anterior, havia uma calculadora <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-61\">MK-61<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-52\">MK-52<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"A evolu\u00e7\u00e3o dos meios de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros\" src=\"\/wp-content\/uploads\/2019\/03\/ea68507cd83b4da3038cea7329ff1813.jpg\" style=\"display:block;margin: 0 auto;\" \/> Ent\u00e3o, quando eu tinha <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-61\">MK-61<\/a><\/noindex>, a forma de transferir um programa era uma folha de papel quadriculado, onde estava escrita a programa\u00e7\u00e3o, que quando necess\u00e1rio, era inserida manualmente na calculadora. Se quisesse jogar (sim, at\u00e9 mesmo nessa calculadora pr\u00e9-hist\u00f3rica havia jogos) \u2014 voc\u00ea se sentava e digitava o programa na calculadora. Naturalmente, ao desligar a calculadora, o programa desaparecia. Al\u00e9m dos c\u00f3digos que eram anotados \u00e0 m\u00e3o, os programas eram publicados nas revistas \"R\u00e1dio\" e \"T\u00e9cnica da Juventude\", e tamb\u00e9m impressos em livros da \u00e9poca.<\/p>\n<p>A pr\u00f3xima modifica\u00e7\u00e3o foi a calculadora <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-52\">MK-52<\/a><\/noindex>, que j\u00e1 tinha algum tipo de mem\u00f3ria n\u00e3o vol\u00e1til. Agora, n\u00e3o era mais necess\u00e1rio digitar manualmente o jogo ou programa, bastava realizar alguns movimentos m\u00e1gicos nos bot\u00f5es e ele carregava automaticamente.<\/p>\n<p>O tamanho do maior programa na calculadora era de 105 passos, enquanto a mem\u00f3ria permanente do MK-52 era de 512 passos.<\/p>\n<p>A prop\u00f3sito, se houver f\u00e3s dessas calculadoras que est\u00e3o lendo este artigo \u2014 durante a escrita, encontrei um emulador da calculadora para Android, e programas para ele. Vamos em frente, ao passado!<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.cax.pmk.ext\">Emulador MK-61 para Android<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xvadim.github.io\/xbasoft\/pmk\/pmk.html\">Cat\u00e1logo de programas para MK-61<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><b>Uma pequena digress\u00e3o sobre o MK-52<\/b> <i>(da Wikip\u00e9dia)<\/i><\/p>\n<p>O MK-52 voou ao espa\u00e7o na nave 'Soyuz TM-7'. Ele foi destinado a ser usado para calcular a trajet\u00f3ria de pouso, caso o computador de bordo falhasse.<\/p>\n<p>O MK-52 com o bloco de expans\u00e3o de mem\u00f3ria 'Eletr\u00f4nica-Astro' foi fornecido \u00e0s naves da Marinha a partir de 1988 como parte do conjunto de c\u00e1lculo de navega\u00e7\u00e3o. <\/p><\/blockquote>\n<h2>Os primeiros computadores pessoais<\/h2>\n<p><img decoding=\"async\" alt=\"A evolu\u00e7\u00e3o dos meios de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros\" src=\"\/wp-content\/uploads\/2019\/03\/5d443c3919023854c53c83ac2265cea3.jpg\" style=\"display:block;margin: 0 auto;\" \/> Vamos voltar aos tempos <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%9A_(%D1%81%D0%B5%D0%BC%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%BE_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2)\">BK-0010<\/a><\/noindex>. \u00c9 claro que a mem\u00f3ria tamb\u00e9m aumentou, e inserir c\u00f3digo a partir de papel tornou-se invi\u00e1vel (embora eu tenha feito isso no in\u00edcio, pois n\u00e3o havia outro meio de armazenamento). O principal meio de armazenamento e fornecimento de software passou a ser fitas cassete para gravadores.<\/p>\n<p><br clear=\"all\"><br \/>\n<br clear=\"all\"><br \/>\n<img decoding=\"async\" alt=\"A evolu\u00e7\u00e3o dos meios de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros\" src=\"\/wp-content\/uploads\/2019\/03\/988316eac02a95a16e15502a826f0653.jpg\" style=\"display:block;margin: 0 auto;\" \/>O armazenamento em fita geralmente consistia em um ou dois arquivos bin\u00e1rios, o restante estava contido internamente. A confiabilidade era muito baixa, e era preciso manter 2-3 c\u00f3pias do programa. O tempo de carregamento tamb\u00e9m n\u00e3o era satisfat\u00f3rio, e entusiastas experimentavam diferentes codifica\u00e7\u00f5es de frequ\u00eancia para superar essas limita\u00e7\u00f5es. Naquela \u00e9poca, eu ainda n\u00e3o estava envolvido no desenvolvimento profissional de software (exceto por programas simples em BASIC), ent\u00e3o, infelizmente, n\u00e3o posso explicar em detalhes como tudo funcionava internamente. O fato de que o computador possu\u00eda apenas RAM em sua maior parte determinava a simplicidade do esquema de armazenamento de dados.<\/p>\n<h2>Aparecimento de suportes confi\u00e1veis e grandes de informa\u00e7\u00f5es<\/h2>\n<p>\nMais tarde, os disquetes surgem, simplificando o processo de c\u00f3pia e aumentando a confiabilidade.<br \/>\nMas a situa\u00e7\u00e3o muda radicalmente apenas quando surgem grandes armazenamentos locais na forma de HDD.<\/p>\n<p>Muda fundamentalmente o tipo de fornecimento: surgem programas instaladores que gerenciam o processo de configura\u00e7\u00e3o do sistema, bem como a limpeza ap\u00f3s a remo\u00e7\u00e3o, pois os programas n\u00e3o s\u00e3o apenas lidos na mem\u00f3ria, mas j\u00e1 copiados para o armazenamento local, do qual \u00e9 preciso saber como limpar o desnecess\u00e1rio quando necess\u00e1rio.<\/p>\n<p>Paralelamente, aumenta a complexidade do software fornecido.<br \/>\nO n\u00famero de arquivos no fornecimento aumenta de uma unidade para centenas e milhares, surgem conflitos de vers\u00f5es de bibliotecas e outras alegrias quando diferentes programas usam os mesmos dados.<\/p>\n<p><img decoding=\"async\" alt=\"A evolu\u00e7\u00e3o dos meios de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros\" src=\"\/wp-content\/uploads\/2019\/03\/48af8fca591a1061df45cd619854a59a.jpg\" style=\"display:block;margin: 0 auto;\" \/> Naquela \u00e9poca, eu ainda n\u00e3o conhecia a exist\u00eancia do Linux; vivia em um mundo MS DOS e, depois, Windows, programando em Borland Pascal e Delphi, \u00e0s vezes olhando para o C++. Para a entrega de produtos, muitas pessoas usavam InstallShield. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/InstallShield\">ru.wikipedia.org\/wiki\/InstallShield<\/a><\/noindex>, que resolvia com sucesso todas as tarefas de implanta\u00e7\u00e3o e configura\u00e7\u00e3o de software.<\/p>\n<p><br clear=\"all\"><br \/>\n<br clear=\"all\"><\/p>\n<h2>A era da internet<\/h2>\n<p>\nGradualmente, a complexidade dos sistemas de software aumentou, passando de mon\u00f3litos e aplicativos de desktop para sistemas distribu\u00eddos, clientes leves e microservi\u00e7os. Agora, \u00e9 necess\u00e1rio configurar n\u00e3o apenas um programa, mas um conjunto deles, garantindo que todos funcionem bem juntos.<\/p>\n<p>A concep\u00e7\u00e3o mudou completamente; a Internet chegou e a era dos servi\u00e7os em nuvem come\u00e7ou. Ainda estava apenas em sua fase inicial, na forma de sites, e ningu\u00e9m sonhava realmente com servi\u00e7os. Mas esse foi um ponto de virada na ind\u00fastria, tanto no desenvolvimento quanto na entrega de aplicativos.<\/p>\n<p>Para mim, ficou claro que nesse momento houve uma mudan\u00e7a de gera\u00e7\u00f5es de desenvolvedores (ou isso aconteceu apenas no meu c\u00edrculo), e parecia que todos os antigos e bons m\u00e9todos de entrega haviam sido esquecidos de repente, e tudo come\u00e7ou do come\u00e7o: toda a entrega passou a ser feita atrav\u00e9s de scripts improvisados, e isso foi chamado orgulhosamente de \"entrega cont\u00ednua\". De fato, come\u00e7ou um per\u00edodo de desordem, onde o antigo foi esquecido e n\u00e3o utilizado, e o novo simplesmente n\u00e3o existia.<\/p>\n<p>Lembro-me de tempos em que, na empresa onde trabalhava (n\u00e3o vou nomear), em vez de fazer a build com ant (maven ainda n\u00e3o era popular ou n\u00e3o existia), as pessoas simplesmente criavam o jar na IDE e o enviavam tranquilamente para o SVN. Assim, a implanta\u00e7\u00e3o consistia em pegar o arquivo do SVN e copi\u00e1-lo via SSH para a m\u00e1quina certa. Simples e rudimentar.<\/p>\n<p>Na mesma \u00e9poca, a entrega de sites simples em PHP era feita de maneira extremamente primitiva, simplesmente copiando o arquivo corrigido via FTP para a m\u00e1quina de destino. \u00c0s vezes, nem isso; o c\u00f3digo era corrigido em tempo real no servidor de produ\u00e7\u00e3o, e era um grande benef\u00edcio se houvesse backups em algum lugar.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Pacotes RPM e DEB<\/h4>\n<p>\n<img decoding=\"async\" alt=\"A evolu\u00e7\u00e3o dos meios de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros\" src=\"\/wp-content\/uploads\/2019\/03\/8590e7db6c67cad4b97654465ba5e946.jpg\" style=\"display:block;margin: 0 auto;\" \/>Por outro lado, com o desenvolvimento da internet, sistemas semelhantes ao UNIX come\u00e7aram a ganhar popularidade, em particular, foi nesse per\u00edodo que descobri o RedHat Linux 6, por volta do ano 2000. \u00c9 claro que havia certas ferramentas para a entrega de software, segundo a Wikipedia, o RPM, como o principal gerenciador de pacotes, surgiu em 1995, na vers\u00e3o 2.0 do RedHat Linux. Desde ent\u00e3o, at\u00e9 os dias de hoje, o sistema \u00e9 distribu\u00eddo em formato de pacotes RPM e continua a existir e se desenvolver com sucesso.<\/p>\n<p>As distribui\u00e7\u00f5es da fam\u00edlia Debian seguiram um caminho semelhante e implementaram a entrega em formato de pacotes deb, que tamb\u00e9m se mant\u00e9m inalterado at\u00e9 hoje.<\/p>\n<p>Os gerenciadores de pacotes permitem a entrega dos pr\u00f3prios produtos de software, configurar durante a instala\u00e7\u00e3o, gerenciar depend\u00eancias entre diferentes pacotes, realizar a remo\u00e7\u00e3o de produtos e a limpeza de res\u00edduos durante a desinstala\u00e7\u00e3o. Ou seja, na maior parte, isso \u00e9 tudo que \u00e9 necess\u00e1rio, \u00e9 por isso que eles sobreviveram por v\u00e1rias d\u00e9cadas praticamente sem mudan\u00e7as.<\/p>\n<p>A computa\u00e7\u00e3o em nuvem adicionou aos gerenciadores de pacotes a instala\u00e7\u00e3o n\u00e3o apenas de m\u00eddias f\u00edsicas, mas tamb\u00e9m de reposit\u00f3rios em nuvem, mas a ess\u00eancia mudou pouco.<\/p>\n<p>Vale destacar que atualmente h\u00e1 alguns movimentos em dire\u00e7\u00e3o \u00e0 substitui\u00e7\u00e3o dos pacotes deb por pacotes snap, mas isso ser\u00e1 abordado mais adiante.<\/p>\n<p>Assim, essa nova gera\u00e7\u00e3o de desenvolvedores em nuvem, que n\u00e3o conheceu nem DEB nem RPM, tamb\u00e9m cresceu lentamente, adquirindo experi\u00eancia, os produtos foram se tornando mais complexos, e foram necess\u00e1rias formas mais racionais de entrega do que FTP, scripts bash e outras gambiarras estudantis. <br \/>\nE aqui entra o Docker, uma esp\u00e9cie de mistura de virtualiza\u00e7\u00e3o, controle de recursos e m\u00e9todo de entrega. Isso agora \u00e9 tend\u00eancia, moderno entre os jovens, mas ser\u00e1 que \u00e9 necess\u00e1rio para tudo? \u00c9 uma panaceia?<\/p>\n<p>Pelo que observei, muitas vezes o Docker \u00e9 proposto n\u00e3o como uma escolha sensata, mas simplesmente porque, por um lado, \u00e9 o que se discute na comunidade, e aqueles que o recomendam s\u00f3 conhecem ele. Por outro lado, os bons e velhos sistemas de empacotamento, na maior parte, permanecem silenciosos \u2014 eles existem e fazem seu trabalho de forma discreta. Nessa situa\u00e7\u00e3o, n\u00e3o h\u00e1 muito para escolher \u2014 a escolha \u00e9 \u00f3bvia \u2014 Docker.<\/p>\n<p>Vou tentar compartilhar a experi\u00eancia de como foi a nossa implementa\u00e7\u00e3o do Docker e o que resultou disso.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Scripts personalizados<\/h4>\n<p>\nInicialmente, havia scripts bash que realizavam a implanta\u00e7\u00e3o de arquivos jar nas m\u00e1quinas apropriadas. Esse processo era gerenciado pelo Jenkins. Isso funcionou bem, uma vez que o pr\u00f3prio arquivo jar j\u00e1 \u00e9 uma constru\u00e7\u00e3o que cont\u00e9m classes, recursos e at\u00e9 mesmo configura\u00e7\u00f5es. Se voc\u00ea incluir tudo o que puder nele, descompact\u00e1-lo com um script n\u00e3o \u00e9 a tarefa mais dif\u00edcil.<\/p>\n<p>Mas os scripts t\u00eam algumas desvantagens:<\/p>\n<ul>\n<li> os scripts geralmente s\u00e3o escritos \u00e0s pressas e, portanto, s\u00e3o t\u00e3o primitivos que cont\u00eam apenas um \u00fanico cen\u00e1rio bem-sucedido. Isso \u00e9 facilitado pelo fato de que o desenvolvedor est\u00e1 interessado em uma entrega r\u00e1pida, enquanto um script adequado requer um investimento consider\u00e1vel de recursos.<\/li>\n<li> como consequ\u00eancia do ponto anterior, os scripts n\u00e3o incluem procedimentos de desinstala\u00e7\u00e3o.<\/li>\n<li> n\u00e3o h\u00e1 um procedimento de atualiza\u00e7\u00e3o estabelecido.<\/li>\n<li> quando um novo produto aparece, \u00e9 necess\u00e1rio escrever um novo script.<\/li>\n<li> n\u00e3o h\u00e1 suporte para depend\u00eancias.<\/li>\n<\/ul>\n<p>\nClaro, \u00e9 poss\u00edvel escrever um script sofisticado, mas, como mencionei antes, isso consome tempo de desenvolvimento, e, como sabemos, o tempo \u00e9 sempre escasso.<\/p>\n<p>Tudo isso limita evidentemente o uso desse m\u00e9todo de implanta\u00e7\u00e3o a sistemas muito simples. Chegou a hora de mudar isso.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Docker<\/h4>\n<p>\n<img decoding=\"async\" alt=\"A evolu\u00e7\u00e3o dos meios de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros\" src=\"\/wp-content\/uploads\/2019\/03\/f9c6180a2775513ce88c5425727817d1.jpg\" style=\"display:block;margin: 0 auto;\" \/>Em algum momento, come\u00e7aram a chegar at\u00e9 n\u00f3s novos desenvolvedores repletos de ideias e fissurados por Docker. Bem, vamos em frente \u2014 vamos fazer! Houve duas tentativas. Ambas, infelizes \u2014 digamos assim, devido a grandes ambi\u00e7\u00f5es, mas com experi\u00eancia real insuficiente. Era necess\u00e1rio apressar e finalizar de qualquer forma? Dificilmente \u2014 a equipe deve evoluir gradualmente para o n\u00edvel necess\u00e1rio antes de conseguir usar as ferramentas apropriadas. Al\u00e9m disso, ao usar imagens Docker prontas, frequentemente encontramos problemas na rede (o que, possivelmente, estava ainda relacionado \u00e0 imaturidade do pr\u00f3prio Docker) ou era dif\u00edcil expandir os cont\u00eaineres de terceiros.<\/p>\n<p>Quais inc\u00f4modos encontramos?<\/p>\n<ul>\n<li> Problemas de rede no modo bridge.<\/li>\n<li> \u00c9 inconveniente visualizar logs no cont\u00eainer (a menos que eles sejam exportados separadamente para o sistema de arquivos da m\u00e1quina host).<\/li>\n<li> Periodicamente, houve um estranho congelamento do ElasticSearch dentro do cont\u00eainer, a causa n\u00e3o foi identificada, sendo o cont\u00eainer oficial.<\/li>\n<li> \u00c9 inc\u00f4modo usar o shell dentro do cont\u00eainer \u2014 tudo \u00e9 muito limitado, n\u00e3o h\u00e1 as ferramentas habituais.<\/li>\n<li> O grande tamanho dos cont\u00eaineres coletados - \u00e9 caro armazenar.<\/li>\n<li> Devido ao grande tamanho dos cont\u00eaineres, \u00e9 dif\u00edcil manter m\u00faltiplas vers\u00f5es.<\/li>\n<li> Montagem mais longa, ao contr\u00e1rio de outros m\u00e9todos (scripts ou pacotes deb).<\/li>\n<\/ul>\n<p>\nPor outro lado, por que o servi\u00e7o Spring na forma de um arquivo jar \u00e9 pior para implantar atrav\u00e9s do mesmo deb? Realmente precisamos de isolamento de recursos? Vale a pena abrir m\u00e3o das ferramentas convenientes do sistema operacional colocando o servi\u00e7o em um cont\u00eainer severamente limitado?<\/p>\n<p>Como mostrou a pr\u00e1tica - na realidade, isso n\u00e3o \u00e9 necess\u00e1rio; um pacote deb \u00e9 suficiente em 90% dos casos.<\/p>\n<p>Quando o velho e bom deb n\u00e3o funciona e quando realmente precis\u00e1vamos do Docker?<\/p>\n<p>Para n\u00f3s, isso foi a implementa\u00e7\u00e3o de servi\u00e7os em Python. Muitas bibliotecas necess\u00e1rias para aprendizado de m\u00e1quina que est\u00e3o ausentes na distribui\u00e7\u00e3o padr\u00e3o do sistema operacional (e as que estavam n\u00e3o eram as vers\u00f5es adequadas), hacks de configura\u00e7\u00e3o, a necessidade de diferentes vers\u00f5es para diferentes servi\u00e7os que operam na mesma m\u00e1quina host resultaram no fato de que o \u00fanico modo razo\u00e1vel de entrega dessa mistura complexa era o Docker. O esfor\u00e7o de montar um cont\u00eainer Docker acabou sendo menor do que a ideia de empacotar tudo isso em pacotes deb separados com depend\u00eancias; na realidade, ningu\u00e9m em s\u00e3 consci\u00eancia se atreveria a fazer isso.<\/p>\n<p>O segundo ponto onde se pretende usar o Docker \u00e9 para a implementa\u00e7\u00e3o de servi\u00e7os no esquema de blue-green deploy. Mas aqui queremos uma complexidade crescente gradual: primeiro, pacotes deb s\u00e3o montados e, em seguida, um cont\u00eainer Docker \u00e9 constru\u00eddo a partir deles.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Pacotes Snap<\/h4>\n<p>\n<img decoding=\"async\" alt=\"A evolu\u00e7\u00e3o dos meios de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros\" src=\"\/wp-content\/uploads\/2019\/03\/8c9001b28757f8427c85e54bca5b4e73.jpg\" style=\"display:block;margin: 0 auto;\" \/> Voltando aos pacotes Snap. Eles apareceram oficialmente pela primeira vez no Ubuntu 16.04. Ao contr\u00e1rio dos pacotes deb e rpm habituais, o snap carrega todas as depend\u00eancias. Por um lado, isso ajuda a evitar conflitos de bibliotecas, por outro lado, isso resulta em tamanhos de pacotes finais maiores. Al\u00e9m disso, isso pode impactar a seguran\u00e7a do sistema: ao fornecer o snap, o desenvolvedor que cria o pacote deve acompanhar todas as mudan\u00e7as nas bibliotecas inclu\u00eddas. Em suma, n\u00e3o \u00e9 t\u00e3o simples e a felicidade universal com seu uso n\u00e3o se concretiza. No entanto, ainda assim, \u00e9 uma alternativa bastante razo\u00e1vel se o mesmo Docker \u00e9 usado apenas como um meio de empacotamento, e n\u00e3o de virtualiza\u00e7\u00e3o.<\/p>\n<p><br clear=\"all\"><br \/>\nComo resultado, agora utilizamos uma combina\u00e7\u00e3o razo\u00e1vel de pacotes deb e cont\u00eaineres Docker, que, em alguns casos, talvez possamos substituir por pacotes snap.<\/p>\n<p class=\"for_users_only_msg\">Apenas usu\u00e1rios registrados podem participar da pesquisa. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Entre<\/a><\/noindex>, por favor.<\/p>\n<h2 class=\"default-block__polling-title\">E voc\u00ea, o que utiliza para a entrega?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Scripts personalizados<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Copiamos manualmente via FTP<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pacotes deb<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pacotes rpm<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pacotes snap<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Imagens Docker<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Imagens de m\u00e1quinas virtuais<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Clonamos o HDD inteiro<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    puppet<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    ansible<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Outro<\/p>\n<\/li>\n<\/ul>\n<p>    109 usu\u00e1rios votaram. 32 usu\u00e1rios se abstiveram.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/srg\/blog\/444102\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0434\u043e\u043a\u0435\u0440 \u0438 deb-\u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0430\u043b, \u043c\u0435\u043d\u044f \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043f\u043e\u043d\u0435\u0441\u043b\u043e \u0432 \u0434\u0430\u043b\u0435\u043a\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0443\u0445\u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0434\u043e\u043a\u0435\u0440\u0430 \u0438 deb \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u0442 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0442\u0435\u043c\u0443 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438, \u043a\u043e\u0438 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043d\u0430 \u0412\u0430\u0448 \u0441\u0443\u0434. \u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-42175","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043e Docker, deb, jar \u0438 \u043f\u0440\u043e\u0447\u0435\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-03-17T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:45:00+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47A evolu\u00e7\u00e3o das ferramentas de entrega, ou reflex\u00f5es sobre Docker, deb, jar e outros | ProHoster","description":"Em um determinado momento.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043e Docker, deb, jar \u0438 \u043f\u0440\u043e\u0447\u0435\u043c | ProHoster","og:description":"\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-03-17T21:00:00+00:00","article:modified_time":"2020-02-18T10:45:00+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"42175","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 07:30:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:04:29","updated":"2026-01-22 07:30:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/42175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=42175"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/42175\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=42175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=42175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=42175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}