Πώς να χρησιμοποιήσετε το Docker Compose για εφαρμογές με πολλά κοντέινερ
Το Compose απλοποιεί την κλιμάκωση και την ανάπτυξη εφαρμογών στο Docker μέσω της αυτοματοποίησης της διαχείρισης των κοντέινερ. Το σεμινάριό μας εξετάζει αναλυτικά τη ρύθμιση και τη χρήση του Docker Compose, ώστε να βελτιστοποιήσετε τη διαδικασία ανάπτυξης των εφαρμογών σας.
Τι είναι το Docker Compose;
Το Docker Compose χρησιμοποιείται για τη διαχείριση εφαρμογών και τη βελτίωση της αποδοτικότητας στην ανάπτυξη κοντέινερ. Οι ρυθμίσεις διαμορφώνονται σε ένα μόνο αρχείο YAML, διευκολύνοντας τη δημιουργία και την κλιμάκωση των εφαρμογών. Το Docker Compose χρησιμοποιείται συχνά για τη δημιουργία ενός τοπικού περιβάλλοντος. Ωστόσο, μπορεί επίσης να ενταχθεί σε μια ροή εργασιών Συνεχούς Ενσωμάτωσης / Συνεχούς Παράδοσης (CI/CD). Οι προγραμματιστές μπορούν να ορίσουν μια συγκεκριμένη έκδοση κοντέινερ για δοκιμές ή συγκεκριμένες φάσεις του pipeline. Αυτό διευκολύνει τον εντοπισμό προβλημάτων και την επιδιόρθωση σφαλμάτων πριν η εφαρμογή μεταφερθεί στην παραγωγή.
Απαιτήσεις του Docker Compose
Για τη διαχείριση κοντέινερ, χρειάζεστε τόσο το Docker Engine όσο και το Docker Compose. Βεβαιωθείτε ότι έχετε εγκαταστήσει ένα από τα παρακάτω στο σύστημά σας:
- Docker Engine και Docker Compose: Μπορούν να εγκατασταθούν ως αυτόνομα εκτελέσιμα αρχεία.
- Docker Desktop: Περιβάλλον ανάπτυξης με γραφικό περιβάλλον χρήστη που περιλαμβάνει το Docker Engine και το Docker Compose.
Μάθετε πώς να εγκαταστήσετε το Docker Compose σε διάφορα λειτουργικά συστήματα στα σεμινάριά μας:
Οδηγός βήμα προς βήμα για τη χρήση του Docker Compose
Στη συνέχεια, θα δείξουμε πώς να χρησιμοποιήσετε το Docker Compose με μια απλή διαδικτυακή εφαρμογή Python που χρησιμοποιεί μετρητή επισκέψεων. Για τον σκοπό αυτό, χρησιμοποιούμε το πλαίσιο εργασίας Python Flask και τη βάση δεδομένων μνήμης Redis. Δεν χρειάζεται να εγκαταστήσετε το Python ή το Redis, καθώς παρέχονται ως εικόνες Docker.
Βήμα 1: Δημιουργία αρχείων έργου
Ξεκινήστε το τερματικό και δημιουργήστε έναν νέο φάκελο για το έργο.
$ mkdir composedemoshellΜεταβείτε στον κατάλογο.
$ cd composedemoshellΔημιουργήστε το αρχείο app.py σε αυτόν τον φάκελο και προσθέστε τον παρακάτω κώδικα σε αυτό:
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Στη ρύθμισή μας, χρησιμοποιούμε redis ως όνομα διακομιστή και την προεπιλεγμένη θύρα 6379 για τη σύνδεση με την υπηρεσία Redis. Επιπλέον, ορίζουμε ότι η συνάρτηση get_hit_count() πρέπει να πραγματοποιεί πολλαπλές προσπάθειες σύνδεσης με την υπηρεσία. Αυτό συνιστάται σε περιπτώσεις όπου το Redis ενδέχεται να μην είναι άμεσα διαθέσιμο κατά την εκκίνηση της εφαρμογής ή όπου ενδέχεται να προκύψουν διαλείπουσα προβλήματα σύνδεσης κατά τη διάρκεια της εκτέλεσης.
Δημιουργήστε το αρχείο requirements.txt με τις εξαρτήσεις:
flask
redisplaintextΒήμα 2: Δημιουργία του αρχείου Dockerfile
Το αρχείο Dockerfile χρησιμοποιείται για την εικόνα Docker. Σε αυτό καθορίζονται όλες οι εξαρτήσεις που απαιτεί η εφαρμογή 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Δίνουμε εντολή στο Docker να χρησιμοποιήσει την εικόνα Python 3.7. Επιπλέον, ορίζουμε τις απαραίτητες μεταβλητές περιβάλλοντος για την εντολή flask. Χρησιμοποιώντας apk add, εγκαθιστούμε βασικές εξαρτήσεις, συμπεριλαμβανομένου του gcc. Για να επιτρέψουμε στο κοντέινερ να παρακολουθεί τη θύρα 5000, καθορίζουμε EXPOSE. Χρησιμοποιώντας COPY, μεταφέρουμε το περιεχόμενο του τρέχοντος φακέλου στον κατάλογο εργασίας /code μέσα στο κοντέινερ. Τέλος, ως προεπιλεγμένη εντολή για το κοντέινερ επιλέγουμε flask run.
Βεβαιωθείτε ότι το αρχείο Dockerfile αποθηκεύτηκε χωρίς επέκταση αρχείου, καθώς ορισμένοι επεξεργαστές προσθέτουν αυτόματα την κατάληξη .txt.
Βήμα 3: Δημιουργία αρχείου YAML
Στο αρχείο docker-compose.yml ρυθμίζουμε τις υπηρεσίες «redis» και «web».
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"yamlΗ διαδικτυακή υπηρεσία έχει δημιουργηθεί χρησιμοποιώντας την εικόνα Docker που δημιουργήθηκε από το Dockerfile. Συνδέει το κοντέινερ και τον κεντρικό υπολογιστή με τη θύρα 8000, ενώ ο διακομιστής ιστού Flask εκτελείται στη θύρα 5000. Η εικόνα Redis, από την άλλη πλευρά, λαμβάνεται απευθείας από το επίσημο Docker Hub.
Βήμα 4: Εκτέλεση της εφαρμογής με το Compose
Εκκινήστε την εφαρμογή από το φάκελο του έργου σας.
docker compose upshellΑνοίξτε τη διεύθυνση http://localhost:8000 στον περιηγητή σας. Μπορείτε επίσης να πληκτρολογήσετε τη διεύθυνση http://127.0.0.1:8000.
Θα πρέπει να εμφανιστεί το ακόλουθο μήνυμα:

Ανανέωσε τη σελίδα. Ο αριθμός των προβολών θα πρέπει τώρα να έχει αυξηθεί κατά 1.

Τερματίστε την εφαρμογή χρησιμοποιώντας:
$ docker compose downshellΓια να τερματίσετε την εφαρμογή, απλώς πληκτρολογήστε Ctrl + C στο τερματικό.
Βήμα 5: Προσθήκη ενός bind mount
Αν θέλετε να προσθέσετε μια σύνδεση bind για την υπηρεσία web, μπορείτε να το κάνετε στο αρχείο docker-compose.yml.
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"yamlΣτην ενότητα «Volumes», ορίζουμε τη σύνδεση του τρέχοντος φακέλου του έργου με τον κατάλογο /code μέσα στο container. Αυτό επιτρέπει την απρόσκοπτη ενημέρωση του κώδικα χωρίς να απαιτείται η εκ νέου δημιουργία της εικόνας. Η μεταβλητή FLASK_DEBUG δίνει εντολή flask run να εκτελεστεί σε λειτουργία ανάπτυξης.
Βήμα 6: Επανασυγκρότηση και εκτέλεση της εφαρμογής
Πληκτρολογήστε την ακόλουθη εντολή στο τερματικό για να δημιουργήσετε εκ νέου το αρχείο Compose:
docker compose upshellΒήμα 7: Ενημέρωση της εφαρμογής
Τώρα που χρησιμοποιείτε μια σύνδεση bind για την εφαρμογή σας, μπορείτε να τροποποιήσετε τον κώδικά σας και να δείτε αυτόματα τις αλλαγές χωρίς να χρειαστεί να δημιουργήσετε εκ νέου την εικόνα.
Γράψτε μια νέα δοκιμή καλωσορίσματος στο αρχείο app.py.
return 'Hello from Docker! I was here {} times.\n'.format(count)pythonΑνανεώστε τη σελίδα για να ελέγξετε αν οι αλλαγές έχουν εφαρμοστεί.

Βήμα 8: άλλες εντολές
Οι --help διαθέσιμες επιλογές περιλαμβάνουν εντολές του Docker Compose:
docker compose --helpshellΓια να εκτελέσετε το Docker Compose στο παρασκήνιο, μπορείτε να προσθέσετε την παράμετρο -d:
docker compose up -dshellΧρησιμοποιήστε down για να καταργήσετε όλα τα κοντέινερ. Η επιλογή --volumes διαγράφει τους τόμους που χρησιμοποιούνται από το κοντέινερ Redis.
docker compose down --volumesshell