{"id":827,"date":"2016-10-31T16:55:11","date_gmt":"2016-10-31T16:55:11","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/"},"modified":"2016-10-31T16:55:11","modified_gmt":"2016-10-31T16:55:11","slug":"docker-container-anti-patterns","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/","title":{"rendered":"Docker Container Anti Patterns"},"content":{"rendered":"\n<p>This blog will\u00a0explain 10 containers anti-patterns that I&#8217;ve seen over the past few months:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Data or logs in containers<\/strong> &#8211; Containers are ideal for stateless applications and are meant\u00a0to be ephemeral. This means no data or logs should be stored in the container\u00a0otherwise they&#8217;ll be lost when the container terminates. Instead use <a href=\"https:\/\/www.couchbase.com\/blog\/persisting-couchbase-data-across-container-restarts\/\">volume mapping<\/a> to persist them outside the containers. <a href=\"https:\/\/blog.arungupta.me\/getting-started-elk-stack-wildfly\/\">ELK stack<\/a>\u00a0could be used to store and process logs. If managed volumes are used during early testing process, then remove them using\u00a0<code>-v<\/code> switch with the <code>docker rm<\/code> command.<\/li>\n\n\n<li><strong>\u00a0IP addresses of container<\/strong> &#8211; Each container is assigned an IP address. Multiple containers\u00a0communicate\u00a0with each other to create an application, for example an application deployed on an application server will need to talk with a database. Existing containers are terminated\u00a0and new containers are started all the time.\u00a0Relying upon the IP address of the container will require constantly updating the application configuration. This will make the application fragile. Instead create services. This will\u00a0provide a logical name that can be referred independent of the growing and shrinking number of containers. And it also provides a basic load balancing as well.<\/li>\n\n\n<li><strong>Run a single process in a container<\/strong> &#8211; A <code>Dockerfile<\/code>\u00a0has\u00a0use one <code>CMD<\/code> and <code>ENTRYPOINT<\/code>.\u00a0Often, CMD will use a script that will perform some configuration of the image\u00a0and then start the container. Don&#8217;t try to\u00a0start multiple\u00a0processes using that script. Its important to follow <em>separation of concerns<\/em>\u00a0pattern when creating Docker images. This will make managing\u00a0your containers, collecting logs, updating each individual process that much harder. You may consider breaking up\u00a0application into multiple containers and\u00a0manage them independently.<\/li>\n\n\n<li><strong>Don&#8217;t use <code>docker exec<\/code><\/strong> &#8211; The <code>docker exec<\/code> command starts a new\u00a0command in a running container. This is useful for\u00a0attaching a shell using the docker exec -it {cid} bash. But other than that the container is already\u00a0running the process that its supposed to be running.<\/li>\n\n\n<li><strong>Keep your image lean<\/strong> &#8211; Create a new directory and include Dockerfile and other relevant files in that directory. Also consider using .dockerignore to remove any logs,\u00a0source code, logs etc before creating the image. Make sure to remove any downloaded artifacts\u00a0after they are unzipped.<\/li>\n\n\n<li><strong>Create image from a running container<\/strong> &#8211;\u00a0A new image can be created using the <code>docker commit<\/code> command. This is useful when any changes in the container have been made. But images created using this are non-reproducible. Instead make changes in the Dockerfile, terminate existing containers and start\u00a0a new container with the updated image.<\/li>\n\n\n<li><strong>Security credentials in Docker image<\/strong> &#8211; Do not\u00a0store security credentials in the Dockerfile. They are in clear text and checked into a repository. This makes them completely vulnerable. Use <code>-e<\/code> to specify passwords as runtime environment variable. Alternatively <code>--env-file<\/code> can be used to read environment variables from a file. Another approach is to used <code>CMD<\/code> or <code>ENTRYPOINT<\/code> to specify a script. This script will pull the credentials from a third party and then configure\u00a0your application.<\/li>\n\n\n<li><strong><code>latest<\/code> tag<\/strong>: Starting with an image like <code>couchbase<\/code> is tempting. If no tags are specified then a container is started using the image <code>couchbase:latest<\/code>. \u00a0This image may not actually be latest and instead refer to an older version. Taking an application into production requires a fully controller environment with exact version of the\u00a0image. Read this <a href=\"https:\/\/container-solutions.com\/docker-latest-confusion\/\">Docker: The latest confusion<\/a> post by fellow Docker Captain <a href=\"https:\/\/twitter.com\/adrianmouat\">@adrianmouat<\/a>. \u00a0Make sure to always use\u00a0tag\u00a0when running a container. For example, use\u00a0<code>couchbase:enterprise-4.5.1<\/code>\u00a0instead of just <code>couchbase<\/code>.<\/li>\n\n\n<li><strong>Impedance mismatch<\/strong> &#8211; Don&#8217;t use different images, or even different tags in dev, test, staging and production environment.\u00a0The image that is the &#8220;source of truth&#8221; should be created once\u00a0and pushed\u00a0to a repo. That image should be used for\u00a0different environments going forward. In some cases, you may consider running your unit tests on the WAR file as part of maven build and then create the image. But any system integration testing should be done on the image that will be pushed in production.<\/li>\n\n\n<li><strong>Publishing\u00a0ports<\/strong>\u00a0&#8211;\u00a0Don&#8217;t use <code>-P<\/code> to publish\u00a0all the exposed ports.\u00a0This will\u00a0allow you to run multiple\u00a0containers\u00a0and publish their exposed ports. But\u00a0this\u00a0also means that all the ports will be published. Instead use <code>-p<\/code> to publish specific ports.<\/li>\n\n<\/ol>\n\n\n\n<p>Adding more based upon discussion on twitter &#8230;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Root user<\/strong> &#8211; Don&#8217;t run containers as root user. The host and the container share the same kernel. If the container is compromised, a root user can do more damage to the underlying hosts. Use <code>RUN groupadd -r couchbase &amp;&amp; useradd -r -g couchbase couchbase<\/code> to create a group and a user in it. Use the <code>USER\u00a0<\/code>instruction to switch to that user. Each <code>USER<\/code> creates a new layer in the image. Avoid switching the user back and forth to reduce the number of layers. Thanks to <a href=\"https:\/\/twitter.com\/Aleksandar_78\/status\/792997901488234496\">@Aleksandar_78<\/a> for this tip!<\/li>\n\n\n<li><strong>Dependency between containers<\/strong> &#8211; Often applications rely upon containers to be started in a certain order. For example, a database container must be up before an application can connect to it. The application should be resilient to such changes as the containers may be terminated or started at any time. In this case, have the application container wait for the database connection to succeed before proceeding further.\u00a0Do not use wait-for scripts in Dockerfile for the containers to startup in a specific order. Particularly waiting for a certain number of seconds for a particular container to start is very fragile. Thanks to <a href=\"https:\/\/twitter.com\/ratnopam\/status\/793115894004129792\">@ratnopam<\/a> for this tip!<\/li>\n\n<\/ol>\n\n\n\n<p>What other anti-patterns do you follow? <a href=\"https:\/\/github.com\/docker\/labs\/tree\/master\/developer-tools\/java\">Docker for Java\u00a0developers<\/a>\u00a0is a self-paced hands-on workshop that explains how to get started with Docker for Java developers. Interested in a more deep dive tutorial? Watch this\u00a02-hours tutorial from JavaOne! <a href=\"https:\/\/couchbase.com\/containers\/\">couchbase.com\/containers<\/a>\u00a0shows how to run Couchbase in a variety of frameworks.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog will\u00a0explain 10 containers anti-patterns that I&#8217;ve seen over the past few months: Adding more based upon discussion on twitter &#8230; What other anti-patterns do you follow? Docker for Java\u00a0developers\u00a0is a self-paced hands-on workshop that explains how to get started with Docker for Java developers. Interested in a more deep dive tutorial? Watch this\u00a02-hours [&hellip;]<\/p>\n","protected":false},"author":58,"featured_media":18,"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":[126],"class_list":["post-827","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\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\/docker-container-anti-patterns\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\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: Adding more based upon discussion on twitter &#8230; What other anti-patterns do you follow? Docker for Java\u00a0developers\u00a0is a self-paced hands-on workshop that explains how to get started with Docker for Java developers. Interested in a more deep dive tutorial? Watch this\u00a02-hours [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/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=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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 minutes\" \/>\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\",\"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\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"inLanguage\":\"en-US\",\"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\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-10-31T16:55:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/docker-container-anti-patterns\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/docker-container-anti-patterns\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/docker-container-anti-patterns\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"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\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g8900a75409c646948fe0bd80f6240337\",\"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\\\/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\/docker-container-anti-patterns\/","og_locale":"en_US","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: Adding more based upon discussion on twitter &#8230; What other anti-patterns do you follow? Docker for Java\u00a0developers\u00a0is a self-paced hands-on workshop that explains how to get started with Docker for Java developers. Interested in a more deep dive tutorial? Watch this\u00a02-hours [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-10-31T16:55:11+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","type":"image\/png"}],"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 minutes"},"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","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\/5\/2026\/05\/couchbase-nosql-dbaas.png","inLanguage":"en-US","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\/5\/2026\/05\/couchbase-nosql-dbaas.png","datePublished":"2016-10-31T16:55:11+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/docker-container-anti-patterns\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","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":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g8900a75409c646948fe0bd80f6240337","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\/author\/arun-gupta\/"}]}},"acf":[],"authors":[{"term_id":126,"user_id":58,"is_guest":0,"slug":"arun-gupta","display_name":"Arun Gupta, VP, Developer Advocacy, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/827","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=827"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/827\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/18"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=827"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=827"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=827"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=827"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}