{"id":11698,"date":"2016-04-01T12:11:34","date_gmt":"2016-04-01T09:11:34","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=11698"},"modified":"2016-03-24T10:49:19","modified_gmt":"2016-03-24T08:49:19","slug":"understanding-docker-ecosystem","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/","title":{"rendered":"Understanding the Docker Ecosystem"},"content":{"rendered":"<p>Attend any tech-related event or read any tech-related article over the past 18 months, and you will likely have heard of Docker and have an inkling of what it is and does.<\/p>\n<p>In short, Docker builds upon concepts of the past but packages them better. Docker is a tool for creating \u2018containers\u2019 that can hold just what you need for a discrete application or technology stack. Unlike Virtual Machines, these containers share the same resources for managing interactions between the containers and the host machine. This makes Docker containers quick, light, secure and shareable.<\/p>\n<p>Personally, as a technology writer and presenter, I have found Docker invaluable for creating presentations and demos. I can assemble a stack of components I need, run them and then destroy them again, keeping my system clean and uncluttered with packages and data I no longer need.<\/p>\n<p>Many developers could see a clear use case for Docker during development and testing but struggled to understand how best it could work in production. A flurry of third-party tools and services emerged to help developers deploy, configure, and manage their Docker workflows from development to production.<\/p>\n<p><a href=\"https:\/\/www.docker.com\/\">Docker<\/a> has been building their own \u2018official\u2019 toolkit through a series of takeovers and product releases. <a href=\"https:\/\/forums.docker.com\/t\/docker-orca-project\/2103\">Project Orca<\/a>, as it is known, was announced at last year\u2019s DockerCon US, though details are a little vague. In my opinion, Orca is more the strategy behind the consolidation of Dockers growing portfolio of products than an actual project or product.<\/p>\n<p>So in this article, I\u2019ll present a summary of what\u2019s currently available as part of the Docker ecosystem, how it can help you, and how the pieces fit together.<\/p>\n<h2>Docker Hub<\/h2>\n<p>At the heart of any project using Docker is a <em><a href=\"https:\/\/docs.docker.com\/engine\/reference\/builder\/\">Dockerfile<\/a><\/em>. This file contains instructions for Docker on how to build an image. Let\u2019s look at a simple example:<\/p>\n<pre class=\"brush:php\">FROM python:2.7\r\nADD . \/code\r\nWORKDIR \/code\r\nRUN pip install -r requirements.txt<\/pre>\n<p>In this example, the Dockerfile pulls a particular version of an existing image, copies the current local directory into the file system of the container, sets it as the working directory, and then installs Python dependencies from a text file via the <code>pip<\/code> command.<\/p>\n<p>The <a href=\"https:\/\/hub.docker.com\/\">Docker Hub<\/a> is the official source of pre-written Dockerfiles, providing public (for free) and private (paid) repositories for images. If you\u2019re looking for a Dockerfile to suit your needs, search the Hub first, using project documentation, downloads, and stars to help guide your decision.<\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_hub_search.png\" rel=\"attachment wp-att-11703\"><img decoding=\"async\" class=\"aligncenter wp-image-11703\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_hub_search-1024x611.png\" alt=\"docker_es_hub_search\" width=\"860\" height=\"513\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_hub_search-1024x611.png 1024w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_hub_search-300x179.png 300w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_hub_search-768x458.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<h2>Docker Engine<\/h2>\n<p>The Docker Engine builds Dockerfiles and turns them into usable containers. It is the core of Docker and nothing else will run without it. There are several options for installing the Docker Engine depending on your operating system, which you can <a href=\"https:\/\/docs.docker.com\/engine\/installation\/\">find more details about here<\/a>.<\/p>\n<p>To start a container based upon an image on the Docker Hub, pull its image and run it. Continuing the Python example:<\/p>\n<pre class=\"brush:php\">docker pull python\r\ndocker run -it --rm --name script-name -v \"$PWD\":\/usr\/src\/appname -w \/usr\/src\/appname python:3 python app.py<\/pre>\n<p>Thus pulls the latest Python image and then starts a container that runs a Python script and exits when complete. There are some other options set, and the <code>run<\/code> command provides many more; you can <a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/run\/\">read a complete guide here<\/a>.<\/p>\n<p>When a Docker <code>run<\/code> command starts to become more complex, it may be a better idea to create your own custom Dockerfile. To start a container based on a local Dockerfile, run the following inside the directory containing the file:<\/p>\n<pre class=\"brush:php\">docker build -t my_image .<\/pre>\n<p>This will create an image named <code>my_image<\/code>. Start a container based on the image by running:<\/p>\n<pre class=\"brush:php\">docker run -name my_image_container -i -t my_image<\/pre>\n<p>This starts a container named <code>my_image_container<\/code> based upon your custom <code>my_image<\/code>.<\/p>\n<h2>Kitematic<\/h2>\n<p>For those of you who would rather avoid the command line, <a href=\"https:\/\/www.docker.com\/products\/docker-kitematic\">Kitematic<\/a> is a great GUI tool for Mac OS X and Windows. Search for the image you need, create a container, and you\u2019re good to go. Kitematic offers basic configuration options, but for more advanced settings, you may need to dive into the command line.<\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic.png\" rel=\"attachment wp-att-11704\"><img decoding=\"async\" class=\"aligncenter wp-image-11704\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic-1024x790.png\" alt=\"docker_es_kitematic\" width=\"860\" height=\"664\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic-1024x790.png 1024w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic-300x231.png 300w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic-768x593.png 768w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic.png 1712w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<p>Your containers appear on the left hand side where they can be started, stopped, restarted, and most usefully, you can find container logs and direct SSH (the <em>exec<\/em> button) access.<\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic_buttons.png\" rel=\"attachment wp-att-11705\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-11705\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic_buttons.png\" alt=\"docker_es_kitematic_buttons\" width=\"417\" height=\"284\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic_buttons.png 417w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_kitematic_buttons-300x204.png 300w\" sizes=\"(max-width: 417px) 100vw, 417px\" \/><\/a><\/p>\n<h2>Docker Machine and Swarm<\/h2>\n<p>The first steps toward using Docker in production are understanding <a href=\"https:\/\/www.docker.com\/products\/docker-machine\">Machine<\/a> and Swarm, providing a simple set of tools for moving and scaling your local projects to a variety of virtualization and cloud providers.<\/p>\n<p>For example, to create a Docker instance on Azure:<\/p>\n<pre class=\"brush:php\">docker-machine create -d azure --azure-subscription-id=\"XXX\" --azure-subscription-cert=\"\/mycert.pem\" ecodemo<\/pre>\n<p>This command creates an Ubuntu 12.04-based VM named <code>ecodemo<\/code> with Docker preinstalled. Each provider requires different parameters and authentication methods, and default settings can be overridden. Read more details in the <a href=\"https:\/\/docs.docker.com\/machine\/concepts\/\">documentation<\/a> here.<\/p>\n<p>When combined with <a href=\"https:\/\/www.docker.com\/products\/docker-swarm\">Swarm<\/a>, Machine can create clusters of Docker instances that can be treated as one single, large Docker instance. Every Swarm cluster needs a master instance, which is created with the following command:<\/p>\n<pre class=\"brush:php\">docker-machine create\r\n  -d virtualbox\r\n  --swarm\r\n  --swarm-master\r\n  --swarm-discovery token:\/\/TOKEN_ID\r\n  swarm-master<\/pre>\n<p>This creates a Docker instance in VirtualBox and sets it as a master node in a Swarm cluster. The <code>TOKEN_ID<\/code> is important as it helps all nodes in a cluster identify each other. Aside from creating a token manually, there are <a href=\"https:\/\/docs.docker.com\/swarm\/discovery\/\">discovery systems<\/a> you can use to help manage this process.<\/p>\n<p>Add Docker instances to the Swarm cluster, using the same <code>TOKEN_ID<\/code>:<\/p>\n<pre class=\"brush:php\">docker-machine create\r\n  -d virtualbox\r\n  --swarm\r\n  --swarm-discovery token:\/\/TOKEN_ID\r\n  swarm-node-n<\/pre>\n<p><code>swarm-node-n<\/code> is a unique name for each node in the cluster.<\/p>\n<p>Now instead of starting containers on individual VMs, you can start containers on the cluster, and the master node will allocate it to the most available and capable node.<\/p>\n<h2>Docker Compose<\/h2>\n<p><a href=\"https:\/\/www.docker.com\/products\/docker-compose\">Compose<\/a> makes assembling applications consisting of multiple components (and thus containers) simpler; you can declare all of them in a single configuration file started with one command.<\/p>\n<p>Here\u2019s an example of a Compose file (named <code>docker-compose.yml<\/code>) that creates three instances of the <a href=\"http:\/\/crate.io\">Crate<\/a> database and an instance of the PHP framework <a href=\"https:\/\/laravel.com\/\">Laravel<\/a> (with some extra configuration). Crucially, the containers are linked with the <code>links<\/code> configuration option.<\/p>\n<pre class=\"brush:php\">crate1:\r\n  image: crate\r\n  ports:\r\n    - \"4200:4200\"\r\n    - \"4300:4300\"\r\ncrate2:\r\n  image: crate\r\ncrate3:\r\n  image: crate\r\n  volumes:\r\n    - .\/data:\/importdata\r\nlaravelcomposer:\r\n  image: dylanlindgren\/docker-laravel-composer\r\n  volumes:\r\n    - \/laravel-application:\/var\/www\r\n  command: --working-dir=\/var\/www install\r\n  links:\r\n    - crate1\r\nlaravelartisan:\r\n  image: dylanlindgren\/docker-laravel-artisan\r\n  links:\r\n    - crate1\r\n  volumes_from:\r\n    - laravelcomposer\r\n  working_dir: \/var\/www\r\n  command: serve --host=0.0.0.0:8080\r\n  ports:\r\n    - \"8000:8000\"\r\n    - \"8080:8080\"<\/pre>\n<p>All these instances and their configuration can now be started by running the following command in the same directory as the <em>docker-compose.yml<\/em> file:<\/p>\n<pre class=\"brush:php\">docker-compose up<\/pre>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_compose.png\" rel=\"attachment wp-att-11707\"><img decoding=\"async\" class=\"aligncenter wp-image-11707\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_compose-1024x415.png\" alt=\"docker_es_compose\" width=\"860\" height=\"348\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_compose-1024x415.png 1024w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_compose-300x122.png 300w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_compose-768x311.png 768w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_compose.png 1229w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<p>You can use similar subcommands as the <code>docker<\/code> command to affect all containers started with <code>docker-compose<\/code>. For example, <code>docker-compose stop<\/code> will stop all containers started with <code>docker-compose<\/code>.<\/p>\n<p>!New Call-to-action<\/p>\n<h2>Docker Cloud<\/h2>\n<p>Automated management and orchestration of containers has been the main piece of the Docker puzzle filled by third-party services until Docker acquired <a href=\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-tutum-aka-docker-cloud\/\">Tutum (which underpins Docker Cloud)<\/a> last year. While there is no integrated command line tool (yet), the Docker Cloud service accepts Docker Compose files to set up application stacks, so it isn\u2019t a large diversion from the rest of the ecosystem.<\/p>\n<p>For example:<\/p>\n<pre class=\"brush:php\">crate1:\r\n  image: crate\r\n  ports:\r\n    - \"4200:4200\"\r\n    - \"4300:4300\"\r\n  command: crate -Des.network.publish_host=_ethwe:ipv4_\r\ncrate2:\r\n  image: crate\r\n  command: crate -Des.network.publish_host=_ethwe:ipv4_\r\ncrate3:\r\n  image: crate\r\n  command: crate -Des.network.publish_host=_ethwe:ipv4_<\/pre>\n<p>This creates three instances of the same image, one with port allocation between the host machine and Docker manually set and automatically set on the others. I will revisit <code>command<\/code> soon.<\/p>\n<p>If you want to scale an application beyond one node (which can run as many containers as it can manage) and one private repository, Docker Cloud is a paid service. This is enough for experimentation purposes. Bear in mind that by default Docker Cloud manages containers hosted on third-party hosting services, so you will need to also pay their costs. It\u2019s possible to get the Docker Cloud agent running on any Linux host you may manage; you can <a href=\"https:\/\/docs.docker.com\/docker-cloud\/getting-started\/use-byon\/\">find instructions here<\/a>.<\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_running_services.png\" rel=\"attachment wp-att-11706\"><img decoding=\"async\" class=\"aligncenter wp-image-11706\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_running_services-1024x534.png\" alt=\"docker_es_running_services\" width=\"860\" height=\"448\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_running_services-1024x534.png 1024w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_running_services-300x156.png 300w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/03\/docker_es_running_services-768x400.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<p>The above screenshot shows three Docker containers running across two Digital Ocean instances using a preconfigured rule that allocates containers to hosts based on parameters you set. It will automatically ensure that the quantity of containers you specify are always running.<\/p>\n<p>In the Docker Compose example earlier, you might have noticed <code>_ethwe:ipv4_<\/code>. This is one other great feature of the Docker Cloud. Many distributed applications and services rely on \u2018<a href=\"https:\/\/en.wikipedia.org\/wiki\/Service_discovery\">Service Discovery<\/a>\u2018 to find other instances of the same service and communicate. When spreading services across data centers and physical machines, this has often required manual declaration of the instances or another way of them finding each other.<\/p>\n<p>Docker Cloud includes support for <a href=\"https:\/\/www.weave.works\/\">Weave<\/a> to create a \u2018soft\u2019 network across your real network; all containers and applications can discover each other, no matter where they are hosted. In the example above, we override the default command issued to the container to make sure it receives the information it needs to make use of this feature.<\/p>\n<h2>Data Center<\/h2>\n<p>So far, most of the tools covered in this article have been tools you install, host, and support yourself. For enterprise users looking for a higher guarantee of security, performance, and support, Docker offers <a href=\"https:\/\/www.docker.com\/products\/docker-datacenter\">Data Center<\/a>.<\/p>\n<p>It uses much of the same toolkit covered here but adds a private registry for your images, a private cloud, premium support, and third-party integrations with providers likely to appeal to enterprise users. These include user management with LDAP and Active Directory, container monitoring, and logging.<\/p>\n<h2>Conclusion<\/h2>\n<p>As you will see from my screenshots and your own experiments with these tools, they still feel like a set of connected but loosely coupled products, not a cohesive \u2018suite\u2019. Project Orca seems to be trying to focus on building consistency between all these projects, making each one a logical stepping stone to the next, all from one GUI or CLI. It aims to not only answer the question \u201cwhy should I use Docker?\u201d but also \u201cwhy would I not use Docker?\u201d<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/blog.codeship.com\/understanding-the-docker-ecosystem\/\">Understanding the Docker Ecosystem<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a> Florian Motlik 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>Attend any tech-related event or read any tech-related article over the past 18 months, and you will likely have heard of Docker and have an inkling of what it is and does. In short, Docker builds upon concepts of the past but packages them better. Docker is a tool for creating \u2018containers\u2019 that can hold &hellip;<\/p>\n","protected":false},"author":148,"featured_media":10356,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[326,217],"class_list":["post-11698","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development","tag-devops","tag-docker"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Understanding the Docker Ecosystem - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Attend any tech-related event or read any tech-related article over the past 18 months, and you will likely have heard of Docker and have an inkling of\" \/>\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\/web-development\/understanding-docker-ecosystem\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Understanding the Docker Ecosystem - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Attend any tech-related event or read any tech-related article over the past 18 months, and you will likely have heard of Docker and have an inkling of\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/\" \/>\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=\"2016-04-01T09:11:34+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=\"Chris Ward\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Chris Ward\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/\"},\"author\":{\"name\":\"Chris Ward\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/ec768d779e3ecb955c5f552f0f734757\"},\"headline\":\"Understanding the Docker Ecosystem\",\"datePublished\":\"2016-04-01T09:11:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/\"},\"wordCount\":1516,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"keywords\":[\"DevOps\",\"Docker\"],\"articleSection\":[\"Web Dev\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/\",\"name\":\"Understanding the Docker Ecosystem - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"datePublished\":\"2016-04-01T09:11:34+00:00\",\"description\":\"Attend any tech-related event or read any tech-related article over the past 18 months, and you will likely have heard of Docker and have an inkling of\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#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\/web-development\/understanding-docker-ecosystem\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Web Dev\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/web-development\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Understanding the Docker Ecosystem\"}]},{\"@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\/ec768d779e3ecb955c5f552f0f734757\",\"name\":\"Chris Ward\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e715e4a95de958fcd3da75cde89b6459b80f977d665284e37751ecdcb2b1e4c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e715e4a95de958fcd3da75cde89b6459b80f977d665284e37751ecdcb2b1e4c4?s=96&d=mm&r=g\",\"caption\":\"Chris Ward\"},\"description\":\"Chris Ward is a technical writer, speaker, and developer.\",\"url\":\"https:\/\/www.webcodegeeks.com\/author\/chris-ward\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Understanding the Docker Ecosystem - Web Code Geeks - 2026","description":"Attend any tech-related event or read any tech-related article over the past 18 months, and you will likely have heard of Docker and have an inkling of","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\/web-development\/understanding-docker-ecosystem\/","og_locale":"en_US","og_type":"article","og_title":"Understanding the Docker Ecosystem - Web Code Geeks - 2026","og_description":"Attend any tech-related event or read any tech-related article over the past 18 months, and you will likely have heard of Docker and have an inkling of","og_url":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2016-04-01T09:11:34+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":"Chris Ward","twitter_card":"summary_large_image","twitter_creator":"@webcodegeeks","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Chris Ward","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/"},"author":{"name":"Chris Ward","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/ec768d779e3ecb955c5f552f0f734757"},"headline":"Understanding the Docker Ecosystem","datePublished":"2016-04-01T09:11:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/"},"wordCount":1516,"commentCount":1,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","keywords":["DevOps","Docker"],"articleSection":["Web Dev"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/","url":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/","name":"Understanding the Docker Ecosystem - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","datePublished":"2016-04-01T09:11:34+00:00","description":"Attend any tech-related event or read any tech-related article over the past 18 months, and you will likely have heard of Docker and have an inkling of","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/web-development\/understanding-docker-ecosystem\/#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\/web-development\/understanding-docker-ecosystem\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Web Dev","item":"https:\/\/www.webcodegeeks.com\/category\/web-development\/"},{"@type":"ListItem","position":3,"name":"Understanding the Docker Ecosystem"}]},{"@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\/ec768d779e3ecb955c5f552f0f734757","name":"Chris Ward","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e715e4a95de958fcd3da75cde89b6459b80f977d665284e37751ecdcb2b1e4c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e715e4a95de958fcd3da75cde89b6459b80f977d665284e37751ecdcb2b1e4c4?s=96&d=mm&r=g","caption":"Chris Ward"},"description":"Chris Ward is a technical writer, speaker, and developer.","url":"https:\/\/www.webcodegeeks.com\/author\/chris-ward\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/11698","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\/148"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=11698"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/11698\/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=11698"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=11698"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=11698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}