Cum se utilizează Docker Compose pentru aplicații cu mai multe containere
Compose simplifică scalarea și implementarea aplicațiilor în Docker prin automatizarea gestionării containerelor. Tutorialul nostru analizează în detaliu configurarea și utilizarea Docker Compose pentru a simplifica procesul de implementare a aplicațiilor.
Ce este Docker Compose?
Docker Compose este utilizat pentru gestionarea aplicațiilor și creșterea eficienței în dezvoltarea containerelor. Configurațiile sunt definite într-un singur fișier YAML, ceea ce facilitează construirea și scalarea aplicațiilor. Docker Compose este adesea utilizat pentru configurarea unui mediu local. Cu toate acestea, poate face parte și dintr-un flux de lucru de integrare continuă/livrare continuă (CI/CD). Dezvoltatorii pot defini o versiune specifică de container pentru testare sau faze specifice ale pipeline-ului. Acest lucru facilitează identificarea problemelor și remedierea erorilor înainte ca aplicația să intre în producție.
Cerințe Docker Compose
Pentru orchestrarea containerelor, aveți nevoie atât de Docker Engine, cât și de Docker Compose. Asigurați-vă că aveți instalat unul dintre următoarele pe sistemul dvs.:
- Docker Engine și Docker Compose: Pot fi instalate ca fișiere binare independente.
- Docker Desktop: Mediu de dezvoltare cu interfață grafică pentru utilizator, incluzând Docker Engine și Docker Compose.
Aflați cum să instalați Docker Compose pe diferite sisteme de operare în tutorialele noastre:
Ghid pas cu pas pentru utilizarea Docker Compose
În continuare, vă vom arăta cum să utilizați Docker Compose cu o aplicație web Python simplă care utilizează un contor de accesări. Pentru aceasta, vom folosi framework-ul Python Flask și baza de date în memorie Redis. Nu este necesar să instalați Python sau Redis, deoarece acestea sunt furnizate sub formă de imagini Docker.
Pasul 1: Creați fișierele proiectului
Lansați terminalul și creați un folder nou pentru proiect.
$ mkdir composedemoshellSchimbați directorul.
$ cd composedemoshellCreați fișierul app.py în acest folder și adăugați următorul cod:
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)pythonÎn configurația noastră, utilizăm redis ca nume de gazdă și portul implicit 6379 pentru conectarea la serviciul Redis. În plus, specificăm că funcția get_hit_count() ar trebui să efectueze mai multe încercări de conectare la serviciu. Acest lucru este recomandat în cazul în care Redis nu este disponibil imediat la pornirea aplicației sau în cazul în care pot apărea probleme intermitente de conectare în timpul rulării.
Creați fișierul requirements.txt cu dependențele:
flask
redisplaintextPasul 2: Configurați Dockerfile
Fișierul Dockerfile este utilizat pentru imaginea Docker. Acesta specifică toate dependențele necesare aplicației 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"]shellInstruim Docker să utilizeze imaginea Python 3.7. În plus, setăm variabilele de mediu necesare pentru comanda flask. Folosind apk add, instalăm dependențele esențiale, inclusiv gcc. Pentru a permite containerului să monitorizeze portul 5000, specificăm EXPOSE. Folosind COPY, transferăm conținutul folderului curent în directorul de lucru /code din container. În cele din urmă, ca comandă implicită pentru container, alegem flask run.
Verificați dacă fișierul Dockerfile a fost salvat fără extensie, deoarece unele editoare adaugă automat sufixul .txt.
Pasul 3: Creați fișierul YAML
În docker-compose.yml configurăm serviciile „redis” și „web”.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"yamlServiciul web este construit folosind imaginea Docker creată de Dockerfile. Acesta asociază containerul și computerul gazdă cu portul 8000, în timp ce serverul web Flask rulează pe portul 5000. Imaginea Redis, pe de altă parte, este obținută direct de pe Docker Hub oficial.
Pasul 4: Rulați aplicația cu Compose
Lansați aplicația din folderul proiectului.
docker compose upshellAccesați http://localhost:8000 în browserul dvs. De asemenea, puteți introduce http://127.0.0.1:8000.
Ar trebui să vedeți următorul mesaj:

Reîmprospătați pagina. Numărul de vizualizări ar trebui să fi crescut cu 1.

Opriți aplicația utilizând:
$ docker compose downshellPentru a opri rularea aplicației, puteți apăsa pur și simplu Ctrl + C în terminal.
Pasul 5: Adăugați o montare de legătură
Dacă doriți să adăugați o montare bind pentru serviciul web, puteți face acest lucru în docker-compose.yml.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"yamlÎn secțiunea Volumes, specificăm atașarea folderului proiectului curent la directorul /code din interiorul containerului. Acest lucru permite modificări fluide ale codului, fără a fi necesară recrearea imaginii. Variabila FLASK_DEBUG indică flask run să ruleze în modul de dezvoltare.
Pasul 6: Reconstruiți și rulați aplicația
Introduceți următoarea comandă în terminal pentru a reconstrui fișierul Compose:
docker compose upshellPasul 7: Actualizați aplicația
Acum că utilizați un mount bind pentru aplicația dvs., puteți modifica codul și vedea automat modificările fără a reconstrui imaginea.
Scrieți un nou test de bun venit în app.py.
return 'Hello from Docker! I was here {} times.\n'.format(count)pythonReîmprospătați browserul pentru a verifica dacă modificările au fost aplicate.

Pasul 8: alte comenzi
Cele --help de liste de opțiuni disponibile comenzi Docker Compose:
docker compose --helpshellPentru a rula Docker Compose în fundal, puteți adăuga argumentul -d:
docker compose up -dshellUtilizați down pentru a elimina toate containerele. Opțiunea --volumes șterge volumele utilizate de containerul Redis.
docker compose down --volumesshell