Πίνακας Περιεχομένων

Μια μικρή εισαγωγή στο Docker ξεκινάει πάντα από ένα νέο λήμμα σε γουίκι… τον σύγχρονο τρόπο να μοιράζεσαι γνώση.

Όσοι οι πιστοί προσέλθετε :-)

Καλωσορίσατε στo Docker!

To wiki αυτό έγινε για να προσφέρει υποστήριξη για το Docker. Παρακάτω θα βρείτε τις απαραίτητες πληροφορίες που χρειάζεστε για να ξεκινήσετε να παίζεται με αυτό το πολύ χρήσιμο εργαλείο.

Εισαγωγή

Τι είναι το Docker

«Το Docker είναι μία ανοιχτού κώδικα πλατφόρμα η οποία αυτόματοποιεί την ανάπτυξη εφαρμογών με τη χρήση πακέτων ονόματι container παρέχοντας ένα ακόμη επίπεδο αφαίρεσης και αυτοματοποίησης στην εικονικοποίηση(virtualization) σε επίπεδο λειτουργικού συστήματος.»

Με πιο απλά λόγια το Docker είναι μία εφαρμογή - ή καλύτερα ένα εικονικό περιβάλλον - το οποίο επιτρέπει στους προγραμματιστές να αναπτύσσουν και να ελέγχουν εύκολα τα προγράμματά τους σε ένα εικονικό πακέτο/χώρο (που το docker ονομάζει container). Ακόμη πιο συνοπτικά επιτρέπει στον προγραμματιστή να εξετάζει τις εφαρμογές του σε ένα εικονικό περιβάλλον οποιουδήποτε λειτουργικού συστήματος.

Αυτό που κάνει το docker να διαφέρει από τα άλλα εικονικά συστήματα(virtual machines) είναι ότι χρησιμοποιεί όλους τους πόρους του υπολογιστή και δεσμεύει μνήμη όταν χρειάζεται, κάνοντας το πιο αποδοτικό, αφού γίνεται καλύτερη διαχείσηση της μνήνης, σε αντίθεση με τα εικονικά συστήματα που δεσμεύουν συγκεκριμένη μνήμη και πόρους είτε τη χρειάζονται είτε όχι.

Τι είναι το Container

Όπως αναφέρθηκε και παραπάνω συνήθως για τον έλεγχο συμβατότητας ενός προγράμματος με ένα λειτουργικό σύστημα χρησιμοποιείται κάποιο εικονικό μηχάνημα/σύστημα (virtual machine - VM). Ένα VM δημιουργεί ένα απομονωμένο λειτουργικό σύστημα - που συνήθως ονομάζεται guest - το οποίο χρησιμοποιεί ένα μεγάλο μέρος από τους πόρους του υπολογιστή.

Τα Containers προσεγγίζουν το πρόβλημα διαφορερτικά. Χρησιμοποιούν τους χαμηλού επιπέδου πόρους του λειτουργικού συστήματος, για να παρέχουν όσο το δυνατόν περισσότερη απομόνωση όσο ένα σύστημα VM κερδίζοντας έτσι υπολογιστή δυνατότητα. Πιο απλά, το docker δημιουργεί έναν φάκελο, ο οποίος αντιπροσωπεύει το εκάστοται σύστημα και όλες οι ενέργειες/πειράματα που θα εκτελέσει ο προγραμματιστής θα επηρεάσουν μόνο το περιεχόμενο του αντίστοιχου φακέλου.

Εγκατάσταση του Docker στα Windows η MacOS

Για την εγκατάσταση του Docker σε Window ή MacOS ο χρήστης χρειάζεται απλώς να ανατρέξει στην ιστοσελίδα του Docker και να κατεβάσει το εκτελέσιμο που αντιστοιχεί στο λειτουργικό του σύστημα (https://www.docker.com/products/docker-desktop). Με την εγκατάσταση του εκτελέσιμο, εγκαθίσταται αυτόματα και το επιπρόσθετο εργαλείο ονόματι docker-compose, το οποίο είναι πολύ χρήσιμο.

Εγκατάσταση του Docker σε Linux λειτουργικό σύστημα

Η εγκατάσταση του Docker σε λειτουργικό σύστημα Linux γίνεται με τη επιλογή του απαραίτητου πακέτου από κάποιο αποθετήριο.

Εγκατάσταση σε Ubuntu:

Ενημέρωση συστήματος (προαιρετικό βήμα)

Πριν από την εγκατάσταση κάθε πακέτουσυνιστάται να γίνεται ενημέρωση της λίστα των πακέτων και αναβάθμιση του συστήματος. Αυτό επιτυγχάνεται με την εκτέλεση των παρακάτω εντολών:

  ~$ 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

Η εγκατάσταση του Docker γίνεται με την εντολή:

  ~$ sudo apt-get install docker-ce

Έλεγχος

Εαν όλα έχουν πάει καλά, τότε το Docker θα έχει εγκατασταθεί επιτυχώς και το docker.service θα είναι ενεργοποιημένο (active). Για να ελεχθεί αυτό εκτελείται η παρακάτω εντολή:

  ~$ sudo systemctl status docker

Βασικές Εντολές του Docker

Σε αυτή την ενότητα θα περιγραφούν οι βασικές εντολές του Docker. Η βασική σύνταξη των εντολών είναι η εξής:

  ~$ sudo docker <command> <flags> <option>

Χρήση των εντολών χωρίς sudo

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

  ~$ sudo groupadd docker
  ~$ sudo usermod -aG docker $USER

Στη συνέχεια πρέπει να γίνει log out και log in για να ενημερωθεί το σύστημα.

Help

Χρησιμοποιείται για την εμφάνιση της βοήθειας του 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.

Pull

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

  ~$ docker pull <option>

Για παράδειγμα:

  ~$ docker pull ubuntu

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

Ένα παράδειγμα είναι η εγκατάσταση της python στο docker. Η εντολή

  ~$ docker pull python

θα εγκαταστήσει την τελευταία εκδοχή της python, ενώ εάν θέλει την εκδοχή python2 θα πρέπει να εκτελέσει την εντολή:

  ~$ docker pull python2

Run

Η εντολή run χρησιμοποιείται για την ενεργοποίηση του πακέτου. Κάθε φορά που εκτελείται αυτή η εντολή, δημιουργείται ένα εικονικό περιβάλλον, το οποίο ονομάζεται container. Κάθε container έχει τα δικά του χαρακτηριστικά, με τα πιο σημαντικά να είναι το id (δεκαεξαδικός κωδικός κλειδί) και το name (όνομα). Συγκεκριμένα τo name μπορεί να δοθεί σαν παράμετρος στην εντολή run. Εάν δε δοθεί, τότε το docker επιλέγει ένα τυχαίο όνομα.

Η εντολή συντάσσεται ως εξής:

  ~$ docker run <flags> <options>

Για παράδειγμα:

  ~$ docker -it --name ubuntu_env ubuntu

Όπου:

Σημείωση: Συνιστάται να δίνεται κάποιο όνομα κατά τη δημιουργία container, διότι είναι πιο εύκολο να χρησιμοποιείται αυτό το όνομα για την αναφορά στο συγκεκριμένο container, από το δεκαεξαδικό id ή το όνομα που θα δώσει το docker.

Ps

Η εντολή αυτή εμφανίζει τα container και τις πληροφορίες αυτών.

  ~$ docker ps <flags>

Εδώ τίθεται σκόπιμο να σημειωθεί ότι εάν εκτελεστεί ως:

  ~$ docker ps

Θα εμφανιστούν μόνο τα container που είναι ενεργά (active) εκείνη τη δεδομένη στιγμή. Για την εμφάνιση ώλων των container χρειάζεται να εκτελεστεί η εντολή:

  ~$ docker ps -a

Stop

Με την εντολή αυτή απενεργοποιείται ένα container. Για την αναφορά στο container θα πρέπει να χρησιμοποιηθεί είτε το id, είτε το name του container. Για αυτο το λόγο είναι καλό να δίνεται πάντα κάποιο όνομα όταν δημιουργούνται container με την εντολή run.

Η εντολή αυτή συντάσσεται ως:

  ~$ docker stop <container>

Για παράδειγμα:

  ~$ docker stop ubuntu_env

Start

Η εντολή αυτή ενεργοποιεί ένα σταματημένο container. Αυτό που πρέπει να σημειωθεί είναι ότι η εντολή αυτή δεν δημιουργεί κάποιο container, αλλά ενεργοποιεί ένα υπάρχον. Για αυτό το λόγο δεν πρέπει να δημιουργηθεί σύγχηση με την εντολή run που περιγράφηκε παραπάνω (η εντολή run κάθε φορά που εκτελείται δημιουργεί νέο container).

Η εντολή συντάσσεται ως:

  ~$ docker start <flags> <container>

Για παράδειγμα:

  ~$ docker start -i ubuntu_env

Rm

Η εντολή αυτή χρησιμοποιείται για τη διαγραφή ενός ή παραπάνω container. Συντάσσεται ως:

  ~$ docker rm <container>

Για παράδειγμα:

  ~$ docker rm ubuntu_env

Rmi

Η εντολή αυτή χρησιμοποιείται για τη διαγραφή ενός ή παραπάνω εικονικού πακέτου. Συντάσσεται ως:

  ~$ docker rmi <image package>

Για παράδειγμα:

  ~$ docker rmi ubuntu

Από τη Θεωρεία στην Πράξη

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

Εγκατάσταση του Ubuntu

Η εγκατάσταση του λειτουργικού περιβάλλοντος του Ubuntu περιγράφηκε και παραπάνω. Αρκεί να εκτελεστεί η εντολή:

  ~$ docker pull ubuntu

Με την εντολή αυτή θα πραγματοποιηθεί η εγκατάσταση της τελευταίας έκδοσης του λειτουργικού περιβάλλοντος Ubuntu. Για τη δημιουργία του container και την αλληλεπίδραση του χρήστη με το περιβάλλον του Ubuntu χρειάζεται να εκτελεστεί η εντολή:

 ~$ docker run -it --name ubuntu_container ubuntu

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

Εγκατάσταση της Python

Για την εγκατάσταση της python αρκεί να εκτελεστεί η εντολή:

 ~$ docker pull python

Η εντολή αυτή θα εγκαταστήσει την τελευταία έκδοση της python. Εάν κάποιος θέλει κάποια συγκεκριμένη έκδοση, όπως πχ τη 2.7.17 buster χρειάζεται να εκτελέσει την εντολή:

 ~$ docker pull python:2.7.17-buster

Στη συνέχεια για τη δημιουργία του container αντίστοιχα εκτελείται η εντολή:

 ~$ docker run --name python_container python