Μια μικρή εισαγωγή στο Docker ξεκινάει πάντα από ένα νέο λήμμα σε γουίκι… τον σύγχρονο τρόπο να μοιράζεσαι γνώση.
Όσοι οι πιστοί προσέλθετε
To wiki αυτό έγινε για να προσφέρει υποστήριξη για το Docker. Παρακάτω θα βρείτε τις απαραίτητες πληροφορίες που χρειάζεστε για να ξεκινήσετε να παίζεται με αυτό το πολύ χρήσιμο εργαλείο.
«Το Docker είναι μία ανοιχτού κώδικα πλατφόρμα η οποία αυτόματοποιεί την ανάπτυξη εφαρμογών με τη χρήση πακέτων ονόματι container παρέχοντας ένα ακόμη επίπεδο αφαίρεσης και αυτοματοποίησης στην εικονικοποίηση(virtualization) σε επίπεδο λειτουργικού συστήματος.»
Με πιο απλά λόγια το Docker είναι μία εφαρμογή - ή καλύτερα ένα εικονικό περιβάλλον - το οποίο επιτρέπει στους προγραμματιστές να αναπτύσσουν και να ελέγχουν εύκολα τα προγράμματά τους σε ένα εικονικό πακέτο/χώρο (που το docker ονομάζει container). Ακόμη πιο συνοπτικά επιτρέπει στον προγραμματιστή να εξετάζει τις εφαρμογές του σε ένα εικονικό περιβάλλον οποιουδήποτε λειτουργικού συστήματος.
Αυτό που κάνει το docker να διαφέρει από τα άλλα εικονικά συστήματα(virtual machines) είναι ότι χρησιμοποιεί όλους τους πόρους του υπολογιστή και δεσμεύει μνήμη όταν χρειάζεται, κάνοντας το πιο αποδοτικό, αφού γίνεται καλύτερη διαχείσηση της μνήνης, σε αντίθεση με τα εικονικά συστήματα που δεσμεύουν συγκεκριμένη μνήμη και πόρους είτε τη χρειάζονται είτε όχι.
Όπως αναφέρθηκε και παραπάνω συνήθως για τον έλεγχο συμβατότητας ενός προγράμματος με ένα λειτουργικό σύστημα χρησιμοποιείται κάποιο εικονικό μηχάνημα/σύστημα (virtual machine - VM). Ένα VM δημιουργεί ένα απομονωμένο λειτουργικό σύστημα - που συνήθως ονομάζεται guest - το οποίο χρησιμοποιεί ένα μεγάλο μέρος από τους πόρους του υπολογιστή.
Τα Containers προσεγγίζουν το πρόβλημα διαφορερτικά. Χρησιμοποιούν τους χαμηλού επιπέδου πόρους του λειτουργικού συστήματος, για να παρέχουν όσο το δυνατόν περισσότερη απομόνωση όσο ένα σύστημα VM κερδίζοντας έτσι υπολογιστή δυνατότητα. Πιο απλά, το docker δημιουργεί έναν φάκελο, ο οποίος αντιπροσωπεύει το εκάστοται σύστημα και όλες οι ενέργειες/πειράματα που θα εκτελέσει ο προγραμματιστής θα επηρεάσουν μόνο το περιεχόμενο του αντίστοιχου φακέλου.
Για την εγκατάσταση του Docker σε Window ή MacOS ο χρήστης χρειάζεται απλώς να ανατρέξει στην ιστοσελίδα του Docker και να κατεβάσει το εκτελέσιμο που αντιστοιχεί στο λειτουργικό του σύστημα (https://www.docker.com/products/docker-desktop). Με την εγκατάσταση του εκτελέσιμο, εγκαθίσταται αυτόματα και το επιπρόσθετο εργαλείο ονόματι docker-compose, το οποίο είναι πολύ χρήσιμο.
Η εγκατάσταση του Docker σε λειτουργικό σύστημα Linux γίνεται με τη επιλογή του απαραίτητου πακέτου από κάποιο αποθετήριο.
Πριν από την εγκατάσταση κάθε πακέτουσυνιστάται να γίνεται ενημέρωση της λίστα των πακέτων και αναβάθμιση του συστήματος. Αυτό επιτυγχάνεται με την εκτέλεση των παρακάτω εντολών:
~$ sudo apt-get update && sudo apt-get upgrade
Για να λειτουργήσει σωστά το Docker χρειάζεται να γίνει εγκατάσταση κάποιων βοηθητικών πακέτων. Τα πακέτα αυτά μπορεί να είναι ήδη εγκατεστημένα στο σύστημα, ως βοηθητικά πακέτα άλλων εφαρμογών, όμως είναι συνετή η εκτέλεση της παρακάτω εντολής:
~$ sudo apt-get install curl apt-transport-https ca-certificates software-properties-common
Πριν την εγκατάσταση του πακέτου, πρέπει να γίνει προσθήκη του αποθετήριου στη λίστα αποθετήριων του συστήματος. Για να γίνει αυτό, πρέπει πρώτα να αναγνωρισθεί από το σύστημα το gpg κλειδί με την εντολή:
~$ curl fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt key add -
και στη συνέχεια να εισαχθεί το αποθετήριο στη λίστα με την εντολή:
~$ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs stable)”
Τέλος γίνεται ενημέρωση της λίστας αποθετήριων με την εντολή:
~$ sudo apt-get update
Η εγκατάσταση του Docker γίνεται με την εντολή:
~$ sudo apt-get install docker-ce
Εαν όλα έχουν πάει καλά, τότε το Docker θα έχει εγκατασταθεί επιτυχώς και το docker.service θα είναι ενεργοποιημένο (active). Για να ελεχθεί αυτό εκτελείται η παρακάτω εντολή:
~$ sudo systemctl status docker
Σε αυτή την ενότητα θα περιγραφούν οι βασικές εντολές του Docker. Η βασική σύνταξη των εντολών είναι η εξής:
~$ sudo docker <command> <flags> <option>
Για τη χρήση των εντολών του Docker χωρίς να χρειάζεται η χρήση της εντολής sudo αρκεί να δημιουργηθεί στο σύστημα μία ομάδα docker και να εισαχθεί ο χρήστης σε αυτή την ομάδα. Αυτό επιτυγχάνεται με τις εντολές:
~$ sudo groupadd docker
~$ sudo usermod -aG docker $USER
Στη συνέχεια πρέπει να γίνει log out και log in για να ενημερωθεί το σύστημα.
Χρησιμοποιείται για την εμφάνιση της βοήθειας του docker. Στη βοήθεια του docker εμφανίζονται συνοπτικά όλες οι εντολές που μπορούν να χρησιμοποιηθούν καθώς επίσης και μία συνοπτική εφαρμογή αυτών.
Η εντολή αυτή εκτελείται ως εξής:
~$ docker help
Με την εντολή αυτή ο χρήστης μπορεί να αναζητήσει το πλήθος των πακέτων που μπορεί να εγκαταστήσει στο εικονικό περιβάλλον docker. Αντί της εκτέλεσης της εντολής αυτής, ο χρήστης μπορεί να επισκευθεί την ιστοσελιδα https://hub.docker.com.
Η εντολή αυτή συντάσσεται ως εξής:
~$ docker search <option>
Για παράδειγμα εάν κάποιος θέλει να εγκαταστήσει το εικονικό περιβάλλον ubuntu, αλλά δεν ξέρει πως ονομάζεται το πακέτο ή θέλει κάποιο συγκεκριμένο πακέτο, τότε μπορεί να εκτελέσει την εντολή:
~$ docker search ubuntu
Και θα του εμφανίσει μία λίστα με τα πακέτα που μπορεί να βρει επισκέπτοντας το σύνδεσμο http://hub.docker.com/search?q=ubuntu&type=image.
Αφού βρεθεί το όνομα του πακέτου που θέλει να εγκαταστήσει, το επόμενο βήμα είναι να το εγκαταστήσει στο εικονικό περιβάλλον. Αυτό επιτυγχάνεται με την εντολή:
~$ docker pull <option>
Για παράδειγμα:
~$ docker pull ubuntu
Σημείωση: Εάν το πακέτο έχει διάφορες εκδοχές, τότε συνίσταται το όνομα να συνοδεύεται και από τον αριθμό της εκδοχής, αλλιώς το docker από προεπιλογή θα εγκαταστήσει την τελευταία εκδοχή.
Ένα παράδειγμα είναι η εγκατάσταση της python στο docker. Η εντολή
~$ docker pull python
θα εγκαταστήσει την τελευταία εκδοχή της python, ενώ εάν θέλει την εκδοχή python2 θα πρέπει να εκτελέσει την εντολή:
~$ docker pull python2
Η εντολή run χρησιμοποιείται για την ενεργοποίηση του πακέτου. Κάθε φορά που εκτελείται αυτή η εντολή, δημιουργείται ένα εικονικό περιβάλλον, το οποίο ονομάζεται container. Κάθε container έχει τα δικά του χαρακτηριστικά, με τα πιο σημαντικά να είναι το id (δεκαεξαδικός κωδικός κλειδί) και το name (όνομα). Συγκεκριμένα τo name μπορεί να δοθεί σαν παράμετρος στην εντολή run. Εάν δε δοθεί, τότε το docker επιλέγει ένα τυχαίο όνομα.
Η εντολή συντάσσεται ως εξής:
~$ docker run <flags> <options>
Για παράδειγμα:
~$ docker -it --name ubuntu_env ubuntu
Όπου:
Σημείωση: Συνιστάται να δίνεται κάποιο όνομα κατά τη δημιουργία container, διότι είναι πιο εύκολο να χρησιμοποιείται αυτό το όνομα για την αναφορά στο συγκεκριμένο container, από το δεκαεξαδικό id ή το όνομα που θα δώσει το docker.
Η εντολή αυτή εμφανίζει τα container και τις πληροφορίες αυτών.
~$ docker ps <flags>
Εδώ τίθεται σκόπιμο να σημειωθεί ότι εάν εκτελεστεί ως:
~$ docker ps
Θα εμφανιστούν μόνο τα container που είναι ενεργά (active) εκείνη τη δεδομένη στιγμή. Για την εμφάνιση ώλων των container χρειάζεται να εκτελεστεί η εντολή:
~$ docker ps -a
Με την εντολή αυτή απενεργοποιείται ένα container. Για την αναφορά στο container θα πρέπει να χρησιμοποιηθεί είτε το id, είτε το name του container. Για αυτο το λόγο είναι καλό να δίνεται πάντα κάποιο όνομα όταν δημιουργούνται container με την εντολή run.
Η εντολή αυτή συντάσσεται ως:
~$ docker stop <container>
Για παράδειγμα:
~$ docker stop ubuntu_env
Η εντολή αυτή ενεργοποιεί ένα σταματημένο container. Αυτό που πρέπει να σημειωθεί είναι ότι η εντολή αυτή δεν δημιουργεί κάποιο container, αλλά ενεργοποιεί ένα υπάρχον. Για αυτό το λόγο δεν πρέπει να δημιουργηθεί σύγχηση με την εντολή run που περιγράφηκε παραπάνω (η εντολή run κάθε φορά που εκτελείται δημιουργεί νέο container).
Η εντολή συντάσσεται ως:
~$ docker start <flags> <container>
Για παράδειγμα:
~$ docker start -i ubuntu_env
Η εντολή αυτή χρησιμοποιείται για τη διαγραφή ενός ή παραπάνω container. Συντάσσεται ως:
~$ docker rm <container>
Για παράδειγμα:
~$ docker rm ubuntu_env
Η εντολή αυτή χρησιμοποιείται για τη διαγραφή ενός ή παραπάνω εικονικού πακέτου. Συντάσσεται ως:
~$ docker rmi <image package>
Για παράδειγμα:
~$ docker rmi ubuntu
Σε αυτή την ενότητα θα περιγραφεί η διαδικασία εγκατάστασης χρήσιμων εφαρμογών μέσα από το περιβάλλον του Docker.
Η εγκατάσταση του λειτουργικού περιβάλλοντος του Ubuntu περιγράφηκε και παραπάνω. Αρκεί να εκτελεστεί η εντολή:
~$ docker pull ubuntu
Με την εντολή αυτή θα πραγματοποιηθεί η εγκατάσταση της τελευταίας έκδοσης του λειτουργικού περιβάλλοντος Ubuntu. Για τη δημιουργία του container και την αλληλεπίδραση του χρήστη με το περιβάλλον του Ubuntu χρειάζεται να εκτελεστεί η εντολή:
~$ docker run -it --name ubuntu_container ubuntu
Στη συνέχεια μπορούν να γίνουν πειράματα εκτελώντας διάφορες εντολές τερματικού, όπως ls, cd, mkdir κλπ.
Για την εγκατάσταση της python αρκεί να εκτελεστεί η εντολή:
~$ docker pull python
Η εντολή αυτή θα εγκαταστήσει την τελευταία έκδοση της python. Εάν κάποιος θέλει κάποια συγκεκριμένη έκδοση, όπως πχ τη 2.7.17 buster χρειάζεται να εκτελέσει την εντολή:
~$ docker pull python:2.7.17-buster
Στη συνέχεια για τη δημιουργία του container αντίστοιχα εκτελείται η εντολή:
~$ docker run --name python_container python