Hur man använder serviceprofiler för att förenkla stackar i Docker Compose

0
136

Docker Compose stöder nu profiler för selektiv användning av tjänster. Tjänster i din docker-compose.yml kan länkas till en eller flera namngivna profiler. Att skicka ett profilnamn till docker-compose startar bara tjänsterna i den profilen, så att du kan skapa varianter av din stack för specifika miljöer och konfigurationer.

Compose har tidigare fokuserat på att definiera en enda stack som & # 8217 ; en kanonisk distribution av din ansökan. Profiler ger mer utrymme för att anpassa vilka delar av stacken som ska användas, vilket gör komplexa uppsättningar tjänster mer modulära och konfigurerbara.

Varför använda profiler?

Användning av profiler är helt frivilligt. Dina befintliga Docker Compose-filer fortsätter att fungera och det finns inget behov av att anta profiler direkt.

Serviceprofiler löser flera vanliga frustrationer med Docker Compose-utvecklings- och testflöden. Du kan ha tjänster som du bara vill använda i utvecklingen, till exempel en felsökningsbehållare eller loggningstjänst. När du är i produktion behöver du inte dessa tjänster och vill undvika att starta dem.

Tidigare, för att uppnå detta krävs att tjänstdefinitionerna delas över flera filer. Du behöver då ett obehagligt kommando för att starta allt under utveckling:

# docker-compose.yml version: & quot; 3 & quot; tjänster: app: image: min-app: senaste & nbsp; # docker-compose-dev.yml version: & quot; 3 & quot; tjänster: felsökning: bild: min-app-felsökning: senaste # start i produktion docker-compose up -d # start i utveckling docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d Annons

Med profiler kan du kombinera båda tjänstdefinitionerna i en fil. Du kan använda en flagga eller miljövariabel för att välja en specifik profil utan att manuellt skriva ut filvägar. Detta skapar en bekvämare upplevelse som är mindre krångel att dokumentera, skriva och köra.

Definiera profiler

Profiler skapas genom att ställa in profilfält på tjänster i din docker-compose.yml. Profiler anges som en lista. Varje tjänst kan ges en eller flera profiler.

version: & quot; 3 & quot; tjänster: app: image: min-app: senaste felsökning: image: min-app-felsökning: senaste profiler: – dev

Profilinstanser skapas implicit från namnen som ges till dina profilfält. Tjänster som delar en profil ansluts automatiskt.

För att starta tjänsterna som ingår i en profil, lägg till –profile-flaggan till docker-compose up:

docker-compose up –profile dev < p>Det här kommandot startar både app- och felsökningstjänster från ovanstående komponentfil. Om du kör docker-compose upp och utelämnar flaggan –profile startar bara apptjänsten.

Du kan starta flera profiler samtidigt genom att upprepa flaggan –profile. Compose stöder också miljövariabeln COMPOSE_PROFILES som ett alternativ till –profile. Detta accepterar en kommaseparerad lista med profilnamn.

Annons

Tjänster utan profilfält kommer alltid att startas, oavsett vilken profil som efterfrågas. När en tjänst har fått en profil startar den bara om den profilen har begärts. För tjänster med flera profiler kan tjänsten startas om du begär någon av dem.

Implicit profil startar

Profiler ignoreras alltid om du startar en tjänst manuellt med docker-compose-körning. I det här fallet kommer Compose också att starta alla tjänster som den begärda tjänsten är beroende av, om de delar en profil eller inte har någon profil tilldelad.

Här skulle körning av docker-compose-körningsfelsökning starta felsökningstjänsten, även om dev-profilen inte uttryckligen har valts:

version: & quot; 3 & quot; tjänster: app: bild: min-app: senaste felsökningsverktyg: bild: min-app-felsökningsverktyg: senaste profiler: – dev felsökning: bild: min-app-felsökning: senaste beror på: felsökningsverktygsprofiler: – dev

Implicit start gäller endast för direkt beroende av den angivna tjänsten. Om felsökningsverktyg också hade en beror på och den tjänsten inte delade dev-profilen skulle den inte starta korrekt.

För att beroendeberoende ska fungera korrekt med docker-compose-körningen måste alla tjänster i trädet dela en profil med den högsta tjänsten eller vara permanent aktiverade. Om inget av dessa villkor gäller måste du lägga till –profilflaggan för att uttryckligen aktivera ytterligare obligatoriska profiler.

Sammanfattning

Serviceprofiler är en bekväm komponerafunktion som gör det lättare att hantera olika kombinationer av tjänster. Genom att använda profiler kan du undvika att dela tjänster i flera Compose-filer. Att lägga till –profil känns vanligtvis mer naturligt än att slå ihop flera YAML-filer.

Annons

Med profiler kan du bygga ut understaplar i din huvudsakliga Compose-applikation. Deras introduktion som en del av Compose-specifikationen är ett erkännande att staplar i utveckling ofta innehåller extra tjänster utöver de som används i produktionen.

Mer allmänt gör profiler Compose mer mångsidig genom att underlätta stackanpassning. Även om man ser det som ett tillvägagångssätt för miljöhantering kan profiler också hjälpa samhället att skapa olika variationer av populära bilder. Tänk på en WordPress-docker-compose.yml med mysql- och mariadb-profiler: nu kan du enkelt växla mellan förkonfigurerade databastjänster för att välja den motor som matchar dina önskemål.

Docker Compose 1.28 introducerade profiler tidigare i år. . Så länge du har en ny version av Compose-binären eller Docker Desktop för Windows och Mac kan du lägga till profiler i dina Compose-filer för att selektivt aktivera tjänster.