{"id":8710,"date":"2022-03-26T14:30:11","date_gmt":"2022-03-26T12:30:11","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=8710"},"modified":"2022-12-12T16:46:19","modified_gmt":"2022-12-12T14:46:19","slug":"docker-compose-v1-vs-v2-welche-version-sollte-ich-benutzen-worin-liegen-die-unterschiede","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/docker-compose-v1-vs-v2-welche-version-sollte-ich-benutzen-worin-liegen-die-unterschiede\/","title":{"rendered":"Docker Compose v1 vs. v2: Welche Version sollte ich benutzen? Worin liegen die Unterschiede?"},"content":{"rendered":"<p><a href=\"https:\/\/github.com\/docker\/compose\/releases\/tag\/v2.0.0\" title=\"Ende 2021 wurde eine neue stabile Hauptversion 2 von Docker Compose ver\u00f6ffentlicht\" target=\"_blank\" rel=\"nofollow\">Ende 2021 wurde eine neue stabile Hauptversion 2 von Docker Compose ver\u00f6ffentlicht<\/a>. Es gibt einige Unterschiede und Neuerungen. Teils kommt es zu Verwirrungen, da manche Beitr\u00e4ge im Internet noch Docker Compose Version 1 nutzen, andere dagegen bereits Version 2. Manche gar einen Mix aus beidem. In diesem Beitrag schauen wir uns die Unterschiede der beiden Versionen an und beantworten die Frage, welche davon ihr nutzen solltet und wie man das in der Praxis korrekt macht.<\/p>\n<h2 class=\"wp-block-heading\">Die wichtigsten \u00c4nderungen von Docker Compose V2<\/h2>\n<h3 class=\"wp-block-heading\">Neue technische Architektur<\/h3>\n<p><a href=\"https:\/\/docs.docker.com\/compose\/cli-command\/\" title=\"Compose V2\" target=\"_blank\" rel=\"nofollow\">Compose V2<\/a> wurde in Go komplett neu geschrieben. Go wurde von Google entwickelt, basiert auf dem Syntax von C, enth\u00e4lt aber sowohl Vereinfachungen als auch Erweiterungen. Die Sprache hebt sich durch Skalierbarkeit <a href=\"https:\/\/djangostars.com\/blog\/my-story-with-golang\/\" title=\"und Effizienz\" target=\"_blank\" rel=\"nofollow\">und Effizienz<\/a> hervor. Zuvor setzte Compose auf Python, was vor allem auf schw\u00e4cheren Systemen wie dem Raspberry Pi <a href=\"https:\/\/u-labs.de\/forum\/raspberry-pi-266\/docker-compose-pip-sehr-langsam-dem-raspberry-pi-39677\" title=\"nicht unbedingt \u00fcberm\u00e4\u00dfig schnell war\">nicht unbedingt \u00fcberm\u00e4\u00dfig schnell war<\/a>.<\/p>\n<p>An dieser Stelle hat man auch die Integration verbessert: Compose ist nun ein Plugin f\u00fcr Docker, statt einer eigenst\u00e4ndigen Binary wie unter Version 1. Dadurch \u00e4ndert sich der Aufruf von <strong>docker-compose<\/strong> zu <strong>docker compose<\/strong>. Man kann alternativ mit der Kompatibilit\u00e4tssicht <a href=\"https:\/\/github.com\/docker\/compose-switch\" target=\"_blank\" rel=\"nofollow\">Compose Switch<\/a> auch den eigenst\u00e4ndigen <strong>docker-compose<\/strong> Befehl beibehalten.<\/p>\n<p>Dementsprechend wird Compose nun in das Verzeichnis <strong>~\/.docker\/cli-plugins<\/strong> abgelegt.<\/p>\n<h3 class=\"wp-block-heading\">Yaml-Versionen entfallen: Das Format wird standardisiert<\/h3>\n<p>Zu Beginn einer <em>docker-compose.yml<\/em> wurde bisher \u00fcblicherweise zuerst die Version des Dateiformates angegeben. <a href=\"https:\/\/docs.docker.com\/compose\/compose-file\/compose-versioning\/#compatibility-matrix\" title=\"Version 2 und 3 existieren seit einiger Zeit parallel\" target=\"_blank\" rel=\"nofollow\">Version 2 und 3 existieren seit einiger Zeit parallel<\/a>, da Version 3 haupts\u00e4chlich eine Vereinheitlichung von Compose und Swarm bringen sollte. Daf\u00fcr sind einige Funktionen aus V2 nicht mehr in V3 vorhanden &#8211; unter anderem die Limitierungen der Ressourcen, wie etwa des Arbeitsspeichers. Daher hatte ich bislang empfohlen, mit Compose bevorzugt Version 2 zu nutzen.<\/p>\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/03\/grafik-13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/03\/grafik-13-1024x411.png\" alt=\"\" class=\"wp-image-8711\" width=\"840\" height=\"337\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/03\/grafik-13-1024x411.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/03\/grafik-13-300x121.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/03\/grafik-13-768x309.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/03\/grafik-13-70x28.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/03\/grafik-13.png 1212w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/a><figcaption class=\"wp-element-caption\">Das Yml-Format von Compose-Dateien wurde nun spezifiziert (Quelle: compose-spec.io)<\/figcaption><\/figure>\n<p>Dieses Problem wurde durch eine generelle Spezifizierung des Formats gel\u00f6st. Die <strong>version<\/strong> Eigenschaft <a href=\"https:\/\/github.com\/compose-spec\/compose-spec\/blob\/master\/spec.md#version-top-level-element\" title=\"wurde darin als veraltet Markiert\" target=\"_blank\" rel=\"nofollow\">wurde darin als veraltet Markiert<\/a>: Sie ist nur noch informativ f\u00fcr die Abw\u00e4rtskompatibilit\u00e4t zu \u00e4lteren Dateien, die f\u00fcr Docker Compose V1 entwickelt wurden. Eine Compose Implementierung sollte gem\u00e4\u00df dem neuen Standard diese Version nicht mehr zur \u00dcberpr\u00fcfung nutzen, sondern immer die aktuellste unterst\u00fctzte Version. Bei unbekannten Feldern ist eine Warnmeldung vorgesehen.<\/p>\n<p>Das Format f\u00fcr Docker Container selbst ist bereits seit einiger Zeit in der <a href=\"https:\/\/opencontainers.org\/\" title=\"Open Container Initative OCI\" target=\"_blank\" rel=\"nofollow\"><strong>Open Container Initative<\/strong> OCI<\/a> genormt. Dadurch k\u00f6nnen Alternativen wie Podman oder Containerd die gleichen Funktionen implementieren und bieten damit eine Alternative zu Docker, die wenig bis gar keine \u00c4nderungen erfordern. Daf\u00fcr aber eigene Vorteile mit sich bringen, Podman kommt etwa ohne Root-Rechte aus. Es ist daher sinnvoll, auch das Compose Format zu spezifizieren &#8211; zumal das die bestehenden Dateiversionen 1 und 2 vereint. Um es verwenden zu k\u00f6nnen, braucht ihr Docker Compose v2 oder mindestens Version 1.27.0.<\/p>\n<h3 class=\"wp-block-heading\">Weitere Neuerungen der letzten Monaten<\/h3>\n<p>Dar\u00fcber hinaus gibt es einige weitere Neuerungen in Docker Compose Version 2, darunter unter anderem <strong>Service Profiles<\/strong>. Man kann damit Gruppen von Diensten anlegen, um nur einzelne Dienste zu starten. Mit <strong>docker compose ls<\/strong> erscheint eine \u00dcbersicht aller Compose Projekt auf dem gesanten System. Wer Dateien kopieren m\u00f6chte, kann das mit <strong>docker-compose cp <\/strong>mittlerweile auch \u00fcber Compose machen. Die Ausgabe ist \u00fcbersichtlicher geworden, unter anderem durch den Einsatz von Farben. Man sieht nun auch, welcher Schritt wie viel Zeit ben\u00f6tigt. Caching funktioniert besser, mit Version 1 hatte ich in bestimmten Konstellationen Probleme.<\/p>\n<p>Eine aktuelle \u00dcbersicht der \u00c4nderungen und Neuerungen findet ihr <a href=\"https:\/\/docs.docker.com\/compose\/release-notes\/\" title=\"in den offiziellen Docker Compose Release Notes\" target=\"_blank\" rel=\"nofollow\">in den offiziellen Docker Compose Release Notes<\/a> (englisch).<\/p>\n<h2 class=\"wp-block-heading\">Welche Docker Compose Version sollte ich nutzen?<\/h2>\n<p>Version 2 w\u00fcrde ich definitiv bevorzugen: Sie bietet einige Vorteile gegen\u00fcber Version 1 und wird aktiv mit Aktualisierungen versorgt. Die letzte 1.x Version 1.29.2 stammt aus dem Mai 2021. Als \u00dcbergangsl\u00f6sung kann man Compose-Switch verwenden. Wobei sich die \u00c4nderungen der Konsolenbefehle in Grenzen halten.<\/p>\n<h2 class=\"wp-block-heading\">Wie installiere ich Docker Compose V2 korrekt?<\/h2>\n<p>Zwar ist Compose v2 wie v2 eine Binary und kann daher theoretisch einfach nach <strong>\/usr\/local\/bin<\/strong> kopiert werden. Damit der Aufruf als Plugin \u00fcber <strong>docker compose<\/strong> (also Leerzeichen statt Minus) funktioniert, muss die Binary in den Plugin-Ordner kopiert werden. F\u00fcr euren lokalen Benutzer ist das <strong>$HOME\/.docker\/cli-plugins<\/strong>, wer global installieren m\u00f6chte kann daf\u00fcr auch einen der vier folgenden Ordner nutzen:<\/p>\n<ul class=\"wp-block-list\">\n<li>\/usr\/local\/lib\/docker\/cli-plugins<\/li>\n<li>\/usr\/local\/libexec\/docker\/cli-plugins<\/li>\n<li>\/usr\/lib\/docker\/cli-plugins<\/li>\n<li>\/usr\/libexec\/docker\/cli-plugins<\/li>\n<\/ul>\n<p>Je nachdem ob systemweit oder f\u00fcr euren aktuellen Benutzer installiert werden soll, legt ihr den gew\u00fcnschten Ordner zun\u00e4chst an. Dann sucht ihr <a href=\"http:\/\/wget https:\/\/github.com\/docker\/compose\/releases\/download\/v2.3.3\/docker-compose-linux-aarch64\" target=\"_blank\" rel=\"nofollow\">auf der Release-Seite von Compose<\/a> nach der aktuellsten stabilen Version &#8211; zum Erstellzeitpunkt dieses Beitrages war das 2.3.3. In meinem Fall ist die 64 Bit Edition vom Raspberry Pi OS auf einem Raspberry Pi 4 installiert, daher w\u00e4hle ich AARCH64 f\u00fcr die 64 Bit ARM Architektur. Abh\u00e4ngig von der eingesetzten Hard- und Software k\u00f6nnt ihr alternativ auch ARMv7 oder ARMv6 nutzen. Die Binary wird anschlie\u00dfend heruntergeladen und und den Plugin-Ordner verschoben. Dabei \u00e4ndern wir den Name auf <strong>docker-compose<\/strong>.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">mkdir -p ~\/.docker\/cli-plugins\nwget https:\/\/github.com\/docker\/compose\/releases\/download\/v2.3.3\/docker-compose-linux-aarch64\nmv docker-compose-linux-aarch64 ~\/.docker\/cli-plugins\/docker-compose<\/code><\/pre>\n<p>Nun kann man den Aufruf als Plugin (mit Leerzeichen statt Minus) testen:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ docker compose version\nDocker Compose version v2.3.3<\/code><\/pre>\n<p>Dies ist die offiziell von Docker empfohlene Installationsmethode f\u00fcr V2, weswegen ich sie bevorzugen w\u00fcrde. Wer dennoch lieber die Binary nach <strong>\/usr\/local\/bin<\/strong> verschiebt, kann Compose wie unter Version 1 mit Minus aufrufen. Ob Docker das dauerhaft mit allen Funktionen unterst\u00fctzt, ist allerdings ungewiss.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ende 2021 wurde eine neue stabile Hauptversion 2 von Docker Compose ver\u00f6ffentlicht. Es gibt einige Unterschiede und Neuerungen. Teils kommt es zu Verwirrungen, da manche Beitr\u00e4ge im Internet noch Docker Compose Version 1 nutzen, andere dagegen bereits Version 2. Manche gar einen Mix aus beidem. In diesem Beitrag schauen wir uns die Unterschiede der beiden &#8230;<\/p>\n","protected":false},"author":5,"featured_media":8718,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[883,671],"tags":[771],"class_list":["post-8710","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker-containertechnologie","category-raspberry-pi","tag-docker-compose"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8710","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=8710"}],"version-history":[{"count":8,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8710\/revisions"}],"predecessor-version":[{"id":9762,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8710\/revisions\/9762"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/8718"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=8710"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=8710"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=8710"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}