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.