{"id":485,"date":"2023-12-01T10:00:00","date_gmt":"2023-12-01T10:00:00","guid":{"rendered":"https:\/\/jacar.es\/containerd-runtime-contenedores\/"},"modified":"2023-12-01T10:00:00","modified_gmt":"2023-12-01T10:00:00","slug":"containerd-runtime-contenedores","status":"publish","type":"post","link":"https:\/\/jacar.es\/en\/containerd-runtime-contenedores\/","title":{"rendered":"containerd: The Runtime Underpinning Kubernetes"},"content":{"rendered":"<p><a href=\"https:\/\/containerd.io\/\"><strong>containerd<\/strong><\/a> is probably the most-used container runtime on the planet and at the same time the least known. When Kubernetes 1.20 announced Docker shim deprecation, thousands of clusters silently migrated to containerd as runtime \u2014 and most operators didn\u2019t notice because, done well, it must be invisible. We cover what it is exactly, how it fits with Docker and Kubernetes, and basic commands to operate it directly.<\/p>\n<h2 id=\"what-containerd-is-and-what-it-isnt\">What containerd Is, and What It Isn\u2019t<\/h2>\n<p>containerd is a high-level <strong>container runtime<\/strong> \u2014 it manages the complete lifecycle of containers on a system:<\/p>\n<ul>\n<li>Pulling images from registries.<\/li>\n<li>Storing images on disk.<\/li>\n<li>Creating containers from images.<\/li>\n<li>Running, pausing, stopping containers.<\/li>\n<li>Managing network namespaces.<\/li>\n<li>Filesystem snapshots.<\/li>\n<\/ul>\n<p>What it <strong>doesn\u2019t do<\/strong>:<\/p>\n<ul>\n<li>Build images (it has no <code>Dockerfile<\/code>).<\/li>\n<li>Multi-container composition (no compose).<\/li>\n<li>UI or developer experience (it\u2019s a daemon, not an interactive tool).<\/li>\n<li>Orchestration (Kubernetes does that on top).<\/li>\n<\/ul>\n<p>Originally containerd was Docker\u2019s internal part. In 2017 it was donated to the CNCF and became an independent project. In 2019 it graduated as a CNCF project.<\/p>\n<h2 id=\"the-layered-architecture\">The Layered Architecture<\/h2>\n<p>To understand containerd it helps to see the full container stack on Linux:<\/p>\n<pre><code>Kubernetes (orchestration)\n   \u2502\n   \u25bc via CRI (Container Runtime Interface)\ncontainerd (high-level runtime)\n   \u2502\n   \u25bc via OCI runtime spec\nrunc (low-level runtime \u2014 or crun, gVisor, kata)\n   \u2502\n   \u25bc namespaces, cgroups, capabilities\nLinux kernel<\/code><\/pre>\n<ul>\n<li><strong>Kubernetes<\/strong> orchestrates \u2014 decides which pods go where.<\/li>\n<li><strong>containerd<\/strong> runs \u2014 speaks CRI with Kubernetes and OCI with runc.<\/li>\n<li><strong>runc<\/strong> is the reference implementation that creates the actual container using kernel primitives.<\/li>\n<\/ul>\n<p>This separation lets you swap pieces: you can change runc to gVisor for more isolation, or containerd to CRI-O without touching Kubernetes.<\/p>\n<h2 id=\"containerd-vs-docker-the-real-relationship\">containerd vs Docker: The Real Relationship<\/h2>\n<p>Lots of confusion exists about this. The simple truth:<\/p>\n<ul>\n<li><strong>Docker Engine<\/strong> internally uses containerd as runtime for years.<\/li>\n<li>When you run <code>docker run<\/code>, Docker calls containerd internally.<\/li>\n<li>In Kubernetes 1.24+, the \u201cDocker shim\u201d was removed \u2014 Kubernetes talks directly to containerd, no Docker Engine in between.<\/li>\n<li><strong>Kubernetes clusters<\/strong> said to \u201cuse Docker\u201d actually almost all used containerd underneath. Migration meant changing the adapter layer.<\/li>\n<\/ul>\n<p>For standalone servers, Docker Engine remains valid \u2014 it\u2019s Docker + containerd + additional tools. For Kubernetes, direct containerd removes an unnecessary layer.<\/p>\n<h2 id=\"containerd-vs-cri-o\">containerd vs CRI-O<\/h2>\n<p><a href=\"https:\/\/cri-o.io\/\">CRI-O<\/a> is the main alternative \u2014 a lightweight runtime designed specifically for Kubernetes. Practical differences:<\/p>\n<ul>\n<li><strong>containerd<\/strong> is more general purpose, used outside Kubernetes (Docker, dev environments).<\/li>\n<li><strong>CRI-O<\/strong> is exclusively for Kubernetes, with no extra features.<\/li>\n<li>Both implement CRI and OCI. Performance is comparable.<\/li>\n<li>containerd has wider global adoption; CRI-O is standard in Red Hat OpenShift-style distributions.<\/li>\n<\/ul>\n<p>Choosing between them is more about ecosystem and support than technical capability in 2023.<\/p>\n<h2 id=\"working-with-containerd-directly\">Working With containerd Directly<\/h2>\n<p>When something goes wrong on a Kubernetes node, knowing how to operate outside <code>kubectl<\/code> helps. Two tools to talk to containerd directly:<\/p>\n<h3 id=\"ctr-the-basic-cli\"><code>ctr<\/code> \u2014 The Basic CLI<\/h3>\n<p>Comes with containerd. Useful but not very friendly:<\/p>\n<div class=\"sourceCode\" id=\"cb2\">\n<pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><span id=\"cb2-1\"><a href=\"#cb2-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># List images<\/span><\/span>\n<span id=\"cb2-2\"><a href=\"#cb2-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> ctr <span class=\"at\">-n<\/span> k8s.io images list<\/span>\n<span id=\"cb2-3\"><a href=\"#cb2-3\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb2-4\"><a href=\"#cb2-4\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># List containers in Kubernetes namespace<\/span><\/span>\n<span id=\"cb2-5\"><a href=\"#cb2-5\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> ctr <span class=\"at\">-n<\/span> k8s.io containers list<\/span>\n<span id=\"cb2-6\"><a href=\"#cb2-6\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb2-7\"><a href=\"#cb2-7\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># View tasks (active container processes)<\/span><\/span>\n<span id=\"cb2-8\"><a href=\"#cb2-8\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> ctr <span class=\"at\">-n<\/span> k8s.io tasks list<\/span>\n<span id=\"cb2-9\"><a href=\"#cb2-9\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb2-10\"><a href=\"#cb2-10\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># Get container logs (use journalctl or crictl instead)<\/span><\/span><\/code><\/pre>\n<\/div>\n<p>The <code>-n k8s.io<\/code> is the namespace Kubernetes uses; without it you don\u2019t see the pods.<\/p>\n<h3 id=\"crictl-the-official-tool-for-kubernetes\"><code>crictl<\/code> \u2014 The Official Tool for Kubernetes<\/h3>\n<p>More useful in Kubernetes clusters:<\/p>\n<div class=\"sourceCode\" id=\"cb3\">\n<pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><span id=\"cb3-1\"><a href=\"#cb3-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># List pods<\/span><\/span>\n<span id=\"cb3-2\"><a href=\"#cb3-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> crictl pods<\/span>\n<span id=\"cb3-3\"><a href=\"#cb3-3\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-4\"><a href=\"#cb3-4\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># List containers<\/span><\/span>\n<span id=\"cb3-5\"><a href=\"#cb3-5\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> crictl ps<\/span>\n<span id=\"cb3-6\"><a href=\"#cb3-6\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-7\"><a href=\"#cb3-7\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># Container logs<\/span><\/span>\n<span id=\"cb3-8\"><a href=\"#cb3-8\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> crictl logs <span class=\"op\">&lt;<\/span>container-id<span class=\"op\">&gt;<\/span><\/span>\n<span id=\"cb3-9\"><a href=\"#cb3-9\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-10\"><a href=\"#cb3-10\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># Exec into one<\/span><\/span>\n<span id=\"cb3-11\"><a href=\"#cb3-11\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> crictl exec <span class=\"at\">-it<\/span> <span class=\"op\">&lt;<\/span>container-id<span class=\"op\">&gt;<\/span> sh<\/span>\n<span id=\"cb3-12\"><a href=\"#cb3-12\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-13\"><a href=\"#cb3-13\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># Inspect image<\/span><\/span>\n<span id=\"cb3-14\"><a href=\"#cb3-14\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> crictl inspecti <span class=\"op\">&lt;<\/span>image<span class=\"op\">&gt;<\/span><\/span><\/code><\/pre>\n<\/div>\n<p>Config at <code>\/etc\/crictl.yaml<\/code>:<\/p>\n<div class=\"sourceCode\" id=\"cb4\">\n<pre class=\"sourceCode yaml\"><code class=\"sourceCode yaml\"><span id=\"cb4-1\"><a href=\"#cb4-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">runtime-endpoint<\/span><span class=\"kw\">:<\/span><span class=\"at\"> unix:\/\/\/run\/containerd\/containerd.sock<\/span><\/span>\n<span id=\"cb4-2\"><a href=\"#cb4-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">image-endpoint<\/span><span class=\"kw\">:<\/span><span class=\"at\"> unix:\/\/\/run\/containerd\/containerd.sock<\/span><\/span><\/code><\/pre>\n<\/div>\n<h3 id=\"nerdctl-docker-syntax-for-containerd\"><code>nerdctl<\/code> \u2014 Docker Syntax for containerd<\/h3>\n<p>If you miss <code>docker run<\/code> and friends, <a href=\"https:\/\/github.com\/containerd\/nerdctl\">nerdctl<\/a> is API-compatible with Docker but talks to containerd directly:<\/p>\n<div class=\"sourceCode\" id=\"cb5\">\n<pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><span id=\"cb5-1\"><a href=\"#cb5-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> nerdctl run <span class=\"at\">-d<\/span> <span class=\"at\">-p<\/span> 80:80 nginx<\/span>\n<span id=\"cb5-2\"><a href=\"#cb5-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> nerdctl ps<\/span>\n<span id=\"cb5-3\"><a href=\"#cb5-3\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> nerdctl exec <span class=\"at\">-it<\/span> <span class=\"op\">&lt;<\/span>id<span class=\"op\">&gt;<\/span> sh<\/span><\/code><\/pre>\n<\/div>\n<p>For developers coming from Docker, it\u2019s the most comfortable transition.<\/p>\n<h2 id=\"cases-where-touching-containerd-directly-helps\">Cases Where Touching containerd Directly Helps<\/h2>\n<p>In day-to-day Kubernetes operations, you normally don\u2019t touch containerd. Where it does help:<\/p>\n<ul>\n<li><strong>Debug pods that won\u2019t start<\/strong>. containerd logs in <code>journalctl -u containerd<\/code> often have detail kubelet doesn\u2019t propagate.<\/li>\n<li><strong>Cleanup of orphan images<\/strong>. <code>crictl rmi --prune<\/code> frees space when Kubernetes GC is slow.<\/li>\n<li><strong>Image pull problems<\/strong>. <code>crictl pull<\/code> directly reveals credentials or network issues without going through the Kubernetes abstraction.<\/li>\n<li><strong>Verify active runtime<\/strong>. <code>kubectl get nodes -o wide<\/code> shows runtime; auditing it takes 30 seconds.<\/li>\n<\/ul>\n<h2 id=\"relevant-configuration\">Relevant Configuration<\/h2>\n<p>Main config lives at <code>\/etc\/containerd\/config.toml<\/code>. Typical changes:<\/p>\n<ul>\n<li><strong>Registry mirror<\/strong> (speeds up and reduces Docker Hub usage).<\/li>\n<li><strong>Configure different runtime<\/strong> (gVisor for more isolation in multi-tenancy).<\/li>\n<li><strong>Logging plugin<\/strong> and rotation.<\/li>\n<li><strong>systemd cgroup driver<\/strong> (must match kubelet \u2014 common installation error).<\/li>\n<\/ul>\n<p>Changes require <code>systemctl restart containerd<\/code> and, in production clusters, doing it node by node with cordon\/drain.<\/p>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>containerd is the foundational piece on which most modern Kubernetes runs. Knowing its architecture helps with debugging, alternative-runtime decisions, and understanding what your cluster does. For daily operations, it remains a layer you normally don\u2019t touch \u2014 but knowing how to move when needed turns an hours-long problem into minutes.<\/p>\n<p>Follow us on jacar.es for more on Kubernetes, container runtimes, and cluster operations.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>containerd is the runtime running containers in most modern Kubernetes clusters, but few know how it works. A practical technical look.<\/p>\n","protected":false},"author":1,"featured_media":486,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27,19],"tags":[122,273,275,4,58,274],"class_list":["post-485","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arquitectura","category-tecnologia","tag-containerd","tag-cri","tag-ctr","tag-docker","tag-kubernetes","tag-runc"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"en","enabled_languages":["es","en"],"languages":{"es":{"title":true,"content":true,"excerpt":true},"en":{"title":true,"content":true,"excerpt":true}}},"gutentor_comment":0,"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>containerd: The Runtime Underpinning Kubernetes - Jacar<\/title>\n<meta name=\"description\" content=\"containerd explained: architecture, relationship with Docker and Kubernetes, comparison with CRI-O, basic commands with ctr and nerdctl.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jacar.es\/containerd-runtime-contenedores\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"containerd: The Runtime Underpinning Kubernetes - Jacar\" \/>\n<meta property=\"og:description\" content=\"containerd explained: architecture, relationship with Docker and Kubernetes, comparison with CRI-O, basic commands with ctr and nerdctl.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jacar.es\/containerd-runtime-contenedores\/\" \/>\n<meta property=\"og:site_name\" content=\"Jacar\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-01T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2020\/09\/favicon.png\" \/>\n\t<meta property=\"og:image:width\" content=\"252\" \/>\n\t<meta property=\"og:image:height\" content=\"229\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"javi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"javi\" \/>\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:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/\"},\"author\":{\"name\":\"javi\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/person\\\/54a7f7b4224b38fafc9866eb3e614208\"},\"headline\":\"containerd: The Runtime Underpinning Kubernetes\",\"datePublished\":\"2023-12-01T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/\"},\"wordCount\":1461,\"publisher\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/19234452\\\/jwp-1294106-12229.jpg\",\"keywords\":[\"containerd\",\"cri\",\"ctr\",\"docker\",\"kubernetes\",\"runc\"],\"articleSection\":[\"Arquitectura\",\"Tecnolog\u00eda\"],\"inLanguage\":\"en-US\"},{\"@type\":[\"WebPage\",\"ItemPage\"],\"@id\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/\",\"url\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/\",\"name\":\"containerd: The Runtime Underpinning Kubernetes - Jacar\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/19234452\\\/jwp-1294106-12229.jpg\",\"datePublished\":\"2023-12-01T10:00:00+00:00\",\"description\":\"containerd explained: architecture, relationship with Docker and Kubernetes, comparison with CRI-O, basic commands with ctr and nerdctl.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/#primaryimage\",\"url\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/19234452\\\/jwp-1294106-12229.jpg\",\"contentUrl\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/19234452\\\/jwp-1294106-12229.jpg\",\"width\":1200,\"height\":800,\"caption\":\"Contenedores de transporte alineados representando contenedores software\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jacar.es\\\/containerd-runtime-contenedores\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/jacar.es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"containerd: el runtime que sustenta a Kubernetes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#website\",\"url\":\"https:\\\/\\\/jacar.es\\\/\",\"name\":\"Jacar\",\"description\":\"Passion for Technology\",\"publisher\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jacar.es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#organization\",\"name\":\"Jacar\",\"url\":\"https:\\\/\\\/jacar.es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/jacar.es\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/favicon.png\",\"contentUrl\":\"https:\\\/\\\/jacar.es\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/favicon.png\",\"width\":252,\"height\":229,\"caption\":\"Jacar\"},\"image\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/javiercanetearroyo\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/person\\\/54a7f7b4224b38fafc9866eb3e614208\",\"name\":\"javi\",\"sameAs\":[\"https:\\\/\\\/jacar.es\"],\"url\":\"https:\\\/\\\/jacar.es\\\/en\\\/author\\\/javi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"containerd: The Runtime Underpinning Kubernetes - Jacar","description":"containerd explained: architecture, relationship with Docker and Kubernetes, comparison with CRI-O, basic commands with ctr and nerdctl.","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:\/\/jacar.es\/containerd-runtime-contenedores\/","og_locale":"en_US","og_type":"article","og_title":"containerd: The Runtime Underpinning Kubernetes - Jacar","og_description":"containerd explained: architecture, relationship with Docker and Kubernetes, comparison with CRI-O, basic commands with ctr and nerdctl.","og_url":"https:\/\/jacar.es\/containerd-runtime-contenedores\/","og_site_name":"Jacar","article_published_time":"2023-12-01T10:00:00+00:00","og_image":[{"width":252,"height":229,"url":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2020\/09\/favicon.png","type":"image\/png"}],"author":"javi","twitter_card":"summary_large_image","twitter_misc":{"Written by":"javi","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/#article","isPartOf":{"@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/"},"author":{"name":"javi","@id":"https:\/\/jacar.es\/#\/schema\/person\/54a7f7b4224b38fafc9866eb3e614208"},"headline":"containerd: The Runtime Underpinning Kubernetes","datePublished":"2023-12-01T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/"},"wordCount":1461,"publisher":{"@id":"https:\/\/jacar.es\/#organization"},"image":{"@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/#primaryimage"},"thumbnailUrl":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2023\/12\/19234452\/jwp-1294106-12229.jpg","keywords":["containerd","cri","ctr","docker","kubernetes","runc"],"articleSection":["Arquitectura","Tecnolog\u00eda"],"inLanguage":"en-US"},{"@type":["WebPage","ItemPage"],"@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/","url":"https:\/\/jacar.es\/containerd-runtime-contenedores\/","name":"containerd: The Runtime Underpinning Kubernetes - Jacar","isPartOf":{"@id":"https:\/\/jacar.es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/#primaryimage"},"image":{"@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/#primaryimage"},"thumbnailUrl":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2023\/12\/19234452\/jwp-1294106-12229.jpg","datePublished":"2023-12-01T10:00:00+00:00","description":"containerd explained: architecture, relationship with Docker and Kubernetes, comparison with CRI-O, basic commands with ctr and nerdctl.","breadcrumb":{"@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jacar.es\/containerd-runtime-contenedores\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/#primaryimage","url":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2023\/12\/19234452\/jwp-1294106-12229.jpg","contentUrl":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2023\/12\/19234452\/jwp-1294106-12229.jpg","width":1200,"height":800,"caption":"Contenedores de transporte alineados representando contenedores software"},{"@type":"BreadcrumbList","@id":"https:\/\/jacar.es\/containerd-runtime-contenedores\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/jacar.es\/"},{"@type":"ListItem","position":2,"name":"containerd: el runtime que sustenta a Kubernetes"}]},{"@type":"WebSite","@id":"https:\/\/jacar.es\/#website","url":"https:\/\/jacar.es\/","name":"Jacar","description":"Passion for Technology","publisher":{"@id":"https:\/\/jacar.es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jacar.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jacar.es\/#organization","name":"Jacar","url":"https:\/\/jacar.es\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jacar.es\/#\/schema\/logo\/image\/","url":"https:\/\/jacar.es\/wp-content\/uploads\/2020\/09\/favicon.png","contentUrl":"https:\/\/jacar.es\/wp-content\/uploads\/2020\/09\/favicon.png","width":252,"height":229,"caption":"Jacar"},"image":{"@id":"https:\/\/jacar.es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/javiercanetearroyo\/"]},{"@type":"Person","@id":"https:\/\/jacar.es\/#\/schema\/person\/54a7f7b4224b38fafc9866eb3e614208","name":"javi","sameAs":["https:\/\/jacar.es"],"url":"https:\/\/jacar.es\/en\/author\/javi\/"}]}},"_links":{"self":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/posts\/485","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/comments?post=485"}],"version-history":[{"count":0,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/posts\/485\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/media\/486"}],"wp:attachment":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/media?parent=485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/categories?post=485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/tags?post=485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}