GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Verwendung von Dienstprofilen zur Vereinfachung von Stacks in Docker Compose

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

Compose hat sich zuvor darauf konzentriert, einen einzelnen Stapel zu definieren, der eine kanonische Verteilung Ihrer Anwendung darstellt. Profile bieten mehr Spielraum für die Anpassung der zu verwendenden Teile des Stacks, wodurch komplexe Dienstsätze modularer und konfigurierbarer werden.

Warum Profile verwenden?

Die Verwendung von Profilen ist völlig optional. Ihre bestehenden Docker Compose-Dateien funktionieren weiterhin und Sie müssen Profile nicht sofort übernehmen.

Serviceprofile lösen mehrere häufige Frustrationen bei den Entwicklungs- und Testabläufen von Docker Compose. Möglicherweise haben Sie 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.

Bisher mussten Sie dazu Ihre Dienstdefinitionen auf mehrere Dateien aufteilen. Sie benötigen dann ein unhandliches up Befehl, um alles in der Entwicklung zu starten:

# docker-compose.yml
version: "3"
services:
  app:
    image: my-app:latest
 
# docker-compose-dev.yml
version: "3"
services:
  debug:
    image: my-app-debug:latest
# start in production
docker-compose up -d

# start in development
docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d

Mit Profilen können Sie beide Dienstdefinitionen 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 mühsam zu dokumentieren, zu schreiben und auszuführen ist.

Profile definieren

Profile werden durch Setzen der profiles erstellt 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
    profiles:
      - dev

Profilinstanzen werden implizit aus den Namen erstellt, die Sie Ihren profiles gegeben haben Felder. Dienste, die ein gemeinsames Profil haben, werden automatisch verbunden.

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

docker-compose up --profile dev

Dieser Befehl würde sowohl die app starten und debug Dienste aus der obigen Compose-Datei. Wenn Sie docker-compose up ausgeführt haben , wobei --profile weggelassen wird Flag, nur die app Dienst würde starten.

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

Dienste ohne profiles Feld wird 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 kann der Dienst gestartet werden, wenn Sie eines davon anfordern.

Implizite Profilstarts

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

Hier führen Sie docker-compose run debug aus würde die debug-utils starten Dienst, obwohl der dev Profil wurde nicht explizit ausgewählt:

version: "3"
services:
  app:
    image: my-app:latest
  debug-utils:
    image: my-app-debug-utils:latest
    profiles:
      - dev
  debug:
    image: my-app-debug:latest
    depends_on: debug-utils
    profiles:
      - dev

Implizite Starts gelten nur für direkt abhängige Personen des angegebenen Dienstes. Wenn debug-utils hatte auch ein depends_on , und dieser Dienst hat den dev nicht freigegeben Profil, würde es 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 --profile hinzufügen -Flag, um alle zusätzlich 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. Hinzufügen von --profile fühlt sich normalerweise natürlicher an, als mehrere YAML-Dateien zusammenzuführen.

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

Im Allgemeinen machen Profile Compose vielseitiger, indem sie die Stapelanpassung 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. Stellen Sie sich eine WordPress docker-compose.yml vor mit mysql und mariadb Profile:Jetzt können Sie einfach zwischen vorkonfigurierten Datenbankdiensten wechseln, um die Engine auszuwählen, die Ihren Vorlieben entspricht.

Docker Compose 1.28 hat Anfang dieses Jahres Profile eingeführt. Solange Sie eine aktuelle Version der Compose-Binärdatei oder Docker Desktop für Windows und Mac haben, können Sie profiles hinzufügen zu Ihren Compose-Dateien hinzufügen, um mit der selektiven Aktivierung von Diensten zu beginnen.


Docker
  1. So verwenden Sie den Systemctl-Befehl zum Verwalten von Systemd-Diensten

  2. So verwenden Sie Docker Compose

  3. So verwenden Sie ein Dockerfile zum Erstellen eines Docker-Images

  4. Verwendung von Dienstprofilen zur Vereinfachung von Stacks in Docker Compose

  5. So konfigurieren Sie Docker für die Verwendung von Proxy

So installieren und verwenden Sie Docker Compose unter Ubuntu 22.04

So installieren und verwenden Sie Docker unter Ubuntu 22.04

Was ist Docker Compose und wie wird es verwendet?

So stellen Sie Docker Compose Stacks mit Kompose in Kubernetes bereit

So installieren Sie Docker Compose auf Ubuntu

So installieren und verwenden Sie Docker Compose unter Debian 11