Applikationer med flere containere og Compose
Orkestrer flere Docker-containere, f.eks. en webapplikation og en database, med Docker Compose til lokal udvikling.
Applikationer med flere containere og Compose er en gratis Docker og Kubernetes for udviklere-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Docker og Kubernetes for udviklere, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Docker og Kubernetes for udviklere-kurset indeholder 4 lektioner i alt.
Hvorfor applikationer med flere containere?
I virkelige applikationer har du sjældent kun én komponent. Forestil dig en webapplikation: Du skal bruge en webserver (f.eks. Nginx), en backend-applikation (f.eks. Python Flask) og en database (f.eks. Redis eller PostgreSQL).
Hver af disse komponenter har sine egne afhængigheder og sin egen konfiguration. Det kan hurtigt blive komplekst at administrere dem individuelt og sikre, at de kommunikerer korrekt.
Mød Docker Compose
Docker Compose er et værktøj, der er udviklet til at forenkle processen med at definere og køre Docker-applikationer med flere containere.
- Du definerer hele applikationens tjenester (containere) i en enkelt YAML-fil.
- Derefter opretter og starter Compose alle tjenesterne for dig med én enkel kommando.
- Det er særligt nyttigt i miljøer til lokal udvikling og test.
Compose-YAML-filen
Hjertet i Docker Compose er filen docker-compose.yml. Denne YAML-fil beskriver applikationens tjenester, netværk og volumes.
Den starter typisk med en version-nøgle efterfulgt af hovedsektionen services, hvor du definerer hver container, som udgør din applikation.
Definering af tjenester
Under sektionen services angiver du hver komponent i din applikation. Hver tjeneste svarer til en Docker-container.
Vigtige egenskaber til definition af en tjeneste omfatter:
image: Angiver det Docker-image, der skal bruges (f.eks.nginx:latest).build: Angiver stien til en mappe, der indeholder enDockerfile, som bruges til at bygge et brugerdefineret image.container_name: Et valgfrit, fast navn til din container, så den er nemmere at referere til.
Eksponering og konfiguration af tjenester
Du har ofte brug for at eksponere dine tjenester til værtsmaskinen eller konfigurere dem med miljøvariabler.
ports: Knytter porte fra værten til containeren (f.eks. knytter"8080:80"værtens port 8080 til containerens port 80).environment: Videregiver miljøvariabler til containeren (f.eks.DB_HOST: "database").
Disse indstillinger er afgørende for kommunikation og tilpasning.
Forbind dine tjenester
Når du bruger Docker Compose, opretter det automatisk et standardnetværk til din applikation. Alle tjenester, der er defineret i filen docker-compose.yml, tilsluttes dette netværk.
Det gør det muligt for tjenesterne at kommunikere med hinanden ved hjælp af deres tjenestenavne som værtsnavne. En webapplikationstjeneste kan f.eks. oprette forbindelse til en databasetjeneste med navnet redis ved blot at bruge redis som værtsnavn.
Eksempel: Python + Redis
Lad os bygge en simpel applikation med flere containere: en Python Flask-webapplikation, der tæller, hvor mange gange den er blevet besøgt, og gemmer antallet i en Redis-database.
Denne opsætning viser tydeligt, hvordan en 'web'-tjeneste kan interagere med en 'database'-tjeneste i en enkelt Compose-applikation.
Webapplikationens kode og Dockerfile
Her er vores simple Python Flask-applikation (app.py) og dens Dockerfile. Flask-applikationen opretter forbindelse til tjenesten redis, og Dockerfile pakker det hele sammen.
# app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
# Connects to 'redis' service in Compose network
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 from CoddyKit! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
# requirements.txt
# flask
# redis
# Dockerfile
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
Din første Compose-fil
Denne docker-compose.yml-fil forbinder det hele. Den definerer to tjenester: web (vores Python-applikation, der bygges fra den aktuelle mappe) og redis (som bruger det officielle Redis-image).
Prøv at køre dette eksempel!
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"Administration af din Compose-applikation
Hvis du vil starte din applikation med flere containere i detached-tilstand (i baggrunden), skal du gå til mappen, der indeholder din docker-compose.yml-fil og de tilhørende filer, og derefter køre:
docker compose up -dHvis du vil se de kørende tjenester og deres status:
docker compose psHvis du vil stoppe og fjerne de containere, netværk og volumes, som Compose har oprettet:
docker compose downKontrol af Compose-konfiguration
Se på følgende udsnit af docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "8080:80"
database:
image: "postgres:13"Hvilken påstand om denne konfiguration er SAND?
Opsummering: Docker Compose
Du har lært, hvordan Docker Compose forenkler administrationen af applikationer med flere containere i forbindelse med lokal udvikling!
- Det bruger en
docker-compose.yml-fil til at definere alle dine tjenester. - Tjenester kan kommunikere med hinanden ved hjælp af deres tjenestenavne på et standardnetværk.
- Kommandoer som
docker compose upogdocker compose downadministrerer hele din applikationsstak på en enkel måde.
Docker Compose er et vigtigt værktøj til lokale udviklingsopsætninger med flere Docker-containere.
Lær Docker og Kubernetes for udviklere med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Applikationer med flere containere og Compose” gratis?
Ja — hele teksten til “Applikationer med flere containere og Compose” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Docker og Kubernetes for udviklere-kurset, skal du opgradere til CoddyKit PRO. Docker og Kubernetes for udviklere-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Applikationer med flere containere og Compose”?
Orkestrer flere Docker-containere, f.eks. en webapplikation og en database, med Docker Compose til lokal udvikling. Du øver dig i Docker og Kubernetes for udviklere med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Docker og Kubernetes for udviklere?
Der kræves ingen tidligere erfaring. Docker og Kubernetes for udviklere på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Applikationer med flere containere og Compose”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Docker og Kubernetes for udviklere-lektion?
Ja. Alle Docker og Kubernetes for udviklere-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Udarbejdelse af Dockerfiles til images
- Bygning af brugerdefinerede Docker-images
- Applikationer med flere containere og Compose
- Vedvarende data med Docker-volumener