A Compose automatizálja a konténerkezelést, ezzel egyszerűsítve az alkalmazások méretezését és telepítését a Dockerben. Oktatóanyagunkban részletesen bemutatjuk a Docker Compose beállítását és használatát, hogy egyszerűsítsd az alkalmazások telepítési folyamatát.

Mi az a Docker Compose?

A Docker Compose alkalmazások kezelésére és a konténerfejlesztés hatékonyságának növelésére szolgál. A konfigurációkat egyetlen YAML fájlban határozzák meg, így az alkalmazások könnyen összeállíthatók és méretezhetők. A Docker Compose-t gyakran használják helyi környezet beállítására. Ugyanakkor része lehet a folyamatos integráció/folyamatos szállítás (CI/CD) munkafolyamatnak is. A fejlesztők meghatározhatnak egy adott konténerverziót tesztelésre vagy bizonyos pipeline fázisokra. Ez megkönnyíti a problémák azonosítását és a hibák kijavítását, mielőtt az alkalmazás termelésbe kerülne.

Docker Compose követelmények

A konténer-koordináláshoz mind a Docker Engine, mind a Docker Compose szükséges. Győződjön meg arról, hogy a rendszerére az alábbiak közül az egyik telepítve van:

  • Docker Engine és Docker Compose: Önálló bináris fájlként telepíthető.
  • Docker Desktop: Grafikus felhasználói felülettel rendelkező fejlesztői környezet, amely tartalmazza a Docker Engine-t és a Docker Compose-t.
Tipp

Tudja meg, hogyan telepítheti a Docker Compose-t különböző operációs rendszerekre az oktatóanyagainkból:

A Docker Compose használatának lépésről lépésre történő útmutatója

Az alábbiakban bemutatjuk, hogyan lehet a Docker Compose-t használni egy egyszerű, látogatószámlálót használó Python webalkalmazással. Ehhez a Python Flask keretrendszert és a Redis memóriában tárolt adatbázist használjuk. Nem szükséges telepíteni a Python vagy a Redis programot, mivel ezek Docker-képek formájában állnak rendelkezésre.

1. lépés: Projektfájlok létrehozása

Indítsa el a terminált, és hozzon létre egy új mappát a projekthez.

$ mkdir composedemo
shell

Váltson át a könyvtárba.

$ cd composedemo
shell

Hozzon létre egy app.py nevű fájlt ebben a mappában, és adja hozzá a következő kódot:

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

Beállításunkban a redis hálózati nevet és az alapértelmezett 6379 portot használjuk a Redis szolgáltatáshoz való csatlakozáshoz. Ezenkívül megadjuk, hogy a get_hit_count() funkciónak többször is meg kell kísérelnie a szolgáltatáshoz való csatlakozást. Ez akkor ajánlott, ha a Redis az alkalmazás indításakor nem áll azonnal rendelkezésre, vagy futás közben időszakos csatlakozási problémák léphetnek fel.

Hozza létre a requirements.txt fájlt a függőségekkel:

flask
redis
plaintext

2. lépés: Dockerfile beállítása

A Dockerfile a Docker-képhez használatos. Ez meghatározza az összes függőséget, amelyre a Python-alkalmazásnak szüksége van.

# 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

Utasítjuk a Dockert, hogy használja a Python 3.7 képet. Ezenkívül beállítjuk a flask parancshoz szükséges környezeti változókat. apk add használatával telepítjük a szükséges függőségeket, beleértve a gcc-t is. Ahhoz, hogy a konténer figyelhesse az 5000-es portot, megadjuk EXPOSE. COPY használatával átvisszük a jelenlegi mappa tartalmát a konténer /code munkakönyvtárába. Végül a konténer alapértelmezett parancsaként flask run választjuk.

Ellenőrizze, hogy a Dockerfile fájl kiterjesztés nélkül lett-e elmentve, mivel egyes szerkesztők automatikusan hozzáadják a .txt kiterjesztést.

3. lépés: YAML fájl létrehozása

A docker-compose.yml fájlban konfiguráljuk a „redis” és a „web” szolgáltatásokat.

version: "3.9"
services:
    web:
        build: .
        ports:
            - "8000:5000"
    redis:
        image: "redis:alpine"
yaml

A webszolgáltatás a Dockerfile által létrehozott Docker-képpel épül fel. A konténert és a gazdaszámítógépet a 8000-as porthoz rendeli, míg a Flask webszerver az 5000-es porton fut. A Redis-kép viszont közvetlenül a hivatalos Docker Hub-ból származik.

4. lépés: Futtassa az alkalmazást a Compose segítségével

Indítsa el az alkalmazást a projektmappából.

docker compose up
shell

Nyissa meg *a http://localhost weboldalt a böngészőjében. Beírhatja *a http://127.0.0.1 címet is.

A következő üzenetnek kell megjelenni:

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

Frissítse az oldalt. A megtekintések száma most 1-gyel növekedett.

Kép: Calling the Docker Compose application again
The number of visits increased by 1.

Az alkalmazás leállítása a következő paranccsal:

$ docker compose down
shell

Az alkalmazás futtatásának leállításához egyszerűen nyomja meg Ctrl + C billentyűkombinációt a terminálban.

5. lépés: Bind mount hozzáadása

Ha hozzáadni szeretne egy bind mountot a webszolgáltatáshoz, ezt a docker-compose.yml fájlban teheti meg.

version: "3.9"
services:
    web:
        build: .
        ports:
            - "8000:5000"
        volumes:
            - .:/code
        environment:
            FLASK_DEBUG: "true"
    redis:
        image: "redis:alpine"
yaml

A Volumes szakaszban megadjuk, hogy a jelenlegi projektmappa csatolva legyen a konténer /code könyvtárához. Ez lehetővé teszi a kód zökkenőmentes módosítását anélkül, hogy újra kellene létrehozni a képet. A FLASK_DEBUG változó azt mondja flask run, hogy fejlesztési módban fusson.

6. lépés: Az alkalmazás újjáépítése és futtatása

Írja be a következő parancsot a terminálba a Compose fájl újjáépítéséhez:

docker compose up
shell

7. lépés: Frissítse az alkalmazást

Most, hogy az alkalmazásához bind mountot használ, módosíthatja a kódot, és automatikusan láthatja a változásokat anélkül, hogy újra kellene építenie a képet.

Írj egy új üdvözlő tesztet az app.py fájlba.

return 'Hello from Docker! I was here {} times.\n'.format(count)
python

Frissítse a böngészőt, hogy ellenőrizze, hogy a módosítások végrehajtásra kerültek-e.

Kép: Docker Compose application: modified welcome text
The welcome text in the Python application has been modified

8. lépés: egyéb parancsok

A --help opció felsorolja a rendelkezésre álló Docker Compose parancsokat:

docker compose --help
shell

A Docker Compose háttérben történő futtatásához hozzáadhatja a -d argumentumot:

docker compose up -d
shell

A down opcióval eltávolíthatók az összes konténer. A --volumes opció a Redis konténer által használt köteteket törli.

docker compose down --volumes
shell
Ugrás a főmenübe