Ako používať Docker Compose pre aplikácie s viacerými kontajnermi
Compose zjednodušuje škálovanie a nasadzovanie aplikácií v Dockeru automatizáciou správy kontajnerov. V našom tutoriáli sa podrobne venujeme nastaveniu a používaniu Docker Compose na zefektívnenie procesu nasadzovania aplikácií.
Čo je Docker Compose?
Docker Compose sa používa na správu aplikácií a zvýšenie efektívnosti vývoja kontajnerov. Konfigurácie sú definované v jednom súbore YAML, čo uľahčuje vytváranie a škálovanie aplikácií. Docker Compose sa často používa na nastavenie lokálneho prostredia. Môže však byť aj súčasťou pracovného postupu nepretržitej integrácie/nepretržitého dodávania (CI/CD). Vývojári môžu definovať konkrétnu verziu kontajnera na testovanie alebo konkrétne fázy potrubia. To uľahčuje identifikáciu problémov a opravu chýb predtým, ako sa aplikácia dostane do produkcie.
Požiadavky na Docker Compose
Na koordináciu kontajnerov potrebujete Docker Engine aj Docker Compose. Uistite sa, že máte v systéme nainštalovaný jeden z nasledujúcich programov:
- Docker Engine a Docker Compose: Možno nainštalovať ako samostatné binárne súbory.
- Docker Desktop: Vývojové prostredie s grafickým používateľským rozhraním vrátane Docker Engine a Docker Compose.
V našich tutoriáloch sa dozviete, ako nainštalovať Docker Compose na rôznych operačných systémoch:
Podrobný návod, ako používať Docker Compose
V nasledujúcom texte ukážeme, ako používať Docker Compose s jednoduchou webovou aplikáciou v jazyku Python, ktorá využíva počítadlo návštev. Na tento účel použijeme framework Python Flask a databázu Redis v pamäti. Nie je potrebné inštalovať Python ani Redis, pretože sú k dispozícii ako obrazy Docker.
Krok 1: Vytvorte súbory projektu
Spustite terminál a vytvorte nový priečinok pre projekt.
$ mkdir composedemoshellPrejdite do adresára.
$ cd composedemoshellVytvorte súbor app.py v tejto zložke a pridajte do neho nasledujúci kód:
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šej konfigurácii používame ako názov hostiteľa redis a predvolený port 6379 na pripojenie k službe Redis. Okrem toho špecifikujeme, že funkcia get_hit_count() by mala vykonať viacero pokusov o pripojenie k službe. To sa odporúča v prípadoch, keď Redis nemusí byť ihneď k dispozícii pri spustení aplikácie alebo keď môžu počas behu aplikácie nastať prerušované problémy s pripojením.
Vytvorte súbor requirements.txt so závislosťami:
flask
redisplaintextKrok 2: Nastavte súbor Dockerfile
Súbor Dockerfile sa používa pre obraz Docker. Ten špecifikuje všetky závislosti, ktoré aplikácia Python vyžaduje.
# 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"]shellNastavíme Docker tak, aby používal obraz Python 3.7. Ďalej nastavíme potrebné premenné prostredia pre príkaz flask. Pomocou apk add nainštalujeme základné závislosti, vrátane gcc. Aby kontajner mohol monitorovať port 5000, zadáme EXPOSE. Pomocou COPY prenesieme obsah aktuálnej zložky do pracovného adresára /code v kontajneri. Nakoniec ako predvolený príkaz pre kontajner zvolíme flask run.
Skontrolujte, či bol súbor Dockerfile uložený bez príponu, pretože niektoré editory automaticky pridávajú príponu .txt.
Krok 3: Vytvorte súbor YAML
V súbore docker-compose.yml konfigurujeme služby „redis“ a „web“.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"yamlWebová služba je vytvorená pomocou obrazu Docker, ktorý bol vytvorený pomocou súboru Dockerfile. Spája kontajner a hostiteľský počítač s portom 8000, zatiaľ čo webový server Flask beží na porte 5000. Obraz Redis je naopak získaný priamo z oficiálneho Docker Hub.
Krok 4: Spustite aplikáciu pomocou Compose
Spustite aplikáciu zo zložky vášho projektu.
docker compose upshellV prehliadači otvorte stránku http://localhost:8000. Môžete tiež zadať adresu http://127.0.0.1:8000.
Mala by sa zobraziť nasledujúca správa:

Obnovte stránku. Počet zobrazení by sa mal teraz zvýšiť o 1.

Zastavte aplikáciu pomocou:
$ docker compose downshellAk chcete zastaviť spustenie aplikácie, stačí stlačiť Ctrl + C v termináli.
Krok 5: Pridajte pripojenie bind
Ak chcete pridať pripojenie pre webovú službu, môžete tak urobiť v súbore docker-compose.yml.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"yamlV sekcii Volumes špecifikujeme pripojenie aktuálnej projektovej zložky k adresáru /code vnútri kontajnera. To umožňuje plynulé zmeny kódu bez potreby opätovného vytvorenia obrazu. Premenná FLASK_DEBUG nariaďuje flask run, aby bežal v režime vývoja.
Krok 6: Prekompilujte a spustite aplikáciu
Do terminálu zadajte nasledujúci príkaz, aby ste znovu vytvorili súbor Compose:
docker compose upshellKrok 7: Aktualizujte aplikáciu
Teraz, keď pre svoju aplikáciu používate bind mount, môžete upraviť svoj kód a automaticky vidieť zmeny bez nutnosti prekompilovať obraz.
Napíšte nový uvítací test v app.py.
return 'Hello from Docker! I was here {} times.\n'.format(count)pythonObnovte prehliadač, aby ste otestovali, či sa zmeny uplatnili.

Krok 8: ďalšie príkazy
--help možností obsahuje zoznam dostupných príkazov Docker Compose:
docker compose --helpshellAk chcete spustiť Docker Compose na pozadí, môžete pridať argument -d:
docker compose up -dshellPomocou down odstráňte všetky kontajnery. Možnosť --volumes odstráni zväzky používané kontajnerom Redis.
docker compose down --volumesshell