Serviceprofielen gebruiken om stapels te vereenvoudigen in Docker Compose

0
155

Docker Compose ondersteunt nu profielen voor selectief gebruik van services. Services in uw docker-compose.yml kunnen worden gekoppeld aan een of meer benoemde profielen. Als u een profielnaam doorgeeft aan docker-compose up, worden alleen de services in dat profiel gestart, zodat u varianten van uw stack kunt maken voor specifieke omgevingen en configuraties.

Compose heeft zich eerder gericht op het definiëren van een enkele stack die '8217 ;sa canonieke distributie van uw applicatie. Profielen voegen meer ruimte toe om aan te passen welke delen van de stapel moeten worden gebruikt, waardoor complexe sets services modulairder en configureerbaarder worden.

Waarom profielen gebruiken?

Het gebruik van profielen is geheel optioneel. Uw bestaande Docker Compose-bestanden blijven functioneren en het is niet nodig om profielen meteen over te nemen.

Serviceprofielen lossen een aantal veelvoorkomende frustraties op met de ontwikkelings- en teststromen van Docker Compose. Mogelijk hebt u services die u alleen in ontwikkeling wilt gebruiken, zoals een foutopsporingscontainer of logboekservice. Als je in productie bent, heb je die services niet nodig en wil je ze ook niet starten.

Om dit te bereiken, moest u voorheen uw servicedefinities over meerdere bestanden splitsen. Je hebt dan een onpraktisch up-commando nodig om alles in ontwikkeling te starten:

# docker-compose.yml version: "3" diensten: app: afbeelding: mijn-app:laatste   # docker-compose-dev.yml versie: "3" services: debug: afbeelding: mijn-app-debug: laatste # start in productie docker-compose up -d # start in ontwikkeling docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d

Met profielen kunt u beide servicedefinities combineren in één bestand. U kunt een vlag of omgevingsvariabele gebruiken om een ​​specifiek profiel te selecteren, zonder handmatig bestandspaden in te typen. Dit zorgt voor een gemakkelijkere ervaring die minder gedoe is om te documenteren, te schrijven en uit te voeren.

Profielen definiëren

Profielen worden gemaakt door het instellen van de profielen op services in uw docker-compose.yml. Profielen worden gespecificeerd als een lijst. Elke dienst kan één of meerdere profielen krijgen.

versie: "3" services: app: afbeelding: mijn-app:laatste debug: afbeelding: mijn-app-debug:laatste profielen: – dev

Profielinstanties worden impliciet gemaakt op basis van de namen die aan uw profielvelden zijn gegeven. Services die een profiel delen, worden automatisch lid.

Om de services in een profiel te starten, voegt u de –profile vlag toe aan docker-compose up:

docker-compose up –profile dev < p>Deze opdracht zou zowel de app als de foutopsporingsservices starten vanuit het bovenstaande Compose-bestand. Als je docker-compose up had uitgevoerd en de –profile-vlag wegliet, zou alleen de app-service starten.

Je kunt meerdere profielen tegelijk starten door de –profile-vlag te herhalen. Compose ondersteunt ook de COMPOSE_PROFILES omgevingsvariabele als alternatief voor –profile. Dit accepteert een door komma's gescheiden lijst met profielnamen.

Advertentie

Het veld Diensten zonder profielen wordt altijd gestart, ongeacht het aangevraagde profiel. Als een dienst eenmaal een profiel heeft gekregen, start deze pas als dat profiel is aangevraagd. Voor services met meerdere profielen, kan het aanvragen van een van deze de service starten.

Impliciete profielstarts

Profielen worden altijd genegeerd als u start handmatig een service met behulp van docker-compose run. In dit geval start Compose ook alle services waarvan de gevraagde service afhankelijk is, als ze een profiel delen of geen profiel hebben toegewezen.

Hier zou het uitvoeren van docker-compose run debug de debug-utils-service starten, ook al is het dev-profiel niet expliciet geselecteerd:

version: "3" services: app: afbeelding: mijn-app: laatste debug-utils: afbeelding: mijn-app-debug-utils: nieuwste profielen: – dev debug: afbeelding: mijn-app-debug: nieuwste hangt af van: debug-utils profielen: – dev

Impliciete starts zijn alleen van toepassing op directe afhankelijken van de opgegeven service. Als debug-utils ook een depend_on had en die service het dev-profiel niet deelde, zou het niet correct opstarten.

Om de afhankelijkheidsresolutie correct te laten werken met docker-compose run, moeten alle services in de structuur een profiel van de bovenste service delen of permanent zijn ingeschakeld. Als geen van deze voorwaarden geldt, moet u de vlag –profile toevoegen om eventuele extra vereiste profielen expliciet te activeren.

Samenvatting

Serviceprofielen zijn een handige Compose-functie die het gemakkelijker maakt om verschillende combinaties van services te beheren. Door profielen te gebruiken, kunt u voorkomen dat services worden opgesplitst in meerdere Compose-bestanden. Het toevoegen van –profile voelt meestal natuurlijker aan dan het samenvoegen van meerdere YAML-bestanden.

Advertentie

Met profielen kunt u sub-stacks bouwen in uw hoofdtoepassing Compose. Hun introductie als onderdeel van de Compose-specificatie is een erkenning dat stapels in ontwikkeling vaak extra services bevatten die verder gaan dan die welke in productie worden gebruikt.

Meer in het algemeen maken profielen Compose veelzijdiger door het aanpassen van de stapel mogelijk te maken. Hoewel ze worden gezien als een benadering van omgevingsbeheer, kunnen profielen de gemeenschap ook helpen om verschillende variaties van populaire afbeeldingen te maken. Denk aan een WordPress docker-compose.yml met mysql- en mariadb-profielen: u kunt nu eenvoudig schakelen tussen vooraf geconfigureerde databaseservices om de engine te selecteren die overeenkomt met uw voorkeur.

Docker Compose 1.28 introduceerde eerder dit jaar profielen . Zolang je een recente versie van Compose binary of Docker Desktop voor Windows en Mac hebt, kun je profielen toevoegen aan je Compose-bestanden om selectief services in te schakelen.