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

Μάθετε πώς να εγκαταστήσετε το Docker Compose σε διάφορα λειτουργικά συστήματα στα σεμινάριά μας:

Οδηγός βήμα προς βήμα για τη χρήση του Docker Compose

Στη συνέχεια, θα δείξουμε πώς να χρησιμοποιήσετε το Docker Compose με μια απλή διαδικτυακή εφαρμογή Python που χρησιμοποιεί μετρητή επισκέψεων. Για τον σκοπό αυτό, χρησιμοποιούμε το πλαίσιο εργασίας Python Flask και τη βάση δεδομένων μνήμης Redis. Δεν χρειάζεται να εγκαταστήσετε το Python ή το Redis, καθώς παρέχονται ως εικόνες Docker.

Βήμα 1: Δημιουργία αρχείων έργου

Ξεκινήστε το τερματικό και δημιουργήστε έναν νέο φάκελο για το έργο.

$ mkdir composedemo
shell

Μεταβείτε στον κατάλογο.

$ cd composedemo
shell

Δημιουργήστε το αρχείο 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
redis
plaintext

Βήμα 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 up
shell

Ανοίξτε τη διεύθυνση http://localhost:8000 στον περιηγητή σας. Μπορείτε επίσης να πληκτρολογήσετε τη διεύθυνση http://127.0.0.1:8000.

Θα πρέπει να εμφανιστεί το ακόλουθο μήνυμα:

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

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

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

Τερματίστε την εφαρμογή χρησιμοποιώντας:

$ docker compose down
shell

Για να τερματίσετε την εφαρμογή, απλώς πληκτρολογήστε 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 up
shell

Βήμα 7: Ενημέρωση της εφαρμογής

Τώρα που χρησιμοποιείτε μια σύνδεση bind για την εφαρμογή σας, μπορείτε να τροποποιήσετε τον κώδικά σας και να δείτε αυτόματα τις αλλαγές χωρίς να χρειαστεί να δημιουργήσετε εκ νέου την εικόνα.

Γράψτε μια νέα δοκιμή καλωσορίσματος στο αρχείο app.py.

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

Ανανεώστε τη σελίδα για να ελέγξετε αν οι αλλαγές έχουν εφαρμοστεί.

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

Βήμα 8: άλλες εντολές

Οι --help διαθέσιμες επιλογές περιλαμβάνουν εντολές του Docker Compose:

docker compose --help
shell

Για να εκτελέσετε το Docker Compose στο παρασκήνιο, μπορείτε να προσθέσετε την παράμετρο -d:

docker compose up -d
shell

Χρησιμοποιήστε down για να καταργήσετε όλα τα κοντέινερ. Η επιλογή --volumes διαγράφει τους τόμους που χρησιμοποιούνται από το κοντέινερ Redis.

docker compose down --volumes
shell
Go to Main Menu