{"id":3164,"date":"2017-11-28T14:58:48","date_gmt":"2017-11-28T16:58:48","guid":{"rendered":"https:\/\/blog.umbler.com\/?p=3164"},"modified":"2018-12-05T09:57:44","modified_gmt":"2018-12-05T11:57:44","slug":"containers-101-como-essa-tecnologia-pode-alavancar-suas-aplicacoes","status":"publish","type":"post","link":"https:\/\/blog.umbler.com\/br\/containers-101-como-essa-tecnologia-pode-alavancar-suas-aplicacoes\/","title":{"rendered":"Containers #1: Como essa tecnologia pode alavancar suas aplica\u00e7\u00f5es"},"content":{"rendered":"<p>Antes de come\u00e7ar a nossa s\u00e9rie de posts relacionados a containers, gostaria de perguntar: voc\u00ea ouviu o podcast produzido especialmente sobre este assunto? N\u00e3o?<\/p>\n<p>Ok, te desculpo e est\u00e1 aqui o <a href=\"https:\/\/blog.umbler.com\/umblercast-por-que-apostar-em-containers\/\" target=\"_blank\" rel=\"noopener\">link<\/a>, ouve l\u00e1 porque est\u00e1 muito bacana.<\/p>\n<h2>A analogia<\/h2>\n<p>Nos \u00faltimos s\u00e9culos, o que possibilitou o ser humano realizar grandes quantidades de trocas e fazer com\u00e9rcio em larga escala foi o transporte mar\u00edtimo e, por incr\u00edvel que pare\u00e7a, \u00e9 utilizando essa forma de \u201ctecnologia\u201d que conseguimos explicar melhor o conceito de containers. Acredito que voc\u00ea j\u00e1 deve ter visto, pelo menos em imagens, algo parecido com isto, certo?<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2017\/11\/110705_supernavio_vale_f_001.jpg\" alt=\"\" width=\"521\" height=\"347\" \/><\/p>\n<p>Pois bem, este \u00e9 um navio cargueiro, que transporta min\u00e9rios brasileiros para os quatro cantos do mundo. Ele foi desenhado, projetado e constru\u00eddo para atender uma \u00fanica demanda: Levar min\u00e9rio mundo afora. Agora voc\u00ea imagina a dificuldade que se teria caso quis\u00e9ssemos transportar soja em vez de min\u00e9rio, quantas adapta\u00e7\u00f5es teriam que ser realizadas, etc. Agora imaginem se quis\u00e9ssemos transportar tanto soja quanto min\u00e9rio no mesmo cargueiro. Vai dizer, coisa para louco n\u00e3o?<\/p>\n<p>Pois ent\u00e3o, imagine que este navio cargueiro ai \u00e9 o nosso famigerado host (seja f\u00edsico ou virtual), onde temos que instalar nossa stack toda, servidor web, framework A, linguagem B, banco de dados C e por a\u00ed vai. A cada novo update em alguma ferramenta instalada neste host, \u00e9 uma tarefa de tirar o sono de toda a equipe de ops.<\/p>\n<p>Levanta a m\u00e3o a\u00ed quem j\u00e1 passou a noite fazendo aquele update maroto que quebrou tudo.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2017\/11\/giphy-for-containers-2.gif\" alt=\"\" width=\"428\" height=\"280\" \/><\/p>\n<p>Ambos os processos de atualiza\u00e7\u00e3o, do cargueiro e do host, s\u00e3o atividades que at\u00e9 bem pouco tempo atr\u00e1s eram comuns, pois havia essa necessidade, e at\u00e9 ent\u00e3o aplicava-se a melhor solu\u00e7\u00e3o poss\u00edvel, ou a menos dolorida obviamente.<\/p>\n<p>OK, sabemos que isso n\u00e3o escala ou, pior, escala de forma dif\u00edcil e descontrolada. Ent\u00e3o, como resolvemos?<br \/>\nCompare a imagem do cargueiro acima, com essa agora:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2017\/11\/Maersk-McKinney-Moller-512.jpg\" alt=\"\" width=\"512\" height=\"265\" \/><\/p>\n<p>Bonit\u00e3o esse navio n\u00e9?<\/p>\n<p>Pois ent\u00e3o, este tamb\u00e9m \u00e9 um navio cargueiro, mas neste caso, cargueiro de qualquer coisa, pode-se transportar min\u00e9rios, soja, roupas, eletr\u00f4nicos, etc., sem a preocupa\u00e7\u00e3o deste transporte atender ou n\u00e3o a demanda. Acho que voc\u00ea j\u00e1 deve ter entendido onde quero chegar, n\u00e3o?<\/p>\n<p>Da mesma forma que os containers possibilitam que este cargueiro transporte qualquer coisa, os containers do Linux permitem que voc\u00ea encapsule a sua aplica\u00e7\u00e3o e a execute em qualquer lugar. E o mais legal \u00e9 que voc\u00ea n\u00e3o precisa se preocupar com a compatibilidade no seu host, pois tudo que voc\u00ea precisa para atender o seu servi\u00e7o ou aplica\u00e7\u00e3o estar\u00e1 dentro do container, igualzinho aos containers desse navio, que foram constru\u00eddos cada um para atender a demanda daquele container apenas.<\/p>\n<p>Isso, obviamente, resolve o problema que t\u00ednhamos no exemplo anterior, em que um update poderia quebrar a aplica\u00e7\u00e3o.<br \/>\nAgora a \u00fanica forma de quebrar sua aplica\u00e7\u00e3o \u00e9 voc\u00ea construir o seu container de forma errada, veja que agora o poder n\u00e3o est\u00e1 mais na m\u00e3o dos Ops,<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/vignette.wikia.nocookie.net\/simpsons\/images\/3\/3a\/Homer_defined.jpg\/revision\/latest?cb=20080430063845\" alt=\"\" width=\"350\" height=\"277\" \/><\/p>\n<p>pois quem define depend\u00eancias e o que precisa ser instalado s\u00e3o os pr\u00f3prios Devs.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2017\/11\/B37YfeDCAAEYkcT.jpg:large\" alt=\"\" width=\"355\" height=\"265\" \/><\/p>\n<p>A \u00fanica coisa que o at\u00e9 ent\u00e3o Ops precisa fazer, \u00e9 garantir que o host tenha alguma <a href=\"https:\/\/blog.umbler.com\/br\/avancos-em-ia-generativa\/\">tecnologia<\/a> que permita a execu\u00e7\u00e3o de containers, da mesma forma que os engenheiros que projetaram este navio tiveram que pensar em como deveria ser o navio para transportar containers e n\u00e3o mais um \u00fanico produto.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2017\/11\/Samsung-should-learn-from-Homer-Imgur.gif\" alt=\"\" width=\"373\" height=\"280\" \/><\/p>\n<h2>A hist\u00f3ria<\/h2>\n<p>Sim, atualmente falamos muito sobre containers, Docker, RKT, LXC, LXD e etc., mas o que n\u00e3o levamos em considera\u00e7\u00e3o \u00e9 que o linux container (ou pelo menos os recursos que permitiram que ele fosse poss\u00edvel) existem h\u00e1 muitos anos. . Alguns deles s\u00e3o t\u00e3o antigos, que muitas pessoas que est\u00e3o lendo este post nem era nascidas em seu lan\u00e7amento. Loucura n\u00e9? Mas \u00e9 a mais pura verdade! Em ordem cronol\u00f3gica podemos colocar assim.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2017\/11\/timeline-conteiner-caminho.png\" alt=\"Infogr\u00e1fico: A hist\u00f3ria dos containers at\u00e9 agora\" width=\"780\" height=\"1562\" \/><\/p>\n<h2>Containers a partir de ent\u00e3o<\/h2>\n<p>Assim como Warden fez, o Docker tamb\u00e9m usou o LXC em seus est\u00e1gios iniciais e depois substituiu esse gerenciador de container por sua pr\u00f3pria biblioteca, a libcontainer, depois tamb\u00e9m foi substitu\u00edda pelo RunC. Mas h\u00e1 d\u00favidas de que Docker tem se tornado, cada vez mais, muito mais que um simples gerenciador de container. Ele vem, ent\u00e3o, oferecendo todo um ecossistema para o gerenciamento de containers e, obviamente, facilitando a ado\u00e7\u00e3o desse tipo de tecnologia.<\/p>\n<p>Com o Docker, os desenvolvedores podem criar e executar seus ambientes\/aplica\u00e7\u00f5es muito mais rapidamente pois como mencionei, ele prov\u00ea toda uma plataforma, como por exemplo o Docker Hub, de onde os desenvolvedores podem baixar suas imagens e executar containers e, obviamente enviar suas pr\u00f3prias imagens.<\/p>\n<p>Claro, Docker n\u00e3o est\u00e1 sozinho. Em fevereiro de 2016 o CoreOS lan\u00e7ou o RKT com a inten\u00e7\u00e3o de se tornar uma alternativa confi\u00e1vel ao Docker, dentre outras solu\u00e7\u00f5es que t\u00eam o mesmo objetivo.<\/p>\n<h2>\u00c9 VM?<\/h2>\n<p>\u00c9 uma pergunta muito frequente e, de certa forma, dif\u00edcil de responder. Se for feita uma an\u00e1lise por funcionalidade apenas, ambas as solu\u00e7\u00f5es s\u00e3o parecidas. O que muda &#8211; e muito &#8211; s\u00e3o as tecnologias empregadas em cada uma.<\/p>\n<p>Enquanto na virtualiza\u00e7\u00e3o tradicional n\u00f3s temos todo o ambiente \u201cemulado\u201d (isso inclui mem\u00f3ria, processamento, disco, rede, etc.) e nele temos todo um sistema operacional instalado, com containers n\u00f3s n\u00e3o temos todo esse overhead, pois o isolamento e controle de recursos de um container \u00e9 realizado diretamente por chamadas de sistemas, e n\u00e3o por uma camada de virtualiza\u00e7\u00e3o.<\/p>\n<p>SIM voc\u00ea ver\u00e1 agora a imagem mais vista nos \u00faltimos anos, mas que \u00e9 essencial para entender realmente a diferen\u00e7a entre as tecnologias, veja:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2017\/11\/Container-vs-VMs.jpg\" alt=\"Infraestrutura Virtual Machines x Containers\" width=\"862\" height=\"488\" \/><br \/>\nUma das grandes vantagens da tecnologia de containers \u00e9 o compartilhamento das bibliotecas de sistema entre host e containers. Isso \u00e9 poss\u00edvel gra\u00e7as a um conceito chamado copy-on-write, que abordaremos mais profundamente em posts futuros. Isso permite que cada container possa ter acesso direto a recursos do host sem a necessidade de emula\u00e7\u00e3o de todo um sistema operacional.<\/p>\n<p>Eu sei que voc\u00ea deve estar se fazendo a seguinte pergunta:<\/p>\n<blockquote><p>Ent\u00e3o eu formato todos os meus hosts f\u00edsicos e abandono m\u00e1quina virtual?<\/p><\/blockquote>\n<p>N\u00e3o precisa ser t\u00e3o extremo assim, \u00e9 incentivado que voc\u00ea utilize containers dentro de m\u00e1quinas virtuais, principalmente pela facilidade de provisionamento de ambiente.<\/p>\n<h2>Ok, legal. Mas o que ganho com isso?<\/h2>\n<p>Eita ponto importante!<\/p>\n<p>O mais curioso disso \u00e9 que a resposta est\u00e1 presente no seu dia-a-dia e tende a ser mais filos\u00f3fica do que t\u00e9cnica realmente.\u00a0Por exemplo, o que voc\u00ea ganha tendo o ambiente que tem da forma que \u00e9 hoje?<\/p>\n<p>Se a resposta for apenas \u201cMe manter ganhando dinheiro\u201d, repense, pois algum ponto voc\u00ea precisar\u00e1 trabalhar. Atualmente, apenas se manter n\u00e3o \u00e9 mais algo racional. Ou voc\u00ea melhora dia ap\u00f3s dia, ou daqui a pouco algu\u00e9m far\u00e1 muito melhor o que voc\u00ea faz. E da\u00ed? O que acontecer\u00e1?<\/p>\n<p>O que a tecnologia de container te proporciona \u00e9 a melhoria cont\u00ednua em sua entrega de software ou ambiente, pois torna muito mais simples para voc\u00ea validar uma ideia ou melhorar a aplica\u00e7\u00e3o.\u00a0Outro ponto muito importante \u00e9 a autonomia e controle dos times no momento do desenvolvimento, pois tudo que o desenvolvedor precisa \u00e9 criar uma imagem da forma que ele precisar e executar quantas vezes for preciso. Este benef\u00edcio, no entanto, n\u00e3o se limita apenas ao desenvolvimento.<\/p>\n<p>Imagine voc\u00ea, como o cara de Ops, o qu\u00e3o f\u00e1cil \u00e9 para voc\u00ea fazer suas manuten\u00e7\u00f5es sem se preocupar se algo vai quebrar a aplica\u00e7\u00e3o, ou ainda por cima, ter versionado seu ambiente, podendo fazer rollback de alguma configura\u00e7\u00e3o com apenas dois ou tr\u00eas comandos, bacana n\u00e9?<\/p>\n<p>Isso tudo sem falar nas mais variadas formas de integra\u00e7\u00e3o, podendo automatizar desde o provisionamento do ambiente, monitoramento, deploy, etc.<br \/>\nAtualmente na Umbler utilizamos containers por dois grandes motivos:<\/p>\n<ol>\n<li>Entregar solu\u00e7\u00f5es para os clientes de forma mais \u00e1gil;<\/li>\n<li>Otimizar recursos, possibilitando um melhor aproveitamento do ambiente.<\/li>\n<\/ol>\n<p>Isso quer dizer que trabalhamos com containers porque entendemos que esse tipo de tecnologia nos permite entregar mais facilidades para os desenvolvedores de forma mais r\u00e1pida conseguindo, assim, atender tanto \u00e0s demandas de nossos clientes finais, quanto otimizar o que temos hoje de infraestrutura, tendo um custo benef\u00edcio para ambos os lados muito positivo.<\/p>\n<p>Isso quer dizer que paramos por aqui?<\/p>\n<p>Claro que n\u00e3o, nossa primeira iniciativa &#8211; que foi o lan\u00e7amento da plataforma <a href=\"https:\/\/www.umbler.com\/br\/hospedagem-nodejs\">NodeJS + MongoDB<\/a> &#8211; nos permitiu que valid\u00e1ssemos nossa ideia e, ainda por cima, agregou muito conhecimento para todos, incluindo nossos usu\u00e1rios. Acredito que a troca foi bacana e proveitosa para todos. Baseado nisso, temos em nosso road map a expans\u00e3o dessa plataforma para atender outras necessidades, outras linguagens, outras solu\u00e7\u00f5es e, claro, agregar mais facilidades para nossos usu\u00e1rios.<br \/>\nO que gostaria de trazer neste post era essa breve introdu\u00e7\u00e3o, um pouco mais conceitual, mas que se faz necess\u00e1ria para os pr\u00f3ximos posts que est\u00e3o sendo produzidos e que tem uma pegada mais t\u00e9cnica. \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Antes de come\u00e7ar a nossa s\u00e9rie de posts relacionados a containers, gostaria de perguntar: voc\u00ea ouviu o podcast produzido especialmente sobre este assunto? N\u00e3o? Ok, te desculpo e est\u00e1 aqui o link, ouve l\u00e1 porque est\u00e1 muito bacana. A analogia Nos \u00faltimos s\u00e9culos, o que possibilitou o ser humano realizar grandes quantidades de trocas e [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":5229,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[279,280],"class_list":["post-3164","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev","tag-containers","tag-docker"],"_links":{"self":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts\/3164"}],"collection":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/comments?post=3164"}],"version-history":[{"count":0,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts\/3164\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/media\/5229"}],"wp:attachment":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/media?parent=3164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/categories?post=3164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/tags?post=3164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}