{"id":17044,"date":"2017-05-08T12:15:28","date_gmt":"2017-05-08T09:15:28","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=17044"},"modified":"2017-05-05T11:08:55","modified_gmt":"2017-05-05T08:08:55","slug":"docker-enables-polyglot-shops","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/","title":{"rendered":"Docker Enables Polyglot Shops"},"content":{"rendered":"<p>If your infrastructure is <a href=\"https:\/\/www.docker.com\/\">Docker<\/a> based, you\u2019ve already created an environment that isn\u2019t dependent on a single language. Step 2 is realizing why the words \u201cstandardize on language <em>y<\/em>\u201d no longer make sense.<\/p>\n<p>A while back, I wrote a piece on how <a href=\"https:\/\/blog.codeship.com\/exploring-microservices-architecture-on-heroku\/\">Heroku streamlines a lot of the pain points of microservice architecture<\/a>. One of the big wins I talked about was the ability to deploy code in multiple languages rather than investing in a lot of deployment process around a single primary language. When your infrastructure runs on Docker, you\u2019ve already built almost all of the same wins. You\u2019ve invested in a process that abstracts development, testing, and deployment consistently\u2026totally independent of language choices. However, not everyone is prepared to embrace that freedom just because they\u2019ve removed infrastructure investments from the equation.<\/p>\n<p>So let\u2019s take a look at the other concerns brought on by the polyglot potential of Docker.<\/p>\n<h3>Concern 1: Nobody here knows language x<\/h3>\n<p>This is often the single loudest opposition to introducing a new language in a company. Is existing knowledge a valid concern when introducing something new? If so, in what context? Has anyone polled other developers or are we working from a broad assumption?<\/p>\n<p>Already knowing language <em>x<\/em> is a valid concern if you\u2019re trying to assemble a team to build something new. You\u2019re looking at potential learning curve for multiple people to develop something from scratch, learn workflow and process, and learn to work with each other. Naturally, it\u2019s going to make more sense in many cases to use something the team already knows in that situation.<\/p>\n<p>The flip side is when you have developers who do already know language <em>x<\/em> and want to use it to solve a problem. In this situation, there is no training time or learning curve\u2026those developers simply get to develop the solution among already known workflows and processes. If the language provides a compelling solution to the problem at hand, it makes sense to proceed. Until we get to\u2026<\/p>\n<h3>Concern 2: What happens if you leave?<\/h3>\n<p>Right alongside \u201cnobody knows language <em>x<\/em>\u201d is \u201cwho will maintain it once you\u2019re gone?\u201d It\u2019s a valid concern\u2026until we consider how developers learn languages. If your replacement is asked to learn a new language and then build something in that language from scratch to deploy to production, that\u2019s going to take a while. They\u2019ll have to try to work through all of the ins and outs, tooling and best practices.<\/p>\n<p>If they\u2019re asked to learn enough of a new language to track down an error in an existing codebase, where they have all of the other code as a reference point, project workflow defined, and tooling already chosen, it\u2019s a tremendously simpler task that just about any competent programmer should be able to do. It\u2019s a difference of a few days versus a few weeks in terms of potential ramp-up time.<\/p>\n<h3>Concern 3: We can reuse code written in language <em>y<\/em><\/h3>\n<p>The ability to reuse library code written in a primary language at a company is an extremely good point\u2026in theory. In practice, this is much more difficult than it seems.<\/p>\n<p>Developers will clearly reuse their own code or their own libraries, because they inherently know that code, where it is, what it does, where its limitations are, and how to modify it. But at a certain size, this type of knowledge exchange for internal libraries simply doesn\u2019t happen.<\/p>\n<p>One of the perks of internal development is that your standard of completion is \u201cgood enough for your needs,\u201d while open-source libraries that we\u2019re used to browsing and reusing are \u201cgood enough for the problem, well described enough that I can find them, well documented enough that I can figure it out, well tested enough that other people use them, and consistently available enough that I always know just where to look for them.\u201d That\u2019s a harsh reality for internally shared code in a lot of different companies.<\/p>\n<p>Do you need a function that calculates a particular formula for a project\u2026or do you need to write a reusable and well-documented library to calculate that formula on any project that you\u2019ll advertise internally in a consistently searched location and likely end up maintaining if somebody else does need to use it?<\/p>\n<p>If I run over to Google and search for \u201clibrary that does\u2026\u201d it\u2019s not searching my company\u2019s private code bases. If you\u2019re looking for a solution to a problem that you expect is a common one, a quick Google will turn it up. Internally, you\u2019re not going to expect every common problem to be solved so you\u2019ll tend not to look unless you\u2019re actively told about those solutions. That creates additional overhead to properly communicate (and recommunicate to new hires).<\/p>\n<p>If there is an internal library that makes sense to use over an external replacement, does it need to be included in my code or is it a consumable microservice? How many different places does this code need to live? How often is the reuse really happening right now?<\/p>\n<h2>The Benefits of a Polyglot Philosophy<\/h2>\n<p>Once we get past the concerns of a polyglot programming approach in a company, we get to realize a lot of the benefits.<\/p>\n<h3>Foster a creative environment<\/h3>\n<p>Developers are nothing if not creative. Our entire lives are based around solving both business and technical problems. Opening the door to more potential solutions is good for everybody.<\/p>\n<p>Fostering a creative environment empowers your developers to explore more solutions with the confidence that those solutions will be openly received and fairly evaluated, which further encourages them to look for those great solutions. It\u2019s a rewarding cycle that feeds itself via motivation and continuous self-education.<\/p>\n<h3>Avoid quicksand<\/h3>\n<p>Language decisions are all based around tradeoffs given constraints. Solving the same technical problem at two different companies could mean two entirely different languages based on the constraints of those individual companies. There\u2019s no silver bullet, but every language has a weaknesses.<\/p>\n<p>Languages all make tradeoffs around development time, environment access\/limitations, performance, verbosity or readability, flexibility, concurrency, portability, ram usage, reliability, fragility, calculation, libraries, and ecosystems just off the cuff.<\/p>\n<p>When you chain your company to a single language, you\u2019re essentially forcing yourself to live with the pain points\u2026which forces your developers to live with those pain points\u2026which can <a href=\"https:\/\/www.scruminc.com\/happiness-metric-wave-of-future\/\">create a morale problem<\/a>, especially if a potential solution is discouraged from consideration.<\/p>\n<h2>How Does Docker Address All of These Concerns?<\/h2>\n<p>Docker isn\u2019t a silver bullet either, but a company with a Docker-based infrastructure for delivery through the pipeline has already abstracted away most of the language-specific parts of its infrastructure.<\/p>\n<h3>Production\/staging<\/h3>\n<p>When Docker is used to deploy code to production, you deploy your code inside of a container. You don\u2019t have to configure an entire set of servers. You simply deploy the container to a cluster with multiple other containers.<\/p>\n<p>As usage grows, you might need to dedicate resources, but as far as your deployment process is concerned, you\u2019re just dropping the container and running it. It\u2019s already configured to whatever language you\u2019re using. Your infrastructure doesn\u2019t have to worry about mapping a lot of language-specific functionality to fit the model.<\/p>\n<h3>Testing<\/h3>\n<p>By using Docker for testing, you see similar benefits for your continuous integration system (like Codeship). It just needs to know where to get the container and how to run the tests\u2026there\u2019s no language-specific setup or maintenance involved. Just run the tests and report on those results.<\/p>\n<h3>Development<\/h3>\n<p>This one is still the trickiest. Docker in development has gotten tremendously better over the years with the additions of the likes of Docker for Mac, Docker for Windows, and Ubuntu on Windows, but depending on your development workflow, using Docker for development may still have some stumbling blocks.<\/p>\n<p>If you\u2019re mostly developing within a text editor or Vim\/Emacs, these probably won\u2019t be as big of an issue. The more robust environments that take the time to index the entire codebase, including dependencies so that you can jump around in the reference points of code, can have some difficulties accessing those dependencies installed within a container. Other factors, like automatic test suites that pipe output to your machine\u2019s notification system on file saves or IDE-based debugger tools, could also take some additional work to get working. These quirks still aren\u2019t perfect in development environments, although they are seemingly getting better everyday.<\/p>\n<p>Nonetheless, native setup for development is a much more reasonable assumption, even in a polyglot environment. Although your company may use many languages, each individual developer is not likely to do the same. Configuring a local development environment for the language that you\u2019re going to be working on for a while isn\u2019t likely to be a tall order if using Docker for development proves tricky.<\/p>\n<p>In so many cases, development environments utilize additional packages that aren\u2019t deployed up the chain, so a lot of the ideal of \u201cmirroring production\u201d isn\u2019t always happening. You can always run your tests locally within the container.<\/p>\n<h2>Next Steps<\/h2>\n<p>If you\u2019re using Docker across your testing and deployment processes, you\u2019ve already taken the steps necessary to enable a polyglot environment in your company. Take advantage of your new-found superpowers and see what fruit it can bear.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"https:\/\/blog.codeship.com\/docker-enables-polyglot-shops\/\">Docker Enables Polyglot Shops<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a>\u00a0Barry Jones at the <a href=\"http:\/\/blog.codeship.com\/\">Codeship Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>If your infrastructure is Docker based, you\u2019ve already created an environment that isn\u2019t dependent on a single language. Step 2 is realizing why the words \u201cstandardize on language y\u201d no longer make sense. A while back, I wrote a piece on how Heroku streamlines a lot of the pain points of microservice architecture. One of &hellip;<\/p>\n","protected":false},"author":120,"featured_media":10356,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[217],"class_list":["post-17044","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-docker"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker Enables Polyglot Shops - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"If your infrastructure is Docker based, you\u2019ve already created an environment that isn\u2019t dependent on a single language. Step 2 is realizing why the words\" \/>\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.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Enables Polyglot Shops - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"If your infrastructure is Docker based, you\u2019ve already created an environment that isn\u2019t dependent on a single language. Step 2 is realizing why the words\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2017-05-08T09:15:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Barry Jones\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@brightball\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Barry Jones\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/\"},\"author\":{\"name\":\"Barry Jones\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/5ebda3eb9033013c2d363300e021cc3a\"},\"headline\":\"Docker Enables Polyglot Shops\",\"datePublished\":\"2017-05-08T09:15:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/\"},\"wordCount\":1602,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"keywords\":[\"Docker\"],\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/\",\"name\":\"Docker Enables Polyglot Shops - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"datePublished\":\"2017-05-08T09:15:28+00:00\",\"description\":\"If your infrastructure is Docker based, you\u2019ve already created an environment that isn\u2019t dependent on a single language. Step 2 is realizing why the words\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/devops\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Docker Enables Polyglot Shops\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/5ebda3eb9033013c2d363300e021cc3a\",\"name\":\"Barry Jones\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/21b1c62bf13dbef5851b07329e4e82ca7932a42b9885217262d8236a209072db?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/21b1c62bf13dbef5851b07329e4e82ca7932a42b9885217262d8236a209072db?s=96&d=mm&r=g\",\"caption\":\"Barry Jones\"},\"description\":\"Barry is a business owner, infrastructure nut, and database obsessed web developer who spends too much time in Ruby, Go and PHP code. He blogs about it at brightball.com.\",\"sameAs\":[\"http:\/\/brightball.com\/\",\"https:\/\/x.com\/brightball\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/barry-jones\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker Enables Polyglot Shops - Web Code Geeks - 2026","description":"If your infrastructure is Docker based, you\u2019ve already created an environment that isn\u2019t dependent on a single language. Step 2 is realizing why the words","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.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/","og_locale":"en_US","og_type":"article","og_title":"Docker Enables Polyglot Shops - Web Code Geeks - 2026","og_description":"If your infrastructure is Docker based, you\u2019ve already created an environment that isn\u2019t dependent on a single language. Step 2 is realizing why the words","og_url":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2017-05-08T09:15:28+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","type":"image\/jpeg"}],"author":"Barry Jones","twitter_card":"summary_large_image","twitter_creator":"@brightball","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Barry Jones","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/"},"author":{"name":"Barry Jones","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/5ebda3eb9033013c2d363300e021cc3a"},"headline":"Docker Enables Polyglot Shops","datePublished":"2017-05-08T09:15:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/"},"wordCount":1602,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","keywords":["Docker"],"articleSection":["DevOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/","url":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/","name":"Docker Enables Polyglot Shops - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","datePublished":"2017-05-08T09:15:28+00:00","description":"If your infrastructure is Docker based, you\u2019ve already created an environment that isn\u2019t dependent on a single language. Step 2 is realizing why the words","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-enables-polyglot-shops\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.webcodegeeks.com\/category\/devops\/"},{"@type":"ListItem","position":3,"name":"Docker Enables Polyglot Shops"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/5ebda3eb9033013c2d363300e021cc3a","name":"Barry Jones","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/21b1c62bf13dbef5851b07329e4e82ca7932a42b9885217262d8236a209072db?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21b1c62bf13dbef5851b07329e4e82ca7932a42b9885217262d8236a209072db?s=96&d=mm&r=g","caption":"Barry Jones"},"description":"Barry is a business owner, infrastructure nut, and database obsessed web developer who spends too much time in Ruby, Go and PHP code. He blogs about it at brightball.com.","sameAs":["http:\/\/brightball.com\/","https:\/\/x.com\/brightball"],"url":"https:\/\/www.webcodegeeks.com\/author\/barry-jones\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/17044","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/120"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=17044"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/17044\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/10356"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=17044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=17044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=17044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}