{"id":33856,"date":"2022-01-04T17:12:26","date_gmt":"2022-01-04T16:12:26","guid":{"rendered":"https:\/\/www.inovex.de\/?p=33856"},"modified":"2022-11-21T15:49:56","modified_gmt":"2022-11-21T14:49:56","slug":"multi-architecture-docker-images","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/","title":{"rendered":"Multi-Architecture Docker Images erstellen [Anleitung]"},"content":{"rendered":"<p><strong>Wie k\u00f6nnen wir m\u00f6glichst viele Architekturen f\u00fcr unser aktuelles Projekt unterst\u00fctzen?<\/strong> \u2013 Sowohl auf Entwicklungs- als auch der Deployment-Seite wird diese Frage zunehmend wichtiger, nicht zuletzt durch die steigende Adaption von Apple Silicon in Dev-Maschinen und AWS-Instanzen, denen nicht die herk\u00f6mmliche amd64, sondern die arm64-Architektur zugrunde liegt. Lass uns heute gemeinsam schauen, wie Docker eingesetzt werden kann, um Container Images plattform\u00fcbergreifend zu erstellen und diese in einer Container Registry anzubieten.<!--more--><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#Motivation\" >Motivation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#Multi-Architecture-Docker-Manifests\" >Multi-Architecture Docker Manifests<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#Zwei-Wege-fuehren-nach-Rom\" >Zwei Wege f\u00fchren nach Rom<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#Image-erstellen-mit-buildx\" >Image erstellen mit buildx<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#Moegliche-Herausforderungen-und-Grenzen\" >M\u00f6gliche Herausforderungen und Grenzen<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Motivation\"><\/span>Motivation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Bevor wir durchstarten werfen wir einen kurzen Blick auf die Voraussetzungen und Motivation, sich mit diesem Thema auseinander zu setzen.<\/p>\n<p>Auf Entwicklerseite bedeutet die Unterst\u00fctzung mehrerer Architekturen Hardware-Unabh\u00e4ngigkeit. So kann ein MacBook-User ohne Probleme auch an Projekten mitarbeiten, die urspr\u00fcnglich nur f\u00fcr Windows vorgesehen waren. Das sorgt nicht zuletzt auch f\u00fcr eine vielf\u00e4ltigere Developer-Community, die Projekte gemeinsam gestalten kann.<\/p>\n<p>Die Vorteile h\u00f6ren aber nicht auf der Coding-Seite auf. Auch im Betrieb von Cloud-Umgebungen bringt es deutliche Kostenersparnisse mit sich. Ein Beispiel hierf\u00fcr sind die Amazon EC2 A1 Instanzen, die auf dem eigens entwickelten Graviton-Chip der 2. Generation laufen und auf der arm64-Architektur basieren. Diese bringen laut Amazon eine Kostenersparnis von bis zu 40 % im direkten Vergleich zu amd64 Instanzen.<\/p>\n<p>Um diese Thesen endlich testen zu k\u00f6nnen, schauen wir nun unter die Docker-Haube, um zu verstehen, wie Images f\u00fcr die jeweilige Plattform erstellt und in Docker-Hub geb\u00fcndelt werden.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Multi-Architecture-Docker-Manifests\"><\/span>Multi-Architecture Docker Manifests<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Aber halt! Wie ein generelles Image gebaut und in eine Registry gepusht wird, sollte dir bereits bekannt sein. Falls nicht, schaue dir <a href=\"https:\/\/docs.docker.com\/docker-hub\/\" target=\"_blank\" rel=\"noopener\">HIER<\/a> die Grundlagen in Ruhe an.<\/p>\n<p>Da du jetzt wei\u00dft, wie man ein einzelnes Image pusht, stellst du dir eventuell bereits die Frage, wie man mehrere Images f\u00fcr verschiedene Plattformen hochl\u00e4dt und diese im Anschluss b\u00fcndelt, damit der oder die sp\u00e4tere Verwender:in immer genau das richtige Image \u00fcber einen zentralen pull Command bezieht.<\/p>\n<p>Die L\u00f6sung ist hierbei das Manifest, das f\u00fcr jedes Container Repo existiert. Schauen wir uns im Folgenden an, wie ein solches Manifest zum Beispiel f\u00fcr das beliebte <a href=\"https:\/\/hub.docker.com\/_\/golang\" target=\"_blank\" rel=\"noopener\">golang-Image<\/a> aussieht:<\/p>\n<pre class=\"lang:default decode:true\">docker manifest inspect golang:latest<\/pre>\n<figure id=\"attachment_33866\" aria-describedby=\"caption-attachment-33866\" style=\"width: 864px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-33866 size-full\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/docker_manifest_inspect_blog.png\" alt=\"Docker manifest inspect golang-image\" width=\"864\" height=\"784\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/docker_manifest_inspect_blog.png 864w, https:\/\/www.inovex.de\/wp-content\/uploads\/docker_manifest_inspect_blog-300x272.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/docker_manifest_inspect_blog-768x697.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/docker_manifest_inspect_blog-400x363.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/docker_manifest_inspect_blog-360x327.png 360w\" sizes=\"auto, (max-width: 864px) 100vw, 864px\" \/><figcaption id=\"caption-attachment-33866\" class=\"wp-caption-text\">\u00dcberblick der unterst\u00fctzten Plattformen des golang-Image<\/figcaption><\/figure>\n<p>In den blauen K\u00e4sten ist zu erkennen, welche Architekturen das golang Image unterst\u00fctzt. Wenn du nun <span class=\"lang:default highlight:0 decode:true crayon-inline\">docker pull golang:latest<\/span>\u00a0 in deiner Konsole ausf\u00fchrst, sucht Docker automatisch das passende Image f\u00fcr deine Plattform heraus.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Zwei-Wege-fuehren-nach-Rom\"><\/span>Zwei Wege f\u00fchren nach Rom<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Damit unser Projekt auf den f\u00fcr uns wichtigen Plattformen l\u00e4uft, gibt es zwei M\u00f6glichkeiten:<\/p>\n<p>Der manuelle Weg bringt etwas Arbeit mit sich und setzt voraus, dass man f\u00fcr jede Plattform, die unterst\u00fctzt werden soll, ein Ger\u00e4t f\u00fcr das Bauen des Images zur Verf\u00fcgung hat.<\/p>\n<p>Der zweite Weg l\u00e4uft \u00fcber ein Docker Feature namens <a href=\"https:\/\/docs.docker.com\/buildx\/working-with-buildx\/\" target=\"_blank\" rel=\"noopener\">buildx<\/a>, das mit einem Konsolen Command ausgef\u00fchrt werden kann und sogar nur deinen Computer ben\u00f6tigt, um f\u00fcr die verschiedenen Plattformen zu kompilieren.<\/p>\n<p>Durchlaufen wir vorerst den manuellen Weg, um ein besseres Verst\u00e4ndnis daf\u00fcr zu entwickeln, welche Schritte genau im Hintergrund ausgef\u00fchrt werden.<\/p>\n<p>An erster Stelle steht der Bau des Images \u2013 mit passendem Architektur-Tag \u2013 auf jedem Ger\u00e4t, das unterst\u00fctzt werden soll. Ist dieser Prozess abgeschlossen, erstellen wir im Anschluss ein eigenes Manifest f\u00fcr unser Repo mit folgendem Muster:<\/p>\n<pre class=\"lang:default decode:true\">docker manifest create my-image:latest \\\r\n                       my-image:amd64 \\\r\n                       my-image:arm64<\/pre>\n<p>Um dieses Manifest zu ver\u00f6ffentlichen, gilt es dieses zuletzt in eure Registry zu pushen:<\/p>\n<pre class=\"lang:default decode:true\">docker manifest push my-image:latest<\/pre>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-33868 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/post-docker-buildx-1024x481.png\" alt=\"Overview multi-arch docker images\" width=\"640\" height=\"301\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/post-docker-buildx-1024x481.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/post-docker-buildx-300x141.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/post-docker-buildx-768x361.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/post-docker-buildx-400x188.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/post-docker-buildx-360x169.png 360w, https:\/\/www.inovex.de\/wp-content\/uploads\/post-docker-buildx.png 1064w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Nachdem wir nun den manuellen Weg kennen, schlie\u00dft sich die Frage an: \u201eGeht das nicht auch einfacher?\u201c<\/p>\n<p>Die Antwort darauf ist: \u201eJa! Und zwar deutlich!\u201c<\/p>\n<p>Der zweite Weg, Images f\u00fcr verschiedene Plattformen bereit zu stellen \u2013 diesmal nur anhand von einem Dockerfile \u2013, l\u00e4uft \u00fcber buildx. Falls du noch eine \u00e4ltere Version von Docker installiert hast, k\u00f6nnte dieses Feature noch gar nicht bei dir vorhanden sein oder als experimentelles Feature gef\u00fchrt werden.<\/p>\n<p>Grunds\u00e4tzlich ist es zwar auch hier m\u00f6glich, eine Buildfarm mit verschiedenen Architekturen zu erstellen, die in diesem Zusammenhang \u201eNodes\u201c genannt werden. Ich m\u00f6chte den Fokus an dieser Stelle aber auf die einfachste Art legen, buildx zu benutzen. Sie ben\u00f6tigt n\u00e4mlich nur einen Computer.<\/p>\n<p>Wie das funktionieren soll? Mit QEMU! QEMU ist eine in buildx integrierte Open-Source Software, die es erm\u00f6glicht, auf einem System andere Architekturen zu emulieren. Somit k\u00f6nnen Images gebaut werden, die nicht der nativen Architektur entsprechen.<\/p>\n<p>Schauen wir uns auch diesen Prozess einmal an!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Image-erstellen-mit-buildx\"><\/span>Image erstellen mit buildx<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Am Anfang wird standardm\u00e4\u00dfig der Default-Builder f\u00fcr buildx verwendet.<\/p>\n<pre class=\"lang:default decode:true\">docker buildx ls\r\n\r\nNAME\/NODE    DRIVER\/ENDPOINT    STATUS     PLATFORMS\r\ndefault *    docker\r\ndefault      docker             running    linux\/arm64, linux\/amd64, \u2026<\/pre>\n<p>Es ist allerdings gute Praxis, sich einen neuen Builder anzulegen. Sollte einmal etwas schief gehen, kann der eigene Builder einfach gel\u00f6scht und wieder neu konfiguriert werden.<\/p>\n<pre class=\"lang:default decode:true\">docker buildx create --name mybuilder\r\n\r\ndocker buildx use mybuilder<\/pre>\n<p>Lass uns den gerade erstellten und im Anschluss den ausgew\u00e4hlten Builder einmal genauer anschauen.<\/p>\n<pre class=\"lang:default decode:true\">docker buildx inspect mybuilder --bootstrap\r\n\r\nName:      mybuilder\r\nDriver:    docker-container\r\nNodes:\r\nName:      mybuilder0\r\nEndpoint:  unix:\/\/\/var\/run\/docker.sock\r\nStatus:    running\r\nPlatforms: linux\/arm64, linux\/amd64, ...<\/pre>\n<p><span class=\"lang:default highlight:0 decode:true crayon-inline \">&#8211;bootstrap<\/span> sorgt in dem Fall daf\u00fcr, dass der Builder l\u00e4uft, bevor wir den <span class=\"lang:default highlight:0 decode:true crayon-inline \">inspect<\/span>\u00a0 Command ausf\u00fchren.<\/p>\n<p>Wir erkennen an dieser Stelle unter \u201ePlatforms\u201c, dass der aktuelle Builder sowohl amd64 als auch arm64 und sogar noch einige weitere Plattformen unterst\u00fctzt.<\/p>\n<p>Da jetzt alles vorbereitet ist, um buildx zu benutzen, lass uns die Magie ausprobieren:<\/p>\n<pre class=\"lang:default decode:true \">docker buildx build \\\r\n       --platform linux\/arm64,linux\/amd64 \\\r\n       -t repo\/my-image:latest \\\r\n       . \\\r\n       --push<\/pre>\n<p>Mit <span class=\"lang:default highlight:0 decode:true crayon-inline \">&#8211;platform<\/span>\u00a0 geben wir an, dass nur f\u00fcr die zwei Plattformen amd64 und arm64 Images gebaut werden sollen.<\/p>\n<p><span class=\"lang:default highlight:0 decode:true crayon-inline \">&#8211;push<\/span>\u00a0 schiebt, sobald die Images fertig sind, in eure Registry und erstellt im gleichen Zug das Manifest. Somit m\u00fcssen wir nichts weiter tun, als abzuwarten bis alles erledigt und hochgeladen ist.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Moegliche-Herausforderungen-und-Grenzen\"><\/span>M\u00f6gliche Herausforderungen und Grenzen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Nicht jedes Baseimage unterst\u00fctzt mehrere Plattformen. Angesichts der stetig wachsenden Nachfrage wird diese Problematik mit der Zeit abnehmen.<\/li>\n<li>Eventuell sind nicht alle Dependencies eurer Codebase auf allen Plattformen unterst\u00fctzt. Sollte es bei eurem Projekt der Fall sein, baut diese selber.<\/li>\n<li>Es gibt Projekte, in denen Software je nach Architektur anders gehandhabt werden muss und somit jeweils eigene Dockerfiles ben\u00f6tigt. Hier benutzt ihr den manuellen Weg, da buildx f\u00fcr diesen Fall nicht vorgesehen ist.<\/li>\n<\/ul>\n<p>And that\u2019s it! Du kannst nun Docker Images bauen, welche es Dir und Deinen Kolleg:innen erm\u00f6glichen, eine bunte Auswahl an Ger\u00e4ten bei der Entwicklung zu unterst\u00fctzen und m\u00f6glicherweise sogar das Sparpotenzial des Gravition-Chips im laufendem Betrieb zu Deinem Vorteil zu nutzen!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wie k\u00f6nnen wir m\u00f6glichst viele Architekturen f\u00fcr unser aktuelles Projekt unterst\u00fctzen? \u2013 Sowohl auf Entwicklungs- als auch der Deployment-Seite wird diese Frage zunehmend wichtiger, nicht zuletzt durch die steigende Adaption von Apple Silicon in Dev-Maschinen und AWS-Instanzen, denen nicht die herk\u00f6mmliche amd64, sondern die arm64-Architektur zugrunde liegt. Lass uns heute gemeinsam schauen, wie Docker eingesetzt [&hellip;]<\/p>\n","protected":false},"author":271,"featured_media":33878,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[823],"service":[414,432],"coauthors":[{"id":271,"display_name":"Benedict Homuth","user_nicename":"bhomuth"}],"class_list":["post-33856","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-docker","service-cloud","service-devops"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Multi-Architecture Docker Images erstellen [Anleitung] - inovex GmbH<\/title>\n<meta name=\"description\" content=\"Am Beispiel von amd64 und arm64 erstellen wir in diesem Tutorial Multi-Architecture Docker Images und bieten diese in einer Container Registry an.\" \/>\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.inovex.de\/de\/blog\/multi-architecture-docker-images\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Multi-Architecture Docker Images erstellen [Anleitung] - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"Am Beispiel von amd64 und arm64 erstellen wir in diesem Tutorial Multi-Architecture Docker Images und bieten diese in einer Container Registry an.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-04T16:12:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-21T14:49:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"576\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Benedict Homuth\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Benedict Homuth\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"7\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Benedict Homuth\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/\"},\"author\":{\"name\":\"Benedict Homuth\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/b80c15e67443e22d6d9dc32173d8880e\"},\"headline\":\"Multi-Architecture Docker Images erstellen [Anleitung]\",\"datePublished\":\"2022-01-04T16:12:26+00:00\",\"dateModified\":\"2022-11-21T14:49:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/\"},\"wordCount\":1039,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png\",\"keywords\":[\"Docker\"],\"articleSection\":[\"General\",\"Infrastructure\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/\",\"url\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/\",\"name\":\"Multi-Architecture Docker Images erstellen [Anleitung] - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png\",\"datePublished\":\"2022-01-04T16:12:26+00:00\",\"dateModified\":\"2022-11-21T14:49:56+00:00\",\"description\":\"Am Beispiel von amd64 und arm64 erstellen wir in diesem Tutorial Multi-Architecture Docker Images und bieten diese in einer Container Registry an.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#primaryimage\",\"url\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png\",\"contentUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png\",\"width\":1024,\"height\":576,\"caption\":\"Das Docker Image vor einem Gew\u00e4sser, das in arm64 und amd64 aufgeteilt ist\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.inovex.de\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Multi-Architecture Docker Images erstellen [Anleitung]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.inovex.de\/de\/#website\",\"url\":\"https:\/\/www.inovex.de\/de\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.inovex.de\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\/\/www.inovex.de\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/inovexde\",\"https:\/\/x.com\/inovexgmbh\",\"https:\/\/www.instagram.com\/inovexlife\/\",\"https:\/\/www.linkedin.com\/company\/inovex\",\"https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/b80c15e67443e22d6d9dc32173d8880e\",\"name\":\"Benedict Homuth\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/image\/bf251782eb71de262930bfeda931bc58\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=g\",\"caption\":\"Benedict Homuth\"},\"url\":\"https:\/\/www.inovex.de\/de\/blog\/author\/bhomuth\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Multi-Architecture Docker Images erstellen [Anleitung] - inovex GmbH","description":"Am Beispiel von amd64 und arm64 erstellen wir in diesem Tutorial Multi-Architecture Docker Images und bieten diese in einer Container Registry an.","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.inovex.de\/de\/blog\/multi-architecture-docker-images\/","og_locale":"de_DE","og_type":"article","og_title":"Multi-Architecture Docker Images erstellen [Anleitung] - inovex GmbH","og_description":"Am Beispiel von amd64 und arm64 erstellen wir in diesem Tutorial Multi-Architecture Docker Images und bieten diese in einer Container Registry an.","og_url":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2022-01-04T16:12:26+00:00","article_modified_time":"2022-11-21T14:49:56+00:00","og_image":[{"width":1024,"height":576,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png","type":"image\/png"}],"author":"Benedict Homuth","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Benedict Homuth","Gesch\u00e4tzte Lesezeit":"7\u00a0Minuten","Written by":"Benedict Homuth"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/"},"author":{"name":"Benedict Homuth","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/b80c15e67443e22d6d9dc32173d8880e"},"headline":"Multi-Architecture Docker Images erstellen [Anleitung]","datePublished":"2022-01-04T16:12:26+00:00","dateModified":"2022-11-21T14:49:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/"},"wordCount":1039,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png","keywords":["Docker"],"articleSection":["General","Infrastructure"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/","url":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/","name":"Multi-Architecture Docker Images erstellen [Anleitung] - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png","datePublished":"2022-01-04T16:12:26+00:00","dateModified":"2022-11-21T14:49:56+00:00","description":"Am Beispiel von amd64 und arm64 erstellen wir in diesem Tutorial Multi-Architecture Docker Images und bieten diese in einer Container Registry an.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/docker-image-verschiedene-architekturen.png","width":1024,"height":576,"caption":"Das Docker Image vor einem Gew\u00e4sser, das in arm64 und amd64 aufgeteilt ist"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/multi-architecture-docker-images\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Multi-Architecture Docker Images erstellen [Anleitung]"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/b80c15e67443e22d6d9dc32173d8880e","name":"Benedict Homuth","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/image\/bf251782eb71de262930bfeda931bc58","url":"https:\/\/secure.gravatar.com\/avatar\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=g","caption":"Benedict Homuth"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/bhomuth\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/33856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/271"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=33856"}],"version-history":[{"count":4,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/33856\/revisions"}],"predecessor-version":[{"id":34577,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/33856\/revisions\/34577"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/33878"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=33856"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=33856"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=33856"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=33856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}