Docker | Τι είναι το Docker Compose και πώς το χρησιμοποιούμε


Βλέποντας τον τρόπο με τον οποίο το Docker σου επιτρέπει να "σηκώσεις" εύκολα και γρήγορα οποιαδήποτε υπηρεσία στον υπολογιστή σου, θα σκέφτεσαι ότι δεν υπάρχει περίπτωση όλο αυτό να γίνει ευκολότερο. Κι όμως! Με το Docker Compose μπορούμε να αποθηκεύσουμε σε ένα αρχείο όλες τις υπηρεσίες μας και να τις τρέξουμε μαζικά με μία μόνο εντολή!

Η λογική του Docker Compose μοιάζει πολύ με τα script εντολών του Linux σαν αυτό που γράψαμε τις προάλλες. Όπως δηλαδή το script σου επιτρέπει να δώσεις με τη μία όλες τις εντολές που περιέχονται σε αυτό, έτσι και με το Docker Compose μπορείς να "σηκώσεις" με μία μόνο κίνηση όλα σου τα container.

Ένα ακόμη πλεονέκτημα του Docker Compose είναι ότι το αρχείο στο οποίο θα αποθηκεύσουμε τις εντολές μας δε θα είναι φτιαγμένο για χρήση μόνο στον συγκεκριμένο υπολογιστή. Μπορούμε δηλαδή να το μεταφέρουμε σε οποιονδήποτε server για να εγκαταστήσουμε και εκεί ακριβώς τις ίδιες υπηρεσίες. Πάμε πρώτα να δούμε πώς θα το εγκαταστήσουμε.

Εγκατάσταση Docker Compose (Debian)


Για να ξεκινήσουμε λοιπόν θα πρέπει πρώτα να έχουμε εγκαταστήσει το Docker και στη συνέχεια το Docker Compose, κάτι που γίνεται με την εντολή:

sudo pip install docker-compose

Αν μας βγάλει κάποιο σφάλμα το πιθανότερο είναι ότι δεν έχουμε εγκαταστήσει την Python στον υπολογιστή μας, οπότε δίνουμε πρώτα αυτή την εντολή:

sudo apt install -y python python-pip

Διαφήμιση

Μετατροπή εντολών Docker σε Docker Compose


Στη συνέχεια θα χρειαστεί να μετατρέψουμε τις "docker run" εντολές μας, σε μία μορφή η οποία είναι αναγνώσιμη από το Docker Compose. Για παράδειγμα αν η εντολή εκκίνησης της υπηρεσίας Gitea είναι αυτή:

docker run \
  -p 3000:3000 \
  -p 22:22 \
  -v gitea:/data \
  --restart always \
  kunde21/gitea-arm:latest

Τότε στο Docker Compose θα πρέπει να τη γράψουμε ως εξής:

version: '3.3'
services:
    gitea-arm:
        ports:
            - '3000:3000'
            - '22:22'
        volumes:
            - 'gitea:/data'
        restart: always
        image: 'kunde21/gitea-arm:latest'

Οι δύο εντολές μοιάζουν πάρα πολύ μεταξύ τους αλλά δεν είναι ολόιδιες. Κάποια στιγμή θα εξοικειωθούμε στη μετατροπή τους, αλλά μέχρι τότε υπάρχει η online υπηρεσία "Composerize" η οποία μπορεί να μας μετατρέψει αυτόματα οποιαδήποτε εντολή!


Το Composerize μπορεί να εγκατασταθεί και τοπικά στον υπολογιστή μας με την εντολή:

npm install composerize -g

Στη συνέχεια δίνουμε κανονικά την εντολή "docker run" βάζοντας όμως πρώτα τη λέξη "composerize" και το τερματικό μας θα απαντήσει με την εντολή σε μορφή "Docker Compose". Για παράδειγμα:

composerize docker run -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro --restart always --log-opt max-size=1g nginx


Δημιουργία αρχείου "docker-compose.yml"


Τώρα θα πρέπει να δημιουργήσουμε το αρχείο "docker-compose.yml" στο οποίο θα προσθέσουμε τις εντολές για όλες μας τις υπηρεσίες. Μπορούμε να το φτιάξουμε με το τερματικό μας με την εντολή:

sudo nano docker-compose.yml

Στη συνέχεια προσθέτουμε την πρώτη μας υπηρεσία ως εξής:

version: '3.3'
services:
    gitea-arm:
        ports:
            - '3000:3000'
            - '22:22'
        volumes:
            - 'gitea:/data'
        restart: always
        image: 'kunde21/gitea-arm:latest'

Για την κάθε επόμενη αφήνουμε ένα κενό και την προσθέτουμε χωρίς το "version" και το "services". Κάπως έτσι δηλαδή:

version: '3.3'
services:
    gitea-arm:
        ports:
            - '3000:3000'
            - '22:22'
        volumes:
            - 'gitea:/data'
        restart: always
        image: 'kunde21/gitea-arm:latest'

    mariadb:
        container_name: mariadb
        environment:
            - PUID=1000
            - PGID=1000
            - MYSQL_ROOT_PASSWORD=ROOT_ACCESS_PASSWORD
            - TZ=America/New_York
            - MYSQL_DATABASE=USER_DB_NAME
            - MYSQL_USER=MYSQL_USER
            - MYSQL_PASSWORD=DATABASE_PASSWORD
        ports:
            - '3306:3306'
        volumes:
            - 'path_to_data:/config'
        restart: unless-stopped
        image: linuxserver/mariadb

Το ίδιο κάνουμε και με τις υπόλοιπες υπηρεσίες μας. Αποθηκεύουμε και κλείνουμε το αρχείο μας και το τρέχουμε με την εντολή:

docker-compose up

Μετά από αυτό θα δούμε ότι οι υπηρεσίες μας έχουν ξεκινήσει όλες μαζικά και είναι έτοιμες για χρήση!

Διαφήμιση

Χρήσιμες εντολές του Docker Compose


Κλείνοντας θα δούμε και μερικές απλές αλλά χρήσιμες εντολές του Docker Compose. Είδαμε για παράδειγμα το "docker-compose up" με το οποίο δημιουργούνται τα container, τα volume, τα image και τα network που περιλαμβάνονται στο αρχείο "docker-compose.yml". 

Για να τα σταματήσουμε όλα αυτά και να διαγράψουμε τα container δίνουμε την εντολή:

docker-compose down

Αν θέλουμε να σταματήσουμε τα container και μαζί τους να διαγράψουμε και τα volume που δημιουργήσαμε για αυτά, δίνουμε την ίδια εντολή ως εξής:

docker-compose down -v

Μπορούμε επίσης απλά να σταματήσουμε και όχι να διαγράψουμε τις υπηρεσίες που τρέχουν μέσω του "docker-compose.yml". Αυτό γίνεται με την εντολή:

docker-compose stop

Για να τις ξεκινήσουμε και πάλι δίνουμε την εντολή:

docker-compose start

Υπάρχει η δυνατότητα να τα βάλουμε όλα σε παύση με την εντολή:

docker-compose pause

Ενώ για να τα "ξεπαγώσουμε" θα δώσουμε την εντολή:

docker-compose unpause

Τέλος μπορούμε να κάνουμε επανεκκίνηση σε όλες τις υπηρεσίες που περιλαμβάνονται στο "docker-compose.yml" με την εντολή:

docker-compose restart

Εν κατακλείδι


Το Docker Compose είναι ένα πολύ χρήσιμο εργαλείο με το οποίο μπορούμε να έχουμε τακτοποιημένες τις εντολές όλων των υπηρεσιών που χρησιμοποιούμε σε έναν "production server". Μας δίνει τη δυνατότητα να μεταφέρουμε το αρχείο και να το τρέξουμε σε έναν άλλο υπολογιστή, αν θέλουμε να κάνουμε μία γρήγορη μετάβαση σε νέο server, αλλά αυτό δε σημαίνει φυσικά ότι μαζί του θα πάρουμε και όλα τα δεδομένα που έχουμε ήδη στο server μας.

Περισσότερες εντολές για το Docker Compose θα βρείτε στην επίσημη σελίδα του Docker. 

Σχόλια

Δείτε επίσης...

Android Basics | Τι είναι το ADB, πώς το χρησιμοποιώ και ποιες είναι οι βασικές εντολές του

Android Basics | Τι είναι το Fastboot και πώς χρησιμοποιούμε τις εντολές του;

Docker | Τι είναι και πώς το εγκαθιστούμε στον υπολογιστή μας;

Μάθε παιδί μου Linux | Το σύστημα αρχείων του Linux με απλά λόγια

Android | Χρήσιμα tip για να βγάζουμε εξαιρετικές φωτογραφίες με το κινητό μας

Home Assistant | Πώς δημιουργούμε αυτοματισμούς στο smart home server μας

Raspberry Pi | Φτιάχνουμε το δικό μας smart home server και ενώνουμε όλες τις έξυπνες συσκευές μας σε μία εφαρμογή!

Android | Παίξε τα παιχνίδια του PlayStation στο Android smartphone ή tablet σου με το PS4 Remote Play!

Μάθε παιδί μου Linux | Πώς εγκαθιστούμε εφαρμογές στο Linux

Raspberry Pi | Φτιάξε τις δικές σου κάμερες ασφαλείας με το motionEyeOS