{"id":91413,"date":"2019-09-06T13:05:32","date_gmt":"2019-09-06T18:05:32","guid":{"rendered":"https:\/\/wpengine.com\/?p=91413"},"modified":"2020-02-12T20:50:03","modified_gmt":"2020-02-13T02:50:03","slug":"a-high-level-guide-to-containerization","status":"publish","type":"post","link":"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/","title":{"rendered":"A High-Level Guide to Containerization"},"content":{"rendered":"\n<p>The concept of small, lightweight execution environments, known as containers, has been a phenomenon in computer science for more than a decade. Over the past ten years, this technology has grown rapidly in popularity, and software such as <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/www.docker.com\/\" target=\"_blank\">Docker<\/a> and <a href=\"https:\/\/kubernetes.io\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">Kubernetes<\/a> have arrived on the scene to support the \u201ccontainer revolution.\u201d Still, even with its increase in adoption and popularity, containerization remains a mystery to many. In this guide, we\u2019ll walk you through containers at a high level. Armed with this knowledge, you can approach the actual implementation of containers with more confidence and clarity.&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Containers: An Overview&nbsp;<\/strong><\/h2>\n\n\n\n<p>Within an operating system (OS), let\u2019s say <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/en.wikipedia.org\/wiki\/Linux\" target=\"_blank\">Linux<\/a>, users have the ability to run processes. These processes share a number of qualities associated with the space they take up in the operating system: address space, identification numbers, etc. Operating systems are designed to allow a number of processes to run concurrently. That\u2019s all fine and well, but what if you\u2019d like to isolate certain processes? In the most basic sense, a container creates an environment where an isolated process can run. Now, within that isolated space, you can own process space, own network interference, install packages, run services, and tinker with routing.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>That Sounds Like a VM, What\u2019s the Difference?&nbsp;<\/strong>&nbsp;<\/h2>\n\n\n\n<p>While working with containers can have the feeling of working in a separate VM, it\u2019s important to know the difference. While containers enable a way to virtualize an OS so that multiple workloads can run on a single OS instance, VMs allow the hardware to virtualize to run multiple OS instances. A container uses the host kernel, can\u2019t run multiple OSes, and can\u2019t have its own modules. Once applications are containerized, they are able to be deployed on any infrastructure (virtual machines, public cloud infrastructure, bare metal, etc.).&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"435\" src=\"https:\/\/wpengine.com\/wp-content\/uploads\/2019\/09\/VMs-versus-Containers-1024x435.png\" alt=\"\" class=\"wp-image-91414\" srcset=\"https:\/\/wpengine.com\/case-studies\/wp-content\/uploads\/2019\/09\/VMs-versus-Containers.png 1024w, https:\/\/wpengine.com\/case-studies\/wp-content\/uploads\/2019\/09\/VMs-versus-Containers-300x127.png 300w, https:\/\/wpengine.com\/case-studies\/wp-content\/uploads\/2019\/09\/VMs-versus-Containers-768x326.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption><br>Virtual Machines vs. Containerization. Image Source: <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/blog.docker.com\/2018\/08\/containers-replacing-virtual-machines\/\" target=\"_blank\">Docker Blog<\/a>. <\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What Does That Look Like?&nbsp;<\/strong><\/h2>\n\n\n\n<p>If you were to put a shell on that process, you\u2019d find a process with its own unique <strong>namespace<\/strong>. Therefore, you\u2019re only seeing the processes that run in that specific container. In addition to the namespace, containers allow you to add <strong>cgroups<\/strong> that restrict the capabilities of the process. Cgroups can do a number of things including limit the amount of CPU your process can use or restrict the system calls the process can make.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Diving Deeper: Types of Cgroups and Namespaces&nbsp;<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Namespaces:<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>PID: <\/strong>The PID namespace provides processes with an independent set of process IDs (PIDs) from other namespaces. Think of this like a process having children. They have their own name and they take up their own space but they are still related to you, the original process. PID namespaces are nested, meaning when a new process is created it will have a PID for each namespace from its current namespace up to the initial PID namespace.&nbsp;<\/li><li><strong>Network<\/strong>: Network namespaces virtualize the network stack. This allows you to run programs on any port you want without it conflicting with what is already running.&nbsp;<\/li><li><strong>Mount<\/strong>: Mount namespaces control mount points. Upon creation, the mounts from the current mount namespace are copied to the new namespace. Essentially, you are able to mount and unmount file systems without it affecting the host system by making a clone of a namespace and then altering it independently.&nbsp;<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Cgroups:&nbsp;<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Memory limitation: <\/strong>Isolates the resource usage (CPU, memory, disk I\/O, network, etc.)&nbsp;<\/li><li><strong>Seccomb-bpf: <\/strong>Filters which system calls your processes run.&nbsp;<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What else can \u2018Container\u2019 Mean?<\/strong><\/h2>\n\n\n\n<p>Other than an isolated process running in its own sandbox, what else do people mean when they refer to containers? There\u2019s such a thing as a \u201ccontainer image.\u201d An image is an inert, immutable file that&#8217;s essentially a snapshot of a container. If you use the build command to <em>create<\/em> an image, you use the run command to <em>produce<\/em> a container. I\u2019m a writer and I like metaphors so here you go: if an image is the recipe, the container is the cake. With the recipe, you can make as many cakes as you\u2019d like. Maybe you made a cake but you aren\u2019t craving sweets right now? Put the cake in the freezer; we call this a stopped container.&nbsp;<\/p>\n\n\n\n<p>Images are arranged in an image hierarchy. You have one binary state and you add something, creating a new image. From there you add something on top of them, adding a third layer. This hierarchical nature allows for the sharing of application stacks resulting in the consolidation of certain binary states. This is a good thing because multiple processes can pull from images at once. This hierarchical nature also means that things are inherently connected. The patching of a vulnerability on one image will result in changes to all the other nodes.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is Docker?&nbsp;<\/strong><\/h2>\n\n\n\n<p>Containers sound cool, right? If you were to build a bunch of scripts around these basic Linux kernels that isolate the containers in a lightweight and usable manner, we\u2019d be talking about Docker. Docker works by alleviating a problem developers have when using containers: it\u2019s difficult to ship code to the server. This is because the traditional software stack is comprised of dozens of software components and thousands of places where that component might need to run.&nbsp;<\/p>\n\n\n\n<p>Metaphor alert! Think of a world in which shipping companies don\u2019t exist. You create a product and, because there is no company to help you ship that specific product, you need to analyze all the different effective ways in which to ship products (boats, planes, buses, etc.)&nbsp; If you have products of various sizes and fragility, you might have to look at various options and find that infrastructure. What a nightmare. It\u2019s the same with shipping isolated code to your server. Docker is the shipping company that has the infrastructure in place to erase that difficulty. Now, shipping your code is scalable, repeatable, and less expensive.&nbsp;<\/p>\n\n\n\n<p>Let\u2019s imagine your tech stack. On the bottom, you have your server hardware (NGINX, AWS, etc.) On top of the hardware, you have the host operating system. Docker will then be installed on top of the OS, allowing us to spin up containers.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is Kubernetes?<\/strong><\/h2>\n\n\n\n<p>There\u2019s a small misconception that when working with containers, you have to use either Docker <em>or<\/em> Kubernetes. Kubernetes allows you to use your existing Docker containers and workloads but allows you to tackle some of the complex issues when trying to scale. Containers that use Docker become complicated when you need to adjust the current workflow or introduce a new microservice. This is because actions like these require strategic scaling for each independent application in order to avoid docks in load time. The fundamental premise behind Kubernetes is \u201cdesired state management,\u201d which means that Kubernetes allows distributed containerized systems to run resiliently.&nbsp;<\/p>\n\n\n\n<p>Architecturally, Kubernetes is made up of several components. For the purpose of simplicity and comprehension, I\u2019ll only discuss a few major players. The \u201cmaster\u201d component is the <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/architecture\/master-node-communication\/\">Kubernetes Cluster Services Component<\/a>. The KBs Cluster Service Component, through its own API,&nbsp; is fed a specific configuration which it is expected to interpret and run in the infrastructure. This infrastructure is called worker nodes which act as a host for individual containers. Kubernetes worker nodes have a unique component called a kubelet which is responsible for communicating with the Kubernetes Cluster Services Component and making sure that containers are run in the correct pod (a group of one or more containers). <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"405\" src=\"https:\/\/wpengine.com\/wp-content\/uploads\/2019\/09\/master-node-and-worker-node-.png\" alt=\"\" class=\"wp-image-91426\" srcset=\"https:\/\/wpengine.com\/case-studies\/wp-content\/uploads\/2019\/09\/master-node-and-worker-node-.png 720w, https:\/\/wpengine.com\/case-studies\/wp-content\/uploads\/2019\/09\/master-node-and-worker-node--300x169.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><figcaption><br>Kubernetes architecture. Image Source: <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/medium.com\/@tsuyoshiushio\/kubernetes-in-three-diagrams-6aba8432541c\" target=\"_blank\">Kubernetes in Three Diagrams<\/a>. <\/figcaption><\/figure>\n\n\n\n<p><strong>&nbsp;<\/strong>The configuration is fed to the master component via a deployment .yaml file. Within the.yaml file is a pod configuration that contains one or more container images. Also within the .yaml file is the ReplicaSet Controller which is responsible for identifying how many containers will run in a specific pod. The deployment file will feed into the Cluster Services API and the Cluster Services Component will figure out how to schedule the right pod in the right worker node, at the right time. If a worker node becomes unavailable, it is up to the Kubernetes Master Component to reschedule pods.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Learn More About Containers, Docker, and Kubernetes&nbsp;<\/strong><\/h2>\n\n\n\n<p>This is a basic guide for understanding the fundamental concepts behind containers, Docker, and Kubernetes. For in-depth information, check out the <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/docs.docker.com\/\" target=\"_blank\">Docker<\/a> and <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/kubernetes.io\/docs\/home\/\" target=\"_blank\">Kubernetes<\/a> documentation. Curious about getting started with Docker in WordPress? Check out this <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/torquemag.io\/2016\/08\/docker-local-wordpress-development\/\" target=\"_blank\">informative article<\/a> or learn about <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/torquemag.io\/2017\/09\/using-service-container-improve-wordpress-code\/\" target=\"_blank\">using a service container to improve your WordPress code<\/a>. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>The concept of small, lightweight execution environments, known as containers, has been a phenomenon in computer science for more than a decade. Over the past ten years, this technology has grown rapidly in popularity, and software such as Docker and Kubernetes have arrived on the scene to support the \u201ccontainer revolution.\u201d Still, even with its<span class=\"tile__ellipses\">&hellip;<\/span><span class=\"tile__ellipses--animated\"><\/span><\/p>\n","protected":false},"author":173,"featured_media":91428,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[1308,1309,1310],"class_list":["post-91413","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-containers","tag-docker","tag-kubernetes"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A High-Level Guide to Containerization<\/title>\n<meta name=\"description\" content=\"Do containers confuse you? In this high-level guide to containerization, you&#039;ll get a better understanding of containers, Docker, and Kubernetes.\" \/>\n<meta name=\"robots\" content=\"noindex, follow\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A High-Level Guide to Containerization\" \/>\n<meta property=\"og:description\" content=\"Do containers confuse you? In this high-level guide to containerization, you&#039;ll get a better understanding of containers, Docker, and Kubernetes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/\" \/>\n<meta property=\"og:site_name\" content=\"WP Engine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/wpengine\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-06T18:05:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-13T02:50:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wpengine.com\/case-studies\/wp-content\/uploads\/2019\/09\/Containerization_hero-1024x538.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"538\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Alyssa Cuda\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wpengine\" \/>\n<meta name=\"twitter:site\" content=\"@wpengine\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alyssa Cuda\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/\",\"url\":\"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/\",\"name\":\"A High-Level Guide to Containerization\",\"isPartOf\":{\"@id\":\"https:\/\/wpengine.com\/case-studies\/#website\"},\"datePublished\":\"2019-09-06T18:05:32+00:00\",\"dateModified\":\"2020-02-13T02:50:03+00:00\",\"author\":{\"@id\":\"https:\/\/wpengine.com\/case-studies\/#\/schema\/person\/2e7ae57f60120ddae3dc029b03cfa81a\"},\"description\":\"Do containers confuse you? In this high-level guide to containerization, you'll get a better understanding of containers, Docker, and Kubernetes.\",\"breadcrumb\":{\"@id\":\"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wpengine.com\/case-studies\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A High-Level Guide to Containerization\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wpengine.com\/case-studies\/#website\",\"url\":\"https:\/\/wpengine.com\/case-studies\/\",\"name\":\"WP Engine\",\"description\":\"Managed Hosting for WordPress\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wpengine.com\/case-studies\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/wpengine.com\/case-studies\/#\/schema\/person\/2e7ae57f60120ddae3dc029b03cfa81a\",\"name\":\"Alyssa Cuda\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wpengine.com\/case-studies\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9031010d4260959c1fffb0b199ffa33db42a2b53baa3bf9927a289237e907252?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9031010d4260959c1fffb0b199ffa33db42a2b53baa3bf9927a289237e907252?s=96&d=mm&r=g\",\"caption\":\"Alyssa Cuda\"},\"description\":\"Alyssa is a Content Specialist at WP Engine. If she\u2019s not searching for a swimming hole to escape the heat in, you can usually find her baking something caloric or reading.\u2002\u2002\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A High-Level Guide to Containerization","description":"Do containers confuse you? In this high-level guide to containerization, you'll get a better understanding of containers, Docker, and Kubernetes.","robots":{"index":"noindex","follow":"follow"},"og_locale":"en_US","og_type":"article","og_title":"A High-Level Guide to Containerization","og_description":"Do containers confuse you? In this high-level guide to containerization, you'll get a better understanding of containers, Docker, and Kubernetes.","og_url":"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/","og_site_name":"WP Engine","article_publisher":"https:\/\/www.facebook.com\/wpengine","article_published_time":"2019-09-06T18:05:32+00:00","article_modified_time":"2020-02-13T02:50:03+00:00","og_image":[{"width":1024,"height":538,"url":"https:\/\/wpengine.com\/case-studies\/wp-content\/uploads\/2019\/09\/Containerization_hero-1024x538.jpg","type":"image\/jpeg"}],"author":"Alyssa Cuda","twitter_card":"summary_large_image","twitter_creator":"@wpengine","twitter_site":"@wpengine","twitter_misc":{"Written by":"Alyssa Cuda","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/","url":"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/","name":"A High-Level Guide to Containerization","isPartOf":{"@id":"https:\/\/wpengine.com\/case-studies\/#website"},"datePublished":"2019-09-06T18:05:32+00:00","dateModified":"2020-02-13T02:50:03+00:00","author":{"@id":"https:\/\/wpengine.com\/case-studies\/#\/schema\/person\/2e7ae57f60120ddae3dc029b03cfa81a"},"description":"Do containers confuse you? In this high-level guide to containerization, you'll get a better understanding of containers, Docker, and Kubernetes.","breadcrumb":{"@id":"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wpengine.com\/case-studies\/a-high-level-guide-to-containerization\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wpengine.com\/case-studies\/"},{"@type":"ListItem","position":2,"name":"A High-Level Guide to Containerization"}]},{"@type":"WebSite","@id":"https:\/\/wpengine.com\/case-studies\/#website","url":"https:\/\/wpengine.com\/case-studies\/","name":"WP Engine","description":"Managed Hosting for WordPress","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wpengine.com\/case-studies\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/wpengine.com\/case-studies\/#\/schema\/person\/2e7ae57f60120ddae3dc029b03cfa81a","name":"Alyssa Cuda","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpengine.com\/case-studies\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9031010d4260959c1fffb0b199ffa33db42a2b53baa3bf9927a289237e907252?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9031010d4260959c1fffb0b199ffa33db42a2b53baa3bf9927a289237e907252?s=96&d=mm&r=g","caption":"Alyssa Cuda"},"description":"Alyssa is a Content Specialist at WP Engine. If she\u2019s not searching for a swimming hole to escape the heat in, you can usually find her baking something caloric or reading.\u2002\u2002"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/posts\/91413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/users\/173"}],"replies":[{"embeddable":true,"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/comments?post=91413"}],"version-history":[{"count":0,"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/posts\/91413\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/media\/91428"}],"wp:attachment":[{"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/media?parent=91413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/categories?post=91413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpengine.com\/case-studies\/wp-json\/wp\/v2\/tags?post=91413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}