So verwenden Sie Dienstprofile zur Vereinfachung von Stapeln in Docker Compose

0
130

Docker Compose unterstützt jetzt Profile für die selektive Nutzung von Diensten. Dienste in Ihrer docker-compose.yml können mit einem oder mehreren benannten Profilen verknüpft werden. Wenn Sie einen Profilnamen an docker-compose up übergeben, werden nur die Dienste in diesem Profil gestartet, sodass Sie Varianten Ihres Stack für bestimmte Umgebungen und Konfigurationen erstellen können.

Compose hat sich zuvor auf die Definition eines einzelnen Stack konzentriert, der &#8217 ;sa kanonische Verteilung Ihrer Anwendung. Profile bieten mehr Raum für die Anpassung der zu verwendenden Teile des Stapels, wodurch komplexe Dienste modularer und konfigurierbarer werden.

Warum Profile verwenden?

Die Verwendung von Profilen ist völlig optional. Ihre vorhandenen Docker Compose-Dateien funktionieren weiterhin und es ist nicht erforderlich, Profile sofort zu übernehmen.

Dienstprofile lösen einige häufige Probleme mit Docker Compose-Entwicklungs- und Testabläufen. Möglicherweise verfügen Sie über Dienste, die Sie nur in der Entwicklung verwenden möchten, z. B. einen Debug-Container oder einen Protokollierungsdienst. Wenn Sie in der Produktion sind, benötigen Sie diese Dienste nicht und möchten sie nicht starten.

Um dies zu erreichen, mussten Sie Ihre Servicedefinitionen bisher auf mehrere Dateien aufteilen. Sie benötigen dann einen unhandlichen Befehl, um alles in der Entwicklung zu starten:

# docker-compose.yml version: "3" Dienste: App: Bild: my-app:latest   # docker-compose-dev.yml-Version: "3" services: debug: image: my-app-debug:latest # Start in Produktion docker-compose up -d # Start in Entwicklung docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d

Mit Profilen können Sie beide Service-Definitionen in einer Datei kombinieren. Sie können ein Flag oder eine Umgebungsvariable verwenden, um ein bestimmtes Profil auszuwählen, ohne Dateipfade manuell eingeben zu müssen. Dies schafft eine bequemere Erfahrung, die weniger Aufwand zum Dokumentieren, Schreiben und Ausführen ist.

Definieren von Profilen

Profile werden erstellt, indem die Profile-Feld für Dienste in Ihrer docker-compose.yml. Profile werden als Liste angegeben. Jedem Dienst können ein oder mehrere Profile zugewiesen werden.

Version: "3" services: app: image: my-app:latest debug: image: my-app-debug:latest Profile: – dev

Profilinstanzen werden implizit aus den Namen Ihrer Profilfelder erstellt. Dienste, die ein Profil teilen, werden automatisch beigetreten.

Um die in einem Profil enthaltenen Dienste zu starten, fügen Sie das Flag –profile zu docker-compose up hinzu:

docker-compose up –profile dev < p>Dieser Befehl würde sowohl die App- als auch die Debug-Dienste aus der obigen Compose-Datei starten. Wenn Sie docker-compose up ausführen und das Flag –profile weglassen, wird nur der App-Dienst gestartet.

Sie können mehrere Profile gleichzeitig starten, indem Sie das Flag –profile wiederholen. Compose unterstützt auch die Umgebungsvariable COMPOSE_PROFILES als Alternative zu –profile. Dies akzeptiert eine durch Kommas getrennte Liste von Profilnamen.

Werbung

Dienste ohne Profilfeld werden immer gestartet, unabhängig von einem angeforderten Profil. Nachdem einem Dienst ein Profil zugewiesen wurde, wird er nur gestartet, wenn dieses Profil angefordert wurde. Bei Diensten mit mehreren Profilen ermöglicht die Anforderung eines von ihnen den Start des Dienstes.

Implizite Profilstarts

Profile werden immer ignoriert, wenn Sie starten einen Dienst manuell mit docker-compose run. In diesem Fall startet Compose auch alle Dienste, von denen der angeforderte Dienst abhängt, wenn sie ein Profil teilen oder kein Profil zugewiesen haben.

Hier würde das Ausführen von docker-compose run debug den debug-utils-Dienst starten, obwohl das dev-Profil nicht explizit ausgewählt wurde:

version: "3" services: app: image: my-app:latest debug-utils: image: my-app-debug-utils:latest Profile: – dev debug: image: my-app-debug:latest abhängig_on: debug-utils Profile: – dev

Implizite Starts gelten nur für direkte Angehörige des angegebenen Dienstes. Wenn debug-utils auch ein abhängiges_on hätte und dieser Dienst das Entwicklerprofil nicht teilte, würde er nicht richtig starten.

Damit die Abhängigkeitsauflösung mit docker-compose run ordnungsgemäß funktioniert, müssen alle Dienste in der Struktur ein Profil des obersten Dienstes teilen oder dauerhaft aktiviert sein. Wenn keine dieser Bedingungen zutrifft, müssen Sie das Flag –profile hinzufügen, um alle zusätzlichen erforderlichen Profile explizit zu aktivieren.

Zusammenfassung

Dienstprofile sind eine praktische Compose-Funktion, die es einfacher macht, verschiedene Kombinationen von Diensten zu verwalten. Durch die Verwendung von Profilen können Sie das Aufteilen von Diensten in mehrere Compose-Dateien vermeiden. Das Hinzufügen von –profile fühlt sich normalerweise natürlicher an als das Zusammenführen mehrerer YAML-Dateien.

Werbung

Mit Profilen können Sie Unterstapel in Ihrer Hauptanwendung Compose erstellen. Ihre Einführung als Teil der Compose-Spezifikation ist eine Erkenntnis, dass Stacks in der Entwicklung oft zusätzliche Dienste enthalten, die über die in der Produktion verwendeten hinausgehen.

Im Allgemeinen machen Profile Compose vielseitiger, indem sie die Stack-Anpassung erleichtern. Obwohl Profile als Ansatz für das Umgebungsmanagement gedacht sind, könnten sie der Community auch dabei helfen, verschiedene Variationen beliebter Bilder zu erstellen. Denken Sie an eine WordPress docker-compose.yml mit mysql- und mariadb-Profilen: Jetzt können Sie ganz einfach zwischen vorkonfigurierten Datenbankdiensten wechseln, um die Engine auszuwählen, die Ihren Vorlieben entspricht.

Docker Compose 1.28 hat Anfang des Jahres Profile eingeführt introduced . Solange Sie eine aktuelle Version der Compose-Binärdatei oder Docker Desktop für Windows und Mac haben, können Sie Ihren Compose-Dateien Profile hinzufügen, um Dienste selektiv zu aktivieren.