Βλέποντας τον τρόπο με τον οποίο το 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.
Σχόλια
Δημοσίευση σχολίου
Πες την άποψή σου ή κάνε την ερώτησή σου ελεύθερα, ακολουθώντας όμως τους στοιχειώδεις κανόνες ευγένειας.