{"id":15284,"date":"2016-11-21T12:15:04","date_gmt":"2016-11-21T10:15:04","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=15284"},"modified":"2016-11-18T17:20:31","modified_gmt":"2016-11-18T15:20:31","slug":"container-image-immutability-power-metadata","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/","title":{"rendered":"Container Image Immutability and the Power of Metadata"},"content":{"rendered":"<p>One of the principles of Docker containers is that an image is immutable \u2014 once built, it\u2019s unchangeable, and if you want to make changes, you\u2019ll get a new image as a result. In this post, we\u2019ll take a deep dive into the immutability of containers, and then we\u2019ll look at some of the consequences and potential problems, as well as see how applying some metadata to your container images can really help.<\/p>\n<blockquote><p>Not got time for the details? TL;DR: use <code>LABEL<\/code> to add meaningful metadata to your container images, and you\u2019ll thank yourself in months to come!<\/p><\/blockquote>\n<h2>Container Images and Immutability<\/h2>\n<p>You can modify a container, and you can create a new container image by \u201ccommitting\u201d the state of that container. But when you do that, you create a new image. The previous image is untouched. Let\u2019s see how we do that with Docker.<\/p>\n<p>I\u2019m going to use an image called <code>lizrice\/imagetest<\/code>, which is a very simple image based on Alpine that I\u2019ve been using for metadata experiments. Feel free to use your own image if you prefer. For this example, I inspect my image as follows:<\/p>\n<pre class=\"brush:java\">$ docker inspect lizrice\/imagetest<\/pre>\n<p>The first line in the output is the identifier: a unique hash for this particular image that looks something like this:<\/p>\n<pre class=\"brush:java\">\"Id\": \"sha256:e9ea81af1e8d197fb083cc05e8d722233c0c4aab83deabc54adccd8a225a8b29\"<\/pre>\n<p>This is the full-length hash. You\u2019ll see that it matches the prefix that\u2019s displayed if you run Docker images to list the images you have locally.<\/p>\n<p>Now let\u2019s create a container based on that image. In my example, I happen to not have a CMD directive in the Dockerfile. So I need to specify a command to run (even though it won\u2019t get run at this point).<\/p>\n<pre class=\"brush:java\">$ docker create lizrice\/imagetest touch \/nothing_to_see_here<\/pre>\n<p>The <code>docker create<\/code> command makes the container but doesn\u2019t start it yet, so it won\u2019t actually run the <code>touch<\/code> command yet. Eventually when we do run the container, the <code>touch<\/code> command will make a change to the file system of the container by creating a file called <code>nothing_to_see_here<\/code>. We\u2019ll come to that very soon, but first let\u2019s take a look at the container and its status.<\/p>\n<p>Because the container isn\u2019t running yet, we\u2019ll need the <code>-a<\/code> flag to see it included in <code>docker ps<\/code>:<\/p>\n<pre class=\"brush:php\">$ docker ps -a\r\n    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES\r\n    306f4ba7c68a        lizrice\/imagetest   \"touch \/nothing_to_se\"   5 minutes ago       Exited (0) 3 minutes ago                       grave_almeida<\/pre>\n<p>As you can see, the container is in Created status; it\u2019s ready to run, but it\u2019s not actually running yet. We can inspect it at this stage.<\/p>\n<pre class=\"brush:php\">$ docker inspect 306f4ba7c68a<\/pre>\n<p>This generates quite a bit of output, including the image that this container is based on. As expected, you should see this is exactly the same identifier SHA that we saw as the ID of the container image:<\/p>\n<pre class=\"brush:php\">\"Image\": \"sha256:e9ea81af1e8d197fb083cc05e8d722233c0c4aab83deabc54adccd8a225a8b29\"<\/pre>\n<p>Now let\u2019s start the container. This is the point at which that <code>touch<\/code> command will get run.<\/p>\n<pre class=\"brush:php\">$ docker start grave_almeida<\/pre>\n<p>The container starts up, runs the <code>touch<\/code> command, and then exits. We can see the change that this made on the file system by running <code>docker diff<\/code>.<\/p>\n<pre class=\"brush:php\">$ docker diff grave_almeida\r\nA \/nothing_to_see_here<\/pre>\n<p>If we inspect the container, we can see that it\u2019s still based on the same image ID (the one beginning with <em>e9ea81<\/em>). If we want to save this as a container image, we can do this with <code>docker commit<\/code>.<\/p>\n<pre class=\"brush:php\">$ docker commit grave_almeida\r\nsha256:8b76eee48c6c1e9373d321c99c8bbd80bb3f606c848d639280cce3395073807f<\/pre>\n<p>The SHA that has been output is the identifier for a new container image, which we can see included in the list of container images. We haven\u2019t modified our original image in any way.<\/p>\n<pre class=\"brush:php\">$ docker images\r\n    REPOSITORY                             TAG                    IMAGE ID            CREATED             SIZE\r\n    &lt;none&gt;                                 &lt;none&gt;                 8b76eee48c6c        7 seconds ago       4.805 MB\r\n    lizrice\/imagetest                      latest                 e9ea81af1e8d        About an hour ago   4.805 MB<\/pre>\n<p>The new image doesn\u2019t have any repository or tag information associated with it. We can use the <code>docker tag<\/code> command to add this, but let\u2019s say, for the sake of argument, that we got distracted and forgot to do that.<\/p>\n<h2>Working Out What the Image Is<\/h2>\n<p>If you\u2019ve been working with Docker for more than about ten minutes, you\u2019ll know how quickly you can build up containers and container images. You might even be surprised by how many you have sitting on your machine if you run <code>docker ps -a<\/code> (to list all the containers) and <code>docker images<\/code>. And you might well find a fair few with those rather stark <code>&lt;none&gt;<\/code> entries for repo and tag.<\/p>\n<p>If you haven\u2019t tagged those images with a repo name, how on earth can you find out what code is inside them? As we\u2019ve seen, you can inspect an image to get its ID, but unless you have a list of what the image IDs are, how useful is that?<\/p>\n<h3>Labels to the rescue<\/h3>\n<p>One solution, and a good practice in general, is to use <a href=\"https:\/\/docs.docker.com\/engine\/userguide\/labels-custom-metadata\/\">Labels<\/a>. Labels are simply key-value pairs that can be applied to images at build time or added when you start a container. You can use them to add meaningful metadata that can be invaluable in managing your containers and metadata.<\/p>\n<p>I\u2019m one of the authors of a community initiative called <a href=\"http:\/\/label-schema.org\">Label Schema<\/a>, which offers some conventions for the keys to use in your labels. As I write, there are <a href=\"https:\/\/microbadger.com\/labelschema\">over 500 public images whose maintainers have already adopted these conventions<\/a>.<\/p>\n<p>The most basic of labels that can help us with our image identification problem is to give the image a name with the following line in the Dockerfile:<\/p>\n<pre class=\"brush:php\">LABEL org.label-schema.name=\u2019imagetest\u2019<\/pre>\n<p>This means that my image will be built including this key-value pair, which I can see as part of the inspection process.<\/p>\n<pre class=\"brush:php\">$ docker inspect lizrice\/imagetest \r\n               \"Labels\": {\r\n                    \"org.label-schema.name\": \"imagetest\"\r\n                }<\/pre>\n<h3>How does this help?<\/h3>\n<p>Labels are inherited from ancestor images. So when you do a Docker commit as we did earlier, any labels from the original image will also exist in the new one. Inspect that new image, or a container based on that image, you\u2019ll see the same labels have been inherited.<\/p>\n<p>Labels are also inherited from the base image specified in the FROM directive in a Dockerfile. You can see this in action by using <a href=\"http:\/\/microbadger.com\">MicroBadger<\/a> to look at the metadata from my example image <code>lizrice\/childimage<\/code>.<\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/11\/Screen-Shot-2016-11-11-at-15.45.17.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-15286\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/11\/Screen-Shot-2016-11-11-at-15.45.17.png\" alt=\"screen-shot-2016-11-11-at-15-45-17\" width=\"788\" height=\"806\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/11\/Screen-Shot-2016-11-11-at-15.45.17.png 788w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/11\/Screen-Shot-2016-11-11-at-15.45.17-293x300.png 293w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/11\/Screen-Shot-2016-11-11-at-15.45.17-768x786.png 768w\" sizes=\"(max-width: 788px) 100vw, 788px\" \/><\/a><\/p>\n<p>You can see this (experimental!) image has three labels:<\/p>\n<ul>\n<li>org.label-schema.description<\/li>\n<li>org.label-schema.license<\/li>\n<li>org.label-schema.name<\/li>\n<\/ul>\n<p>But the \u201clayer inspection\u201d part shows us that <code>lizrice\/childimage<\/code> is based on <code>lizrice\/imagetest<\/code>, which contains three layers, including one with a LABEL directive. If we look carefully, we\u2019ll see that the description was inherited from the parent image. The other two labels were added in the build of <code>lizrice\/childimage<\/code>. In fact, the name label overwrites the name from the base image.<\/p>\n<h3>What metadata should I apply?<\/h3>\n<p>The Label Schema project offers some suggestions for useful labels. A few highlights that you might like to consider include:<\/p>\n<ul>\n<li>The git repository and commit reference, so you can see exactly what code was built into an image<\/li>\n<li>A URL for getting more information about this image<\/li>\n<li>A vendor field, helpful if you\u2019re supplying your code to users as a container image<\/li>\n<\/ul>\n<h2>The Future of Metadata<\/h2>\n<p>So far, we\u2019ve simply considered what\u2019s happening when you build and run containers on your local machine. Now let\u2019s think about the potential scale of an image management problem in the context of a continuous build environment like Codeship.<\/p>\n<p>Let\u2019s suppose you work for a company with a hundred engineers. Even if they only each push a commit a couple of times per day, that\u2019s 1,000 new image builds every week. You\u2019ll have hundreds of thousands of images to deal with in just a couple of years!<\/p>\n<p>How do you keep track of which of those images are useful? Can you easily tell from your logging or monitoring solutions exactly which container images are deployed? Which ones are in test? How do you get in touch with the support contact for a container that\u2019s generating a ton of logs in the live production system? All these questions and many more become significantly more difficult to cope with when you\u2019re dealing with a large number of images.<\/p>\n<p>These are all problems that container metadata can help with, especially with the benefit of conventions on how we all label our images.<\/p>\n<p>For example, logging and visualization tools can use common Label Schema conventions to make it easier to identify the code that a container is running. We\u2019re expecting to see an explosion in the use of metadata, and some real improvements in usability as tools evolve to help manage our containers.<\/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\/container-image-immutability-power-metadata\/\">Container Image Immutability and the Power of Metadata<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a> Liz Rice 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>One of the principles of Docker containers is that an image is immutable \u2014 once built, it\u2019s unchangeable, and if you want to make changes, you\u2019ll get a new image as a result. In this post, we\u2019ll take a deep dive into the immutability of containers, and then we\u2019ll look at some of the consequences &hellip;<\/p>\n","protected":false},"author":203,"featured_media":10356,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[217],"class_list":["post-15284","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>Container Image Immutability and the Power of Metadata - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"One of the principles of Docker containers is that an image is immutable \u2014 once built, it\u2019s unchangeable, and if you want to make changes, you\u2019ll get a\" \/>\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\/container-image-immutability-power-metadata\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Container Image Immutability and the Power of Metadata - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"One of the principles of Docker containers is that an image is immutable \u2014 once built, it\u2019s unchangeable, and if you want to make changes, you\u2019ll get a\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/\" \/>\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-11-21T10:15:04+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=\"Liz Rice\" \/>\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=\"Liz Rice\" \/>\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\/container-image-immutability-power-metadata\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/\"},\"author\":{\"name\":\"Liz Rice\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/90dfbfa65ff964028dbc252f546bc299\"},\"headline\":\"Container Image Immutability and the Power of Metadata\",\"datePublished\":\"2016-11-21T10:15:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/\"},\"wordCount\":1371,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#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\/container-image-immutability-power-metadata\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/\",\"name\":\"Container Image Immutability and the Power of Metadata - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"datePublished\":\"2016-11-21T10:15:04+00:00\",\"description\":\"One of the principles of Docker containers is that an image is immutable \u2014 once built, it\u2019s unchangeable, and if you want to make changes, you\u2019ll get a\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#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\/container-image-immutability-power-metadata\/#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\":\"Container Image Immutability and the Power of Metadata\"}]},{\"@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\/90dfbfa65ff964028dbc252f546bc299\",\"name\":\"Liz Rice\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/55cddbd2783c322887c3524a9657d380640dd02daee6a582608973fc3721ae2c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/55cddbd2783c322887c3524a9657d380640dd02daee6a582608973fc3721ae2c?s=96&d=mm&r=g\",\"caption\":\"Liz Rice\"},\"description\":\"Liz is a software engineering, product, and innovation strategy expert with experience working with some of the best companies in London and Silicon Valley. She is a co-founder of Microscaling Systems\",\"url\":\"https:\/\/www.webcodegeeks.com\/author\/liz-rice\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Container Image Immutability and the Power of Metadata - Web Code Geeks - 2026","description":"One of the principles of Docker containers is that an image is immutable \u2014 once built, it\u2019s unchangeable, and if you want to make changes, you\u2019ll get a","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\/container-image-immutability-power-metadata\/","og_locale":"en_US","og_type":"article","og_title":"Container Image Immutability and the Power of Metadata - Web Code Geeks - 2026","og_description":"One of the principles of Docker containers is that an image is immutable \u2014 once built, it\u2019s unchangeable, and if you want to make changes, you\u2019ll get a","og_url":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2016-11-21T10:15:04+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":"Liz Rice","twitter_card":"summary_large_image","twitter_creator":"@webcodegeeks","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Liz Rice","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/"},"author":{"name":"Liz Rice","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/90dfbfa65ff964028dbc252f546bc299"},"headline":"Container Image Immutability and the Power of Metadata","datePublished":"2016-11-21T10:15:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/"},"wordCount":1371,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#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\/container-image-immutability-power-metadata\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/","url":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/","name":"Container Image Immutability and the Power of Metadata - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","datePublished":"2016-11-21T10:15:04+00:00","description":"One of the principles of Docker containers is that an image is immutable \u2014 once built, it\u2019s unchangeable, and if you want to make changes, you\u2019ll get a","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/devops\/container-image-immutability-power-metadata\/#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\/container-image-immutability-power-metadata\/#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":"Container Image Immutability and the Power of Metadata"}]},{"@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\/90dfbfa65ff964028dbc252f546bc299","name":"Liz Rice","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/55cddbd2783c322887c3524a9657d380640dd02daee6a582608973fc3721ae2c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/55cddbd2783c322887c3524a9657d380640dd02daee6a582608973fc3721ae2c?s=96&d=mm&r=g","caption":"Liz Rice"},"description":"Liz is a software engineering, product, and innovation strategy expert with experience working with some of the best companies in London and Silicon Valley. She is a co-founder of Microscaling Systems","url":"https:\/\/www.webcodegeeks.com\/author\/liz-rice\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/15284","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\/203"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=15284"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/15284\/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=15284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=15284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=15284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}