Sådan bruger du Docker Compose til applikationer med flere containere
Compose gør det nemmere at skalere og implementere applikationer i Docker ved at automatisere containerhåndteringen. I vores vejledning ser vi nærmere på, hvordan du konfigurerer og bruger Docker Compose til at strømline implementeringen af dine applikationer.
Hvad er Docker Compose?
Docker Compose bruges til at administrere applikationer og øge effektiviteten i containerudviklingen. Konfigurationerne defineres i en enkelt YAML-fil, hvilket gør det nemt at opbygge og skalere applikationer. Docker Compose bruges ofte til at opsætte et lokalt miljø. Det kan dog også indgå i et Continuous Integration / Continuous Delivery (CI/CD)-arbejdsforløb. Udviklere kan definere en specifik containerversion til test eller specifikke pipelinefaser. Dette gør det lettere at identificere problemer og rette fejl, inden applikationen går i produktion.
Krav til Docker Compose
Til containerorkestrering skal du bruge både Docker Engine og Docker Compose. Sørg for, at du har en af følgende programmer installeret på din computer:
- Docker Engine og Docker Compose: Kan installeres som selvstændige binære filer.
- Docker Desktop: Udviklingsmiljø med grafisk brugergrænseflade, der inkluderer Docker Engine og Docker Compose.
Se vores vejledninger for at finde ud af, hvordan du installerer Docker Compose på forskellige operativsystemer:
Trin-for-trin-vejledning i, hvordan man bruger Docker Compose
I det følgende viser vi, hvordan man bruger Docker Compose med en enkel Python-webapplikation, der benytter en besøgstæller. Til dette bruger vi Python-rammeværket Flask og in-memory-databasen Redis. Du behøver ikke at installere Python eller Redis, da de leveres som Docker-billeder.
Trin 1: Opret projektfiler
Åbn terminalen, og opret en ny mappe til projektet.
$ mkdir composedemoshellSkift til mappen.
$ cd composedemoshellOpret filen app.py i denne mappe, og indsæt følgende kode i den:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I was here {} times.\n'.format(count)pythonI vores opsætning bruger vi redis som værtsnavn og standardporten 6379 til at oprette forbindelse til Redis-tjenesten. Derudover angiver vi, at funktionen get_hit_count() skal foretage flere forbindelsesforsøg til tjenesten. Dette anbefales, hvis Redis ikke er tilgængelig med det samme, når applikationen starter, eller hvis der kan opstå periodiske forbindelsesproblemer under kørsel.
Opret filen requirements.txt med afhængighederne:
flask
redisplaintextTrin 2: Opret en Dockerfile
Dockerfilen bruges til Docker-billedet. Den angiver alle de afhængigheder, som Python-applikationen kræver.
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]shellVi instruerer Docker om at bruge Python 3.7-billedet. Desuden indstiller vi de nødvendige miljøvariabler til flask-kommandoen. Ved hjælp af apk add installerer vi vigtige afhængigheder, herunder gcc. For at containeren kan overvåge port 5000, angiver vi EXPOSE. Ved hjælp af COPY overfører vi indholdet af den aktuelle mappe til arbejdsmappen /code i containeren. Til sidst vælger vi flask run som standardkommando for containeren.
Kontroller, at Dockerfilen er gemt uden filtypenavn, da nogle tekstredigeringsprogrammer automatisk tilføjer filtypenavnet .txt.
Trin 3: Opret en YAML-fil
I filen docker-compose.yml konfigurerer vi tjenesterne »redis« og »web«.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"yamlWebtjenesten er opbygget ved hjælp af det Docker-billede, der er oprettet med Dockerfile. Den knytter containeren og værtscomputeren til port 8000, mens Flask-webserveren kører på port 5000. Redis-billedet hentes derimod direkte fra den officielle Docker Hub.
Trin 4: Kør applikationen med Compose
Start programmet fra din projektmappe.
docker compose upshellÅbn http://localhost:8000 i din browser. Du kan også indtaste http://127.0.0.1:8000.
Du bør se følgende meddelelse:

Opdater siden. Antallet af visninger bør nu være steget med 1.

Afslut programmet ved at:
$ docker compose downshellFor at afslutte programmet skal du blot trykke på Ctrl + C i terminalen.
Trin 5: Opret en bind-mount
Hvis du vil tilføje en bind-mount til webservicen, kan du gøre det i filen docker-compose.yml.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"yamlUnder afsnittet »Volumes« angiver vi, at den aktuelle projektmappe skal tilknyttes mappen /code inde i containeren. Dette gør det muligt at foretage ændringer i koden uden problemer, uden at det er nødvendigt at genoprette billedet. Variablen FLASK_DEBUG angiver, at flask run skal køre i udviklingsmodus.
Trin 6: Genkompiler og kør applikationen
Indtast følgende kommando i terminalen for at genopbygge Compose-filen:
docker compose upshellTrin 7: Opdater applikationen
Nu hvor du bruger en bind-mount til din applikation, kan du ændre din kode og automatisk se ændringerne uden at skulle genkompilere billedet.
Skriv en ny velkomsttest i app.py.
return 'Hello from Docker! I was here {} times.\n'.format(count)pythonOpdater browseren for at kontrollere, om ændringerne er blevet gemt.

Trin 8: Andre kommandoer
De --help tilgængelige Docker Compose-kommandoer:
docker compose --helpshellFor at køre Docker Compose i baggrunden kan du tilføje argumentet -d:
docker compose up -dshellBrug down til at fjerne alle containere. Med indstilling --volumes slettes de diskenheder, der bruges af Redis-containeren.
docker compose down --volumesshell