Docker (μέρος 2) | Πώς δημιουργούμε ένα container και ποια είναι τα πρώτα που αξίζει να κατεβάσουμε στον υπολογιστή μας


Είπαμε τις προάλλες πώς μπορεί το Docker να μας βοηθήσει να εγκαταστήσουμε web υπηρεσίες (και όχι μόνο) στον υπολογιστή μας, γλιτώνοντάς μας από τα μειονεκτήματα ενός "κλασικού" server ή μιας εικονικής μηχανής. Σήμερα θα δούμε συγκεκριμένες εντολές δημιουργίας container, ενώ θα προτείνουμε και μερικές χρήσιμες υπηρεσίες που πρέπει όλοι να έχουμε στο σύστημά μας.

Για να αρχίσουμε να μπαίνουμε σιγά σιγά στο νόημα του Docker και να κατανοήσουμε τη λειτουργία του και κατά συνέπεια τις εντολές που θα δούμε στη συνέχεια, αξίζει να δώσουμε ένα γρήγορο και απλό παράδειγμα. Το Docker αποτελείται κυρίως από τέσσερα πράγματα:

  • τη μηχανή εκτέλεσης (Docker engine),
  • τα container (containers),
  • τις υπηρεσίες / εφαρμογές που θέλουμε να τρέξουμε (images) και
  • διάφορες παραμέτρους που αφορούν τα container (environment, volumes κλπ.).

Αν υποθέσουμε ότι το Docker είναι ένα πλοίο (Docker engine), τότε οι εφαρμογές που θα του εγκαταστήσουμε είναι πακεταρισμένες σε κιβώτια (images). Για να φορτώσουμε αυτά τα κιβώτια στο πλοίο, πρέπει πρώτα να τα βάλουμε σε container (containers), τα οποία θα πρέπει να τοποθετήσουμε σε συγκεκριμένες θέσεις και με συγκεκριμένο τρόπο (παράμετροι) επάνω στο πλοίο, ανάλογα με το είδος τους.


Διαφήμιση

Η εντολή δημιουργίας ενός container


Έχοντας λοιπόν αυτή την εικόνα στο μυαλό μας, μπορούμε τώρα να μιλήσουμε για την εντολή δημιουργίας ενός container η οποία είναι κάπως έτσι:

docker run -d --name=Kitsos --restart=unless-stopped -v Kitsos_data:/data_folder -p 8123:80 -e TZ=Europe/Athens DrAndroid/Kitsos

Μπορεί επίσης να τη δούμε και ως εξής:

docker run -d \ 
    --name=Kitsos \ 
    --restart=unless-stopped \ 
    -v Kitsos_data:/docker_data \ 
    -p 8123:80 \ 
    -e TZ=Europe/Athens \ 
    DrAndroid/Kitsos


Ας πάρουμε όμως ένα προς ένα όλα τα παραπάνω για να δούμε τι σημαίνουν:

  • docker run -d: Είναι η εντολή για τη δημιουργία και την εκκίνηση ενός container. Ο δείκτης "-d" προέρχεται από τη λέξη "detached" και πρακτικά σημαίνει ότι θέλουμε το container μας να συνεχίσει να τρέχει αφού κλείσουμε το τερματικό μας.
  • --name=Kitsos: Εδώ δίνουμε ένα όνομα στο container μας για να μπορούμε να το ξεχωρίσουμε στη συνέχεια.
  • --restart=unless-stopped: Εδώ λέμε στο Docker ότι το συγκεκριμένο container θέλουμε να επανεκκινεί σε όλες τις περιπτώσεις (π.χ. μετά από διακοπή ρεύματος), εκτός από την περίπτωση που το έχουμε σταματήσει εμείς.
  • -v Kitsos_data:/docker_data: Με το δείκτη "-v" που προέρχεται από το "volume", λέμε στο container μας ότι θέλουμε να αποθηκεύει τα δεδομένα του σε ένα χώρο που του έχουμε δημιουργήσει. Στη συγκεκριμένη περίπτωση ο χώρος ονομάζεται "Kitsos_data" και βρίσκεται στο φάκελο "docker_data" του λειτουργικού μας συστήματος.
  • -p 8123:80: Με το δείκτη "-p" που προέρχεται από το "port", λέμε στο Docker ότι η υπηρεσία μας η οποία κανονικά τρέχει στην πόρτα 80, θέλουμε στο σύστημά μας να τρέχει στην 8123. Ο λόγος που το κάνουμε αυτό είναι γιατί αν έχουμε περισσότερες από μία υπηρεσίες, η κάθε μία από αυτές πρέπει να λειτουργεί σε διαφορετική πόρτα.
  • -e TZ=Europe/Athens: Με το δείκτη "-e" που προέρχεται από το "environment" δηλώνουμε κάποιες ειδικές παραμέτρους που είναι αναγκαίες για μερικά container. Για παράδειγμα το δικό μας θέλει να γνωρίζει προκαταβολικά το timezone στο οποίο βρισκόμαστε για να λειτουργεί σωστά.
  • DrAndroid/Kitsos: Εδώ τέλος δηλώνουμε το image που θέλουμε να κατεβάσουμε από το DockerHub και το όνομα του developer.

Κάποια από τα παραπάνω είναι απαραίτητα ενώ κάποια άλλα προαιρετικά και αυτό εξαρτάται από το κάθε container. Το καλό είναι ότι δε χρειάζεται να τα γνωρίζουμε απ' έξω, αφού τα αναφέρει ο κάθε δημιουργός στο DockerHub.

Διαφήμιση

Μερικά χρήσιμα container που αξίζει να έχεις στον υπολογιστή σου


Στο προηγούμενο άρθρο εγκαταστήσαμε το Heimdall, μία "Αρχική σελίδα" στην οποία μπορούμε να προσθέσουμε όλες τις Docker υπηρεσίες μας (και όχι μόνο) για να τις βρίσκουμε εύκολα. Για να το δούμε πάλι:

docker volume create heimdall

docker run -d \
    --name=heimdall \
    -e PUID=1000 \
    -e PGID=1000 \
    -e TZ=europe/athens \
    -p 8001:80 \
    -p 9001:443 \
    -v heimdall:/config \
    --restart unless-stopped \
    linuxserver/heimdall

Με την πρώτη εντολή δημιουργούμε το "volume" που χρειάζεται το Heimdall για να λειτουργήσει, το οποίο δηλώνουμε στη δεύτερη εντολή (-v) ότι θέλουμε να βρίσκεται στο φάκελο "config" του συστήματος. Στη δεύτερη δίνουμε επίσης τις τρεις παραμέτρους περιβάλλοντος (-e) που χρειάζεται το Heimall, όπως επίσης και δύο πόρτες (-p), τις οποίες στέλνουμε σε άλλες θύρες γιατί εκεί μας βολεύει να το χρησιμοποιούμε.

Αφού τρέξουμε την εντολή μπορούμε να ανοίξουμε έναν browser στη διεύθυνση "localhost:8001" και θα δούμε την υπηρεσία του Heimdall.


Δεύτερο παράδειγμα το Portainer, το οποίο είναι μία εφαρμογή διαχείρισης του Docker με γραφικό περιβάλλον. Αυτό τρέχει με την εξής εντολή:

docker volume create portainer

docker run -d \
    --name=portainer \
    -p 8000:8000 \
    -p 9000:9000 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer:/data \
    --restart unless-stopped \
    portainer/portainer

Η εντολή είναι παρόμοια αλλά υπάρχουν κάποιες διαφοροποιήσεις. Για παράδειγμα οι πόρτες στις οποίες τρέχει το Portainer (8000 και 9000) μας βολεύουν οπότε δεν τις αλλάξαμε. Επίσης εκτός από το "volume" που δημιουργήσαμε, το Portainer χρειάζεται να προσδεθεί και στο "docker.sock" για τους δικούς του λόγους που δε μας απασχολούν αυτή τη στιγμή.

Σε αυτή την περίπτωση το Portainer τρέχει στη διεύθυνση "localhost:9000"


Τρίτο παράδειγμα το Watchtower, μία υπηρεσία που αναλαμβάνει να αναβαθμίζει αυτόματα όλα τα container που έχουμε στον υπολογιστή μας. Αυτό εγκαθίσταται ως εξής:

docker run -d \
    --name watchtower \
    -e TZ=Europe/Athens \
    -e WATCHTOWER_CLEANUP=true \
    -e WATCHTOWER_INCLUDE_STOPPED=true \
    -e WATCHTOWER_POLL_INTERVAL=86400 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower

Στην περίπτωση αυτή έχουμε τέσσερις περιβαλλοντικούς παράγοντες (-e). Ο πρώτος είναι το timezone στο οποίο βρισκόμαστε. Με τον δεύτερο διαγράφονται αυτόματα όλα τα παλιά image που έχουν πλέον αναβαθμιστεί. Με τον τρίτο αναβαθμίζονται ακόμη και τα container που τα έχουμε σταματήσει. Με τον τέταρτο η αναζήτηση για να αναβαθμίσεις γίνεται κάθε 86400 δευτερόλεπτα, δηλαδή μία φορά τη μέρα.

Σε αυτή την περίπτωση επίσης δε χρειάζεται να δημιουργήσουμε κάποιο "volume", καθώς το Watchtower δεν αποθηκεύει δεδομένα πουθενά, ενώ τέλος δε δηλώνουμε και κάποιο port, αφού δε διαθέτει γραφικό περιβάλλον για να επισκεφτούμε.

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


Είδαμε λοιπόν τι σημαίνει όλο αυτό το μακρινάρι που αποτελεί την εντολή εγκατάστασης ενός container στο Docker. Εγκαταστήσαμε επίσης και τρεις βασικές υπηρεσίες για τη γρήγορη εύρεση, τη διαχείριση και την αναβάθμιση των container μας. Στα επόμενα άρθρα θα μάθουμε τις βασικές εντολές διαχείρισης του Docker μέσω τερματικού, θα δούμε το Docker compose και θα τσεκάρουμε μερικές ακόμη χρήσιμες υπηρεσίες. 

Σχόλια

Δημοσίευση σχολίου

Πες την άποψή σου ή κάνε την ερώτησή σου ελεύθερα, ακολουθώντας όμως τους στοιχειώδεις κανόνες ευγένειας.

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

Φεύγω από την Google (μέρος 15) | ''Ξηλώνουμε'' τα Google apps από το Android

Android | Γιατί δε θα αγόραζα ποτέ smartphone της OnePlus

Ιδιωτικό απόρρητο | Το αφελές επιχείρημα του ''Δεν έχω τίποτα να κρύψω''

Docker (μέρος 7) | Στήνουμε έναν reverse proxy για τα container μας με το Traefik

Μάθε παιδί μου Linux (μέρος 11) | Δίσκοι, κατατμήσεις και σύστημα αρχείων (filesystem)

Ubuntu Touch 2020 review | Μια πραγματική mobile GNU/Linux διανομή έτοιμη για καθημερινή χρήση

Android | Περιόρισε την παρακολούθηση των εφαρμογών και κόψε τις διαφημίσεις με το TrackerControl

Απόρρητο | ''Μπερδεύουμε'' τον αλγόριθμο Google και Facebook με ψεύτικες πληροφορίες

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

Android | Βάλε στην ''απομόνωση'' τις εφαρμογές που δεν εμπιστεύεσαι με το Shelter