Kako uporabljati Docker Compose za aplikacije z več kontejnerji
Compose poenostavlja prilagajanje zmogljivosti in uvajanje aplikacij v Dockerju z avtomatizacijo upravljanja kontejnerjev. V našem vodiču bomo podrobno obravnavali nastavitev in uporabo Docker Compose za poenostavitev postopka uvajanja vaših aplikacij.
Kaj je Docker Compose?
Docker Compose se uporablja za upravljanje aplikacij in povečanje učinkovitosti pri razvoju kontejnerjev. Konfiguracije so opredeljene v eni sami datoteki YAML, kar omogoča enostavno sestavljanje in prilagajanje obsega aplikacij. Docker Compose se pogosto uporablja za vzpostavitev lokalnega okolja. Lahko pa je tudi del delovnega toka neprekinjene integracije in neprekinjene dostave (CI/CD). Razvijalci lahko določijo posebno različico kontejnerja za testiranje ali določene faze poteka. To olajša prepoznavanje težav in odpravljanje napak, preden aplikacija preide v produkcijo.
Zahteve za Docker Compose
Za upravljanje kontejnerjev potrebujete tako Docker Engine kot Docker Compose. Preverite, ali imate v sistemu nameščen enega od naslednjih programov:
- Docker Engine in Docker Compose: Lahko ju namestite kot samostojni izvedljivi datoteki.
- Docker Desktop: razvojno okolje z grafičnim uporabniškim vmesnikom, ki vključuje Docker Engine in Docker Compose.
V naših navodilih si oglejte, kako namestiti Docker Compose na različnih operacijskih sistemih:
Podroben vodnik za uporabo Docker Compose
V nadaljevanju bomo prikazali, kako uporabljati Docker Compose s preprosto spletno aplikacijo v jeziku Python, ki uporablja število ogledov. Za to bomo uporabili ogrodje Python Flask in podatkovno bazo v pomnilniku Redis. Python in Redis vam ni treba namestiti, saj sta na voljo kot slike Dockerja.
1. korak: Ustvarite projektne datoteke
Zaženi terminal in ustvari novo mapo za projekt.
$ mkdir composedemoshellPreklopite v imenik.
$ cd composedemoshellV tej mapi ustvarite datoteko app.py in vanjo vnesite naslednjo kodo:
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)pythonV naši konfiguraciji za povezavo s storitvijo Redis uporabljamo ime gostitelja redis in privzeto vrata 6379 «. Poleg tega določimo, da mora funkcija get_hit_count() opraviti več poskusov povezave s storitvijo. To je priporočljivo v primerih, ko Redis ob zagonu aplikacije morda ni takoj na voljo ali pa med izvajanjem pride do občasnih težav s povezavo.
Ustvarite datoteko requirements.txt z odvisnostmi:
flask
redisplaintextKorak 2: Nastavite datoteko Dockerfile
Datoteka Dockerfile se uporablja za sliko Dockerja. V njej so navedene vse odvisnosti, ki jih potrebuje aplikacija v jeziku Python.
# 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"]shellDockerju naročimo, naj uporabi sliko Python 3.7. Poleg tega nastavimo potrebne spremenljivke okolja za ukaz flask. Z ukazom apk add namestimo nujne odvisnosti, vključno z gcc. Da bi kontejnerju omogočili spremljanje vrat 5000, določimo EXPOSE. Z COPY prenesemo vsebino trenutne mape v delovni imenik /code znotraj kontejnerja. Nazadnje kot privzeti ukaz za kontejner izberemo flask run.
Preverite, ali je bil datoteka Dockerfile shranjena brez končnice, saj nekateri urejevalniki samodejno dodajo končnico .txt.
Korak 3: Ustvarite datoteko YAML
V datoteki docker-compose.yml konfiguriramo storitvi »redis« in »web«.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"yamlSpletna storitev je zgrajena z uporabo slike Docker, ki jo ustvari datoteka Dockerfile. Ta poveže kontejner in gostiteljski računalnik s vratom 8000, medtem ko spletni strežnik Flask deluje na vratih 5000. Slika Redis pa se pridobi neposredno iz uradnega Docker Hub.
Korak 4: Zaženi aplikacijo s Compose
Zaženite aplikacijo iz mape s projektom.
docker compose upshellV brskalniku odprite stran http://localhost:8000. Lahko vnesete tudi http://127.0.0.1:8000.
Prikazalo se bo naslednje sporočilo:

Osvežite stran. Število ogledov bi se zdaj moralo povečati za 1.

Uporabite naslednje za ustavitev programa:
$ docker compose downshellČe želite ustaviti delovanje aplikacije, v terminalu preprosto vtipkajte Ctrl + C.
Korak 5: Dodajte vezavo
Če želite dodati vezano vpetje za spletno storitev, lahko to storite v datoteki docker-compose.yml.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"yamlV razdelku »Volumes« določimo, da se trenutna projektna mapa priključi na imenik /code znotraj kontejnerja. To omogoča nemoteno spreminjanje kode, ne da bi bilo treba ponovno ustvariti sliko. Spremenljivka FLASK_DEBUG naroča flask run, naj deluje v razvojnem načinu.
Korak 6: Ponovna sestava in zagon aplikacije
V terminalu vnesite naslednji ukaz, da ponovno ustvarite datoteko Compose:
docker compose upshell7. korak: Posodobi aplikacijo
Sedaj, ko za svojo aplikacijo uporabljate vezavo, lahko spreminjate kodo in spremembe vidite takoj, brez da bi morali ponovno zgraditi sliko.
V datoteki app.py napišite nov test za dobrodošlico.
return 'Hello from Docker! I was here {} times.\n'.format(count)pythonOsvežite brskalnik, da preverite, ali so bile spremembe upoštevane.

Korak 8: drugi ukazi
Na voljo je --help seznamov možnosti za ukaze Docker Compose:
docker compose --helpshellČe želite Docker Compose zagnati v ozadju, lahko dodate argument -d:
docker compose up -dshellZ ukazom down odstranite vse kontejnerje. Možnost --volumes izbriše prostore, ki jih uporablja kontejner Redis.
docker compose down --volumesshell