# Πώς να χρησιμοποιήσετε το 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.

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

- [Εγκατάσταση του Docker Compose στο Ubuntu](https://www.ionos.com/el-gr/digitalguide/diakomistis/rythmiseis/docker-compose-sto-ubuntu/)
- [Εγκατάσταση του Docker Compose στο macOS](https://www.ionos.com/el-gr/digitalguide/diakomistis/rythmiseis/docker-compose-se-mac/)
- [Εγκατάσταση του Docker Compose σε Windows](https://www.ionos.com/el-gr/digitalguide/diakomistis/rythmiseis/egkatastasi-toy-docker-compose-sta-windows/)

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

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

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

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

```shell
$ mkdir composedemo
```

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

```shell
$ cd composedemo
```

Δημιουργήστε το αρχείο *app.py* σε αυτόν τον φάκελο και προσθέστε τον παρακάτω κώδικα σε αυτό:

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

Στη ρύθμισή μας, χρησιμοποιούμε `redis` ως όνομα διακομιστή και την προεπιλεγμένη θύρα `6379` για τη σύνδεση με την υπηρεσία Redis. Επιπλέον, ορίζουμε ότι η συνάρτηση `get_hit_count()` πρέπει να πραγματοποιεί πολλαπλές προσπάθειες σύνδεσης με την υπηρεσία. Αυτό συνιστάται σε περιπτώσεις όπου το Redis ενδέχεται να μην είναι άμεσα διαθέσιμο κατά την εκκίνηση της εφαρμογής ή όπου ενδέχεται να προκύψουν διαλείπουσα προβλήματα σύνδεσης κατά τη διάρκεια της εκτέλεσης.

Δημιουργήστε το αρχείο *requirements.txt* με τις εξαρτήσεις:

```plaintext
flask
redis
```

### Βήμα 2: Δημιουργία του αρχείου Dockerfile

Το αρχείο **Dockerfile** χρησιμοποιείται για την εικόνα Docker. Σε αυτό καθορίζονται όλες οι εξαρτήσεις που απαιτεί η εφαρμογή Python.

```shell
# 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"]
```

Δίνουμε εντολή στο Docker να χρησιμοποιήσει την εικόνα Python 3.7. Επιπλέον, ορίζουμε τις απαραίτητες μεταβλητές περιβάλλοντος για την **εντολή flask**. Χρησιμοποιώντας `apk add`, εγκαθιστούμε βασικές εξαρτήσεις, συμπεριλαμβανομένου του gcc. Για να επιτρέψουμε στο κοντέινερ να παρακολουθεί τη θύρα 5000, καθορίζουμε `EXPOSE`. Χρησιμοποιώντας `COPY`, μεταφέρουμε το περιεχόμενο του τρέχοντος φακέλου στον κατάλογο εργασίας */code* μέσα στο κοντέινερ. Τέλος, ως προεπιλεγμένη εντολή για το κοντέινερ επιλέγουμε `flask run`.

Βεβαιωθείτε ότι το αρχείο Dockerfile αποθηκεύτηκε χωρίς επέκταση αρχείου, καθώς ορισμένοι επεξεργαστές προσθέτουν αυτόματα την κατάληξη *.txt*.

### Βήμα 3: Δημιουργία αρχείου YAML

Στο αρχείο ***docker-compose.yml*** ρυθμίζουμε τις υπηρεσίες «redis» και «web».

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

Η διαδικτυακή υπηρεσία έχει δημιουργηθεί χρησιμοποιώντας την εικόνα Docker που δημιουργήθηκε από το Dockerfile. Συνδέει το κοντέινερ και τον κεντρικό υπολογιστή με τη θύρα 8000, ενώ ο **διακομιστής ιστού Flask** εκτελείται στη θύρα 5000. Η εικόνα Redis, από την άλλη πλευρά, λαμβάνεται απευθείας από το επίσημο Docker Hub.

### Βήμα 4: Εκτέλεση της εφαρμογής με το Compose

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

```shell
docker compose up
```

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

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

[![Image: Docker Compose Application: Output the number of visits in the browser](https://www.ionos.com/el-gr/digitalguide/fileadmin/_processed_/d/1/csm_docker-compose-hit-counter_f6e8af7148.webp "Docker Compose Application: Output the number of visits in the browser")](https://www.ionos.com/el-gr/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter.png) You’ll see the number of times you have visited the browser. Ανανέωσε τη σελίδα. Ο αριθμός των προβολών θα πρέπει τώρα να έχει αυξηθεί κατά 1.

[![Image: Calling the Docker Compose application again](https://www.ionos.com/el-gr/digitalguide/fileadmin/_processed_/7/8/csm_docker-compose-hit-counter-updated_58c6be39f6.webp "Calling the Docker Compose application again")](https://www.ionos.com/el-gr/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter-updated.png) The number of visits increased by 1. Τερματίστε την εφαρμογή χρησιμοποιώντας:

```shell
$ docker compose down
```

Για να τερματίσετε την εφαρμογή, απλώς πληκτρολογήστε `Ctrl` + `C` στο τερματικό.

### Βήμα 5: Προσθήκη ενός bind mount

Αν θέλετε να προσθέσετε μια **σύνδεση bind** για την υπηρεσία web, μπορείτε να το κάνετε στο αρχείο *docker-compose.yml*.

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

Στην ενότητα **«Volumes»**, ορίζουμε τη σύνδεση του τρέχοντος φακέλου του έργου με τον κατάλογο */code* μέσα στο container. Αυτό επιτρέπει την απρόσκοπτη ενημέρωση του κώδικα χωρίς να απαιτείται η εκ νέου δημιουργία της εικόνας. Η μεταβλητή `FLASK_DEBUG` δίνει εντολή `flask run` να εκτελεστεί σε λειτουργία ανάπτυξης.

### Βήμα 6: Επανασυγκρότηση και εκτέλεση της εφαρμογής

Πληκτρολογήστε την ακόλουθη εντολή στο τερματικό για να δημιουργήσετε εκ νέου το αρχείο Compose:

```shell
docker compose up
```

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

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

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

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

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

[![Image: Docker Compose application: modified welcome text](https://www.ionos.com/el-gr/digitalguide/fileadmin/_processed_/9/3/csm_docker-compose-hit-counter-text-modified_a210964afe.webp "Docker Compose application: modified welcome text")](https://www.ionos.com/el-gr/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-compose-hit-counter-text-modified.png) The welcome text in the Python application has been modified ### Βήμα 8: άλλες εντολές

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

```shell
docker compose --help
```

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

```shell
docker compose up -d
```

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

```shell
docker compose down --volumes
```

Tip Για να ξεκινήσετε με το Docker, ρίξτε μια ματιά στο [σεμινάριο για το Docker](https://www.ionos.com/el-gr/digitalguide/diakomistis/rythmiseis/ekpaideytiko-seminario-gia-to-docker-egkatastasi-kai-prota-bimata/) και στην επισκόπηση των εντολών του Docker.


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/diakomistis/rythmiseis/ekpaideytiko-seminario-gia-to-docker-compose/](https://www.ionos.com/el-gr/digitalguide/diakomistis/rythmiseis/ekpaideytiko-seminario-gia-to-docker-compose/) for AI/LLM consumption.