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.
Sfat

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 composedemo
shell

Schimbați directorul.

$ cd composedemo
shell

Creaț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
redis
plaintext

Pasul 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"]
shell

Instruim 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"
yaml

Serviciul 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 up
shell

Accesaț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:

Imagine: Docker Compose Application: Output the number of visits in the browser
You’ll see the number of times you have visited the browser.

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

Imagine: Calling the Docker Compose application again
The number of visits increased by 1.

Opriți aplicația utilizând:

$ docker compose down
shell

Pentru 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 up
shell

Pasul 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)
python

Reîmprospătați browserul pentru a verifica dacă modificările au fost aplicate.

Imagine: Docker Compose application: modified welcome text
The welcome text in the Python application has been modified

Pasul 8: alte comenzi

Cele --help de liste de opțiuni disponibile comenzi Docker Compose:

docker compose --help
shell

Pentru a rula Docker Compose în fundal, puteți adăuga argumentul -d:

docker compose up -d
shell

Utilizați down pentru a elimina toate containerele. Opțiunea --volumes șterge volumele utilizate de containerul Redis.

docker compose down --volumes
shell
Mergi la meniul principal