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

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

Prejdite do adresára.

$ cd composedemo
shell

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

V 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
redis
plaintext

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

Nastaví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"
yaml

Webová 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 up
shell

V 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:

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

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

Obrázok: Calling the Docker Compose application again
The number of visits increased by 1.

Zastavte aplikáciu pomocou:

$ docker compose down
shell

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

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

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

Obnovte prehliadač, aby ste otestovali, či sa zmeny uplatnili.

Obrázok: Docker Compose application: modified welcome text
The welcome text in the Python application has been modified

Krok 8: ďalšie príkazy

--help možností obsahuje zoznam dostupných príkazov Docker Compose:

docker compose --help
shell

Ak chcete spustiť Docker Compose na pozadí, môžete pridať argument -d:

docker compose up -d
shell

Pomocou down odstráňte všetky kontajnery. Možnosť --volumes odstráni zväzky používané kontajnerom Redis.

docker compose down --volumes
shell
Prejsť na hlavné menu