{"id":2420,"date":"2016-10-31T16:55:11","date_gmt":"2016-10-31T16:55:11","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2420"},"modified":"2023-06-23T03:11:42","modified_gmt":"2023-06-23T10:11:42","slug":"docker-container-anti-patterns","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/docker-container-anti-patterns\/","title":{"rendered":"Padr\u00f5es antigos de cont\u00eaineres do Docker"},"content":{"rendered":"<p>Este blog explicar\u00e1 10 antipadr\u00f5es de cont\u00eaineres que vi nos \u00faltimos meses:<\/p>\n<ol>\n<li><strong>Dados ou registros em cont\u00eaineres<\/strong> - Os cont\u00eaineres s\u00e3o ideais para aplicativos sem estado e devem ser ef\u00eameros. Isso significa que nenhum dado ou registro deve ser armazenado no cont\u00eainer, caso contr\u00e1rio, eles ser\u00e3o perdidos quando o cont\u00eainer for encerrado. Em vez disso, use <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/persisting-couchbase-data-across-container-restarts\/\">mapeamento de volume<\/a> para mant\u00ea-los fora dos cont\u00eaineres. <a href=\"https:\/\/blog.arungupta.me\/getting-started-elk-stack-wildfly\/\">Pilha ELK<\/a>\u00a0pode ser usado para armazenar e processar registros. Se os volumes gerenciados forem usados durante o processo de teste inicial, remova-os usando\u00a0<code>-v<\/code> com a chave <code>docker rm<\/code> comando.<\/li>\n<li><strong>\u00a0Endere\u00e7os IP do cont\u00eainer<\/strong> - Cada cont\u00eainer recebe um endere\u00e7o IP. V\u00e1rios cont\u00eaineres se comunicam entre si para criar um aplicativo; por exemplo, um aplicativo implantado em um servidor de aplicativos precisar\u00e1 se comunicar com um banco de dados. Os cont\u00eaineres existentes s\u00e3o encerrados e novos cont\u00eaineres s\u00e3o iniciados o tempo todo. Depender do endere\u00e7o IP do cont\u00eainer exigir\u00e1 a atualiza\u00e7\u00e3o constante da configura\u00e7\u00e3o do aplicativo. Isso tornar\u00e1 o aplicativo fr\u00e1gil. Em vez disso, crie servi\u00e7os. Isso fornecer\u00e1 um nome l\u00f3gico que pode ser referenciado independentemente do n\u00famero crescente ou decrescente de cont\u00eaineres. Al\u00e9m disso, ele tamb\u00e9m oferece um balanceamento de carga b\u00e1sico.<\/li>\n<li><strong>Executar um \u00fanico processo em um cont\u00eainer<\/strong> - A <code>Dockerfile<\/code>\u00a0usou um <code>CMD<\/code> e <code>PONTO DE ENTRADA<\/code>. Muitas vezes, o CMD usar\u00e1 um script que executar\u00e1 alguma configura\u00e7\u00e3o da imagem e, em seguida, iniciar\u00e1 o cont\u00eainer. N\u00e3o tente iniciar v\u00e1rios processos usando esse script. \u00c9 importante seguir <em>separa\u00e7\u00e3o de preocupa\u00e7\u00f5es<\/em>\u00a0ao criar imagens do Docker. Isso dificultar\u00e1 muito o gerenciamento dos cont\u00eaineres, a coleta de registros e a atualiza\u00e7\u00e3o de cada processo individual. Voc\u00ea pode considerar dividir o aplicativo em v\u00e1rios cont\u00eaineres e gerenci\u00e1-los de forma independente.<\/li>\n<li><strong>N\u00e3o use <code>execu\u00e7\u00e3o de docas<\/code><\/strong> - O <code>execu\u00e7\u00e3o de docas<\/code> inicia um novo comando em um cont\u00eainer em execu\u00e7\u00e3o. Isso \u00e9 \u00fatil para anexar um shell usando o comando docker exec -it {cid} bash. Mas, fora isso, o cont\u00eainer j\u00e1 est\u00e1 executando o processo que deveria estar executando.<\/li>\n<li><strong>Mantenha sua imagem enxuta<\/strong> - Crie um novo diret\u00f3rio e inclua o Dockerfile e outros arquivos relevantes nesse diret\u00f3rio. Considere tamb\u00e9m o uso de .dockerignore para remover todos os registros, c\u00f3digo-fonte, registros etc. antes de criar a imagem. Certifique-se de remover todos os artefatos baixados depois de descompactados.<\/li>\n<li><strong>Criar imagem a partir de um cont\u00eainer em execu\u00e7\u00e3o<\/strong> - Uma nova imagem pode ser criada usando o <code>commit do docker<\/code> comando. Isso \u00e9 \u00fatil quando s\u00e3o feitas altera\u00e7\u00f5es no cont\u00eainer. Mas as imagens criadas com esse comando n\u00e3o podem ser reproduzidas. Em vez disso, fa\u00e7a altera\u00e7\u00f5es no Dockerfile, encerre os cont\u00eaineres existentes e inicie um novo cont\u00eainer com a imagem atualizada.<\/li>\n<li><strong>Credenciais de seguran\u00e7a na imagem do Docker<\/strong> - N\u00e3o armazene credenciais de seguran\u00e7a no Dockerfile. Elas est\u00e3o em texto claro e s\u00e3o verificadas em um reposit\u00f3rio. Isso as torna completamente vulner\u00e1veis. Use <code>-e<\/code> para especificar as senhas como vari\u00e1vel de ambiente de tempo de execu\u00e7\u00e3o. Alternativamente <code>--env-file<\/code> pode ser usado para ler vari\u00e1veis de ambiente de um arquivo. Outra abordagem \u00e9 usar o <code>CMD<\/code> ou <code>PONTO DE ENTRADA<\/code> para especificar um script. Esse script extrair\u00e1 as credenciais de um terceiro e, em seguida, configurar\u00e1 seu aplicativo.<\/li>\n<li><strong><code>mais recente<\/code> etiqueta<\/strong>: Come\u00e7ando com uma imagem como <code>couchbase<\/code> \u00e9 tentador. Se nenhuma tag for especificada, um cont\u00eainer ser\u00e1 iniciado usando a imagem <code>couchbase:latest<\/code>.  Essa imagem pode n\u00e3o ser realmente a mais recente e, em vez disso, referir-se a uma vers\u00e3o mais antiga. Para colocar um aplicativo em produ\u00e7\u00e3o, \u00e9 necess\u00e1rio um ambiente totalmente controlado com a vers\u00e3o exata da imagem. Leia isto <a href=\"https:\/\/container-solutions.com\/docker-latest-confusion\/\">Docker: a \u00faltima confus\u00e3o<\/a> postagem do colega Docker Captain <a href=\"https:\/\/twitter.com\/adrianmouat\">@adrianmouat<\/a>.  Certifique-se de usar sempre a tag ao executar um cont\u00eainer. Por exemplo, use\u00a0<code>couchbase:enterprise-4.5.1<\/code>\u00a0em vez de apenas <code>couchbase<\/code>.<\/li>\n<li><strong>Incompatibilidade de imped\u00e2ncia<\/strong> - N\u00e3o use imagens diferentes, nem mesmo tags diferentes nos ambientes de desenvolvimento, teste, prepara\u00e7\u00e3o e produ\u00e7\u00e3o. A imagem que \u00e9 a \"fonte da verdade\" deve ser criada uma vez e enviada para um reposit\u00f3rio. Essa imagem deve ser usada para diferentes ambientes daqui para frente. Em alguns casos, voc\u00ea pode considerar a execu\u00e7\u00e3o dos testes de unidade no arquivo WAR como parte da compila\u00e7\u00e3o do maven e, em seguida, criar a imagem. Mas qualquer teste de integra\u00e7\u00e3o do sistema deve ser feito na imagem que ser\u00e1 enviada para a produ\u00e7\u00e3o.<\/li>\n<li><strong>Portas de publica\u00e7\u00e3o<\/strong>\u00a0- N\u00e3o use <code>-P<\/code> para publicar todas as portas expostas. Isso permitir\u00e1 que voc\u00ea execute v\u00e1rios cont\u00eaineres e publique suas portas expostas. Mas isso tamb\u00e9m significa que todas as portas ser\u00e3o publicadas. Em vez disso, use <code>-p<\/code> para publicar portas espec\u00edficas.<\/li>\n<\/ol>\n<p>Acrescentando mais com base na discuss\u00e3o no Twitter...<\/p>\n<ol start=\"11\">\n<li><strong>Usu\u00e1rio raiz<\/strong> - N\u00e3o execute cont\u00eaineres como usu\u00e1rio root. O host e o cont\u00eainer compartilham o mesmo kernel. Se o cont\u00eainer for comprometido, um usu\u00e1rio root poder\u00e1 causar mais danos aos hosts subjacentes. Use <code>EXECUTAR groupadd -r couchbase &amp;&amp; useradd -r -g couchbase couchbase<\/code> para criar um grupo e um usu\u00e1rio nele. Use o bot\u00e3o <code>USU\u00c1RIO\u00a0<\/code>para mudar para esse usu\u00e1rio. Cada <code>USU\u00c1RIO<\/code> cria uma nova camada na imagem. Evite alternar o usu\u00e1rio para frente e para tr\u00e1s para reduzir o n\u00famero de camadas. Gra\u00e7as a <a href=\"https:\/\/twitter.com\/Aleksandar_78\/status\/792997901488234496\">@Aleksandar_78<\/a> por essa dica!<\/li>\n<li><strong>Depend\u00eancia entre cont\u00eaineres<\/strong> - Muitas vezes, os aplicativos dependem de cont\u00eaineres para serem iniciados em uma determinada ordem. Por exemplo, um cont\u00eainer de banco de dados deve estar ativo antes que um aplicativo possa se conectar a ele. O aplicativo deve ser resiliente a essas altera\u00e7\u00f5es, pois os cont\u00eaineres podem ser encerrados ou iniciados a qualquer momento. Nesse caso, fa\u00e7a com que o cont\u00eainer do aplicativo espere que a conex\u00e3o com o banco de dados seja bem-sucedida antes de prosseguir. N\u00e3o use scripts wait-for no Dockerfile para que os cont\u00eaineres sejam inicializados em uma ordem espec\u00edfica. Esperar por um determinado n\u00famero de segundos para que um determinado cont\u00eainer seja iniciado \u00e9 muito fr\u00e1gil. Agradecimentos a <a href=\"https:\/\/twitter.com\/ratnopam\/status\/793115894004129792\">@ratnopam<\/a> por essa dica!<\/li>\n<\/ol>\n<p>Que outros antipadr\u00f5es voc\u00ea segue? <a href=\"https:\/\/github.com\/docker\/labs\/tree\/master\/developer-tools\/java\">Docker para desenvolvedores Java<\/a>\u00a0\u00e9 um workshop pr\u00e1tico e individualizado que explica como come\u00e7ar a usar o Docker para desenvolvedores Java. Interessado em um tutorial mais aprofundado? Assista a este tutorial de duas horas do JavaOne! <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/containers\/\">couchbase.com\/containers<\/a>\u00a0mostra como executar o Couchbase em uma variedade de estruturas.<\/p>","protected":false},"excerpt":{"rendered":"<p>This blog will\u00a0explain 10 containers anti-patterns that I&#8217;ve seen over the past few months: Data or logs in containers &#8211; Containers are ideal for stateless applications and are meant\u00a0to be ephemeral. This means no data or logs should be stored [&hellip;]<\/p>","protected":false},"author":58,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[8933],"class_list":["post-2420","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker Container Anti Patterns - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/docker-container-anti-patterns\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Container Anti Patterns\" \/>\n<meta property=\"og:description\" content=\"This blog will\u00a0explain 10 containers anti-patterns that I&#8217;ve seen over the past few months: Data or logs in containers &#8211; Containers are ideal for stateless applications and are meant\u00a0to be ephemeral. This means no data or logs should be stored [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/docker-container-anti-patterns\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-10-31T16:55:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-23T10:11:42+00:00\" \/>\n<meta name=\"author\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@arungupta\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Docker Container Anti Patterns\",\"datePublished\":\"2016-10-31T16:55:11+00:00\",\"dateModified\":\"2023-06-23T10:11:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/\"},\"wordCount\":950,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/\",\"name\":\"Docker Container Anti Patterns - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-10-31T16:55:11+00:00\",\"dateModified\":\"2023-06-23T10:11:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Container Anti Patterns\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\",\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"caption\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\"},\"description\":\"Arun Gupta is the vice president of developer advocacy at Couchbase. He has built and led developer communities for 10+ years at Sun, Oracle, and Red Hat. He has deep expertise in leading cross-functional teams to develop and execute strategy, planning and execution of content, marketing campaigns, and programs. Prior to that he led engineering teams at Sun and is a founding member of the Java EE team. Gupta has authored more than 2,000 blog posts on technology. He has extensive speaking experience in more than 40 countries on myriad topics and is a JavaOne Rock Star for three years in a row. Gupta also founded the Devoxx4Kids chapter in the US and continues to promote technology education among children. An author of several books on technology, an avid runner, a globe trotter, a Java Champion, a JUG leader, NetBeans Dream Team member, and a Docker Captain, he is easily accessible at @arungupta.\",\"sameAs\":[\"https:\/\/x.com\/arungupta\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/arun-gupta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Docker Container Anti Patterns - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/docker-container-anti-patterns\/","og_locale":"pt_BR","og_type":"article","og_title":"Docker Container Anti Patterns","og_description":"This blog will\u00a0explain 10 containers anti-patterns that I&#8217;ve seen over the past few months: Data or logs in containers &#8211; Containers are ideal for stateless applications and are meant\u00a0to be ephemeral. This means no data or logs should be stored [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/docker-container-anti-patterns\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-10-31T16:55:11+00:00","article_modified_time":"2023-06-23T10:11:42+00:00","author":"Arun Gupta, VP, Developer Advocacy, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@arungupta","twitter_misc":{"Written by":"Arun Gupta, VP, Developer Advocacy, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Docker Container Anti Patterns","datePublished":"2016-10-31T16:55:11+00:00","dateModified":"2023-06-23T10:11:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/"},"wordCount":950,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/","url":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/","name":"Docker Container Anti Patterns - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-10-31T16:55:11+00:00","dateModified":"2023-06-23T10:11:42+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Container Anti Patterns"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f","name":"Arun Gupta, vice-presidente de defesa do desenvolvedor, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337","url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","caption":"Arun Gupta, VP, Developer Advocacy, Couchbase"},"description":"Arun Gupta \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE. Gupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre uma infinidade de t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta.","sameAs":["https:\/\/x.com\/arungupta"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/arun-gupta\/"}]}},"authors":[{"term_id":8933,"user_id":58,"is_guest":0,"slug":"arun-gupta","display_name":"Arun Gupta, VP, Developer Advocacy, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","first_name":"Arun","last_name":"Gupta","user_url":"","author_category":"","description":"Arun Gupta \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE.\r\n\r\nGupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre diversos t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2420"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2420\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2420"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}