Πώς να χρησιμοποιήσετε το Docker (Μέρος 3 – Container)

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

Σε αυτό το μέρος, θα αρχίσουμε να χρησιμοποιούμε στιγμιότυπα Docker και θα δημιουργούμε Container με ένα web-based, προηγμένο προσωπικό σημειωματάριο που θα τρέχει σε DokuWiki ή το WordPress. Μπορείτε να επιλέξετε ό, τι σας εξυπηρετεί.

Πώς τρέχουμε ένα Docker Container

Πρώτα απ’ όλα πρέπει να σιγουρευτούμε ότι το Docker engine λειτουργεί σωστά, κατεβάζοντας ένα στιγμιότυπο «Hello world» και δημιουργώντας ένα Docker Container από αυτό.

Θυμηθείτε, όταν μιλάμε για ένα στιγμιότυπο (Docker Image), είναι η κατάσταση αναστολής, ενώ όταν μιλάμε για το Container είναι η εκτελέσιμη κατάσταση του στιγμιότυπου Docker. Σε μια αντίστοιχη αναλογία που μιλήσαμε σε προηγούμενο μέρος, ένα Docker Image είναι σαν το αρχείο ISO μιας διανομής Linux, ενώ το Docker Container είναι η Live συνεδρία του αρχείου ISO σαν να το χρησιμοποιούσατε από μια μονάδα USB.

Για να κατεβάσετε και να δημιουργήσετε ένα Container απο ένα  «Hello world» Docekr Image απλώς τρέξετε στο τερματικό:

sudo docker run hello-world

Αυτή η εντολή κατεβάζει το Docker Image του Hello World και το τρέχει σε ένα Container. Όταν το Container τρέξει, εκτυπώνει ένα ενημερωτικό μήνυμα και στη συνέχεια, εξέρχεται (σημαίνει ότι κλείνει).

doker-pos-xrisimopoioyme-docker-hello-world

Για να δούμε πόσα Docker Images έχουμε κατεβασμένα στο σύστημα μας, τρέχουμε:

sudo docker images

doker-pos-xrisimopoioyme-docker-images

Μετά απο αυτές τις πρώτες εντολές, είναι εύλογο να αναρωτηθείτε «πώς το σύστημα μου βρήκε αυτό το Docker Image του «Hello World» και από πού προήλθε»; Εδώ λοιπόν μπαίνει στο «παιχνίδι» το Docker Hub.

Εισαγωγή στο Docker Hub

Το Docker Hub είναι μια Cloud υπηρεσία και λειτουργεί ως ένα κεντρικό αποθετήριο για την εύρεση, την δημιουργία αλλά και την διανομή των Docker Images. Συγκεκριμένα, το Docker Hub παρέχει ορισμένα χρήσιμα χαρακτηριστικά και λειτουργίες, τα οποία θα συζητήσουμε περισσότερο σε επόμενα μέρη.

Επί του παρόντος, θα επικεντρωθούμε σε ένα μόνο χαρακτηριστικό και αυτό είναι η εύρεση και η λήψη ενός Docker Image.

Αναζήτηση ενός Docker Image

Μπορείτε να αναζητήσετε ένα «έτοιμο για λήψη και εκτέλεση Docker Image», επισκεπτόμενοι το online Docker Hub ή χρησιμοποιώντας το τερματικό. Σημειώστε ότι δεν μπορείτε να κατεβάσετε ένα Docker Image από την συγκεκριμένη ιστοσελίδα, αλλά μπορείτε να μάθετε περισσότερα για ένα Docker Image, όπως το πως έχει δημιουργηθεί, πως συντηρούνται κλπ.

Έτσι, για το σκοπό αυτού του μέρους, θα επικεντρωθούμε στη χρήση του τερματικού. Ας ψάξουμε για το WordPress:

sudo docker search wordpress

doker-pos-xrisimopoioyme-docker-search

Όπως μπορείτε να διαπιστώσετε και μόνοι σας, υπάρχουν πολλά  Docker Images για το WordPress, που είναι «χτισμένοι» με διάφορους συνδυασμούς (π.χ. με ή χωρίς την ενσωμάτωση της βάσης δεδομένων), βαθμολογούνται με αστέρια δημοτικότητας και είναι είτε επίσημα (συντηρημένα από την εταιρεία docker) είτε ανεπίσημα (χτισμένα από διάφορους χρήστες του Docker Hub).

Είναι προφανές ότι ο καθένας μπορεί να δημιουργήσει έναν λογαριασμό στον Docker Hub και να ανεβάσει το προσαρμοσμένο στις ανάγκες του Docker Image. Αυτό όμως θα το συζητήσουμε αργότερα.

Λήψη ενός Docker Image

Για το σκοπό αυτού του άρθρου, θα χρησιμοποιήσουμε την τελευταία έκδοση του Docker Image της εταιρείας bitnami. Ας το κατεβάσουμε:

sudo docker pull bitnami/wordpress:latest

Μόλις εκτελέσετε την παραπάνω εντολή, θα επικοινωνήσει με το Docker Hub, θα ρωτήσει εάν υπάρχει ένα αποθετήριο με όνομα «bitnami», έπειτα θα ρωτήσει εάν υπάρχει ένα «WordPress» Docker Image που έχει επισημανθεί ως η «πιο πρόσφατη» (latest) έκδοση και θα την κατεβάσει (pull).

doker-pos-xrisimopoioyme-docker-pull

Επί του παρόντος, έχουμε κατεβάσει ένα Docker Image του WordPress και τίποτα άλλο. Μπορούμε να προχωρήσουμε και να κάνουμε λήψη και ενός Docker Image του DokuWiki, αναζητώντας μία έκδοση από το Docker Hub και επιλέγοντας αυτή που μας αρέσει. Εναλλακτικά μπορείτε να χρησιμοποιήσετε την εξής:

sudo docker pull mprasil/dokuwiki

Διαγραφή ενός Docker Image

Τώρα αν ελέγξετε πόσα Docker Image έχετε στο σύστημά σας

sudo docker images

Θα δείτε τα WordPress, DokuWiki και το Hello World. Εάν για οποιονδήποτε λόγο θέλετε να αφαιρέσετε και να διαγράψετε (rmi) ένα από τα Docker Image πληκτρολογείτε απλά:

sudo docker rmi <όνομα docker image>

Όπου το όνομα Docker Image είναι το όνομα του όπως εμφανίζεται με την εντολή » docker images». Για παράδειγμα, αν θέλουμε να διαγράψουμε το Hello World μπορούμε απλά να πληκτρολογήσουμε:

sudo docker rmi hello-world

Η αρχιτεκτονική του Docker Image

Αν παρατηρήσατε προσεκτικά, κατά την διαδικασία λήψης ενός Docker Image, μπορείτε να δείτε είναι στην πραγματικότητα πολλαπλών επιπέδων Image η οποία στηρίζεται πάνω σε ένα βασικό Docker Image. Μπορείτε να δείτε κάθε στρώμα που κατεβαίνει και στη συνέχεια με έναν «μαγικό» τρόπο ενοποιείται. Το παρακάτω διάγραμμα δείχνει Docker Image που έχει ως βάση το Ubuntu που περιλαμβάνει 4 στρώματα-στοιβάδες Image.

doker-pos-xrisimopoioyme-docker-architecture

Όπως μπορείτε να φανταστείτε, κάθε Docker Image αποτελείται από μια στοιβάδα με στρώματα τα οποία είναι μόνο για ανάγνωση (δεν τροποποιούνται) που αντιπροσωπεύουν διαφορές στο σύστημα αρχείων. Όταν δημιουργείτε ένα νέο Container, από κάποιο Docker Image, προσθέτετε ένα νέο, εγγράψιμο στρώμα πάνω από την υποκείμενη στοιβάδα. Όλες οι αλλαγές που έγιναν στο Container που «τρέχει» όπως π.χ. η εγγραφή νέων αρχείων, η τροποποίηση των υπαρχόντων αρχείων και η διαγραφή αρχείων,  γράφονται σε αυτό το λεπτό εγγράψιμο στρώμα.

doker-pos-xrisimopoioyme-docker-architecture-layers

Τα Docker Container είναι εφήμερα

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

Επομένως, θα πρέπει να έχετε κατά νου ότι όταν θα δημιουργήσουμε ένα Container από το Docker Image της προτίμησής σας (WordPress ή DokuWiki), τυχόν αλλαγές που θα κάνετε, π.χ. προσθήκη μιας ανάρτησης, εικόνα κλπ, θα χαθούν μόλις σταματήσετε ή διαγράψετε το Container. Με άλλα λόγια, όταν διαγράφεται ένα Container, όλα τα δεδομένα που έχουν γραφτεί αλλά δεν είναι αποθηκευμένα σε έναν Data Volume (τόμος δεδομένων), διαγράφονται μαζί με το δοχείο.

Ένας τόμος δεδομένων (κάτι σαν αποθηκευτικό μέσον) είναι ένας κατάλογος ή ένα αρχείο στο σύστημα αρχείων του λειτουργικού συστήματος και είναι προσαρτημένο σαν συσκευή αποθήκευση στο Docker Container. Με αυτόν τον τρόπο μπορείτε να αντικαταστήσετε το Container με ένα νέο και να διατηρήσετε όλα τα δεδομένα ασφαλή. Σημειώστε ότι μπορείτε να προσαρτήσετε σε ένα Container όσους τομείς δεδομένων (Data Volumes) επιθυμείτε. Επίσης πολλά Container μπορούν να μοιράζονται έναν ή περισσότερα Data Volumes.

Το παρακάτω διάγραμμα δείχνει έναν κεντρικό υπολογιστή που τρέχει το Docker (π.χ. το Ubuntu 16.04) το οποίο έχει «στήσει» δύο Containers. Όπως βλέπετε, υπάρχει επίσης ένα κοινό Data Volume το οποίο βρίσκεται στην διαδρομή /data του λειτουργικού (π.χ. το Ubuntu 16.04) που τρέχει το Docker.  Αυτό το Data Volume έχει προσαρτηθεί (mounted) απευθείας και στα δύο Container.

doker-pos-xrisimopoioyme-docker-datavolume

Με αυτόν τον τρόπο, όταν διαγράφεται ένα κοντέινερ, τα δεδομένα που αποθηκεύονται στα Data Volume εξακολουθούν να υπάρχουν στο λειτουργικό σύστημα που εκτελείται η υπηρεσία Docker και μπορούν να γίνουν mount σε ένα νέο Container. Για να μάθετε περισσότερα σχετικά με τα Data Volumes δείτε στην επίσημη τεκμηρίωση https://docs.docker.com/engine/tutorials/dockervolumes/

Δικτύωση των Docker Container

Όταν εγκαταστήσαμε το Docker, αυτό δημιούργησε μια συσκευή δικτύου στο σύστημά σας. Μπορείτε να το δείτε χρησιμοποιώντας την εντολή ifconfig στο τερματικό σας (θα ονομάζεται docker0).

Είναι σημαντικό να κατανοήσουμε ότι τα Docker Container είναι απομονωμένα απο το υποκείμενο λειτουργικό σύστημα και ουσιαστικά  είναι μεμονωμένες μικρο-υπηρεσίες που έχουν τις δικές τους ιδιότητες δικτύου. Ο τρόπος με τον οποίο επικοινωνούμε με αυτά είναι με την «προσάρτηση» του Port στο οποίο εκθέτει την εκάστοτε υπηρεσία του Container με ένα Port του λειτουργικού μας συστήματος.

Με αυτόν τον τρόπο μπορούμε να εκθέσουμε την υπηρεσία (π.χ. το WordPress) που τρέχει ένα Container ώστε να είναι προσβάσιμο από το λειτουργικό μας σύστημα.

Δημιουργία ενός προσωπικού σημειωματάριου με ένα WordPress Container

Πριν ξεκινήσουμε, θα κατεβάσουμε ένα εργαλείο που ονομάζεται Docker Compose το οποίο μας γλυτώνει από την ταλαιπωρία να στήνουμε με το χέρι πολλαπλά Container για να τρέξουμε μια υπηρεσία.  Με το Docker Compose απλά χρησιμοποιούμε μια έτοιμη «συνταγή», γραμμένη σε YAML η οποία κάνει όλη την δουλειά αυτοματοποιημένα.

wget https://github.com/docker/compose/releases/download/1.13.0/run.sh
sudo mv run.sh  /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

ΣΗΜΕΙΩΣΗ: η έκδοση του Docker Compose είναι πολύ σημαντική. Πάντα να ελέγχετε στο https://github.com/docker/compose/releases για νεες εκδόσεις και να αντικαθιστάτε τον αριθμό 1.13.0 με την τρέχουσα σταθερή έκδοση.

Ας δημιουργήσουμε λοιπόν το σημειωματάριό μας χρησιμοποιώντας το Docker Compose της Bitnami με το οποίο θα δημιουργηθούν 2 Containers, ένα για την βάση δεδομένων MariaDB και ένα του WordPress:

curl -LO https://raw.githubusercontent.com/bitnami/bitnami-docker-wordpress/master/docker-compose.yml
sudo docker-compose up

 

Αφού γίνει η προετοιμασία του Container, θα δείτε στο τερματικό σας κάποιες πληροφορίες σχετικά με αυτό. Ήρθε η ώρα να ξεκινήσετε το browser σας και να το πάτε στην διεύθυνση στο http://localhost

doker-pos-xrisimopoioyme-docker-compose

Αν όλα πάνε καλά, θα δείτε τον προεπιλεγμένο ιστότοπο του WordPress

Ας επιστρέψουμε στο τερματικό όπου τρέχει το Container. Όπως βλέπετε, το τερματικό σας είναι τώρα συνδεδεμένο με το τρέχον Container. Μπορείτε να χρησιμοποιήσετε το Ctrl + C για έξοδο το οποίο θα σταματήσει επίσης και το Container του WordPress αλλά και της βάσης δεδομένων.

Τώρα, ελέγξτε τα διαθέσιμα Container σας με την ακόλουθη εντολή:

sudo docker ps -a

Όπως μπορείτε να δείτε από το αποτέλεσμα της παραπάνω εντολής, υπάρχουν μερικές σημαντικές πληροφορίες όπως το όνομα του Container και το μοναδικό αναγνωριστικό του (Container ID). Με αυτόν τον τρόπο μπορούμε να ξεκινήσουμε ξανά τα Container μας:

sudo docker start <onoma container wordpress> <onoma container mariadb>

Στην συνέχεια μπορείτε με την παρακάτω εντολή να ελέγξετε τις διεργασίες που τρέχει ένα Container:

sudo docker top <onoma Container>
Αν θέλετε να σταματήσετε κάποιο Container απλά εκτελείτε:
sudo docker stop <onoma Container>
Μπορείτε να διαβάσετε περισσότερα σχετικά με τον τρόπο αλληλεπίδρασης σας με τα Container στην επίσημη τεκμηρίωση Docker https://docs.docker.com/engine/userguide/

Που βρίσκονται τα Docker Container

Αν θέλετε να δείτε πού βρίσκονται τα δοχεία στο σύστημα αρχείων hosts τότε μπορείτε να μεταβείτε στο /var/lib/docker
sudo -i
cd /var/lib/docker/
ls
cd containers

Δημιουργία προσωπικού σημειωματάριου με DokuWiki Container

Αν θέλετε κάτι πιο απλό σε σημειωματάριο τότε συνιστώ την χρήση του DokuWiki. Όπως έχουμε κατεβάσει προηγουμένως το Docker Image του, το μόνο που μένει να γίνει είναι να δημιουργηθεί ένα Container από αυτό.
 sudo docker run -d -p 80:80 --name my_wiki mprasil/dokuwiki
Με την παραπάνω εντολή είπαμε στην υπηρεσία Docker :
  • να δημιουργήσει συνδέσει τα port 80 (Http) του συστήματος με του Container
  • το Container να ονομάζεται my_wiki
  • και να χρησιμοποιηθεί το Docker Image mprasil/dokuwiki[/code]

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

http://localhost/install.php

Μπορείτε να μάθετε περισσότερα για το DokuWiki από την επίσημη τεκμηρίωση και να προσαρμόσετε το wiki για τις ανάγκες σας: https://www.dokuwiki.org/manual

Διαγραφή ενός Docker Container

Μόλις είστε έτοιμοι να δημιουργήσετε, να ξεκινήσετε και να σταματήσετε τα Container σας, θα θέλετε να καθαρίσετε το χάος των δοκιμών που δημιουργήθηκε από τα πολλαπλά Container.

Για να διαγράψετε ένα Container, θα πρέπει πρώτα να το σταματήσετε και στη συνέχεια να τον διαγράψετε εκτελώντας την ακόλουθη εντολή:

sudo docker rm <όνομα του Container ή ID>

Μπορείτε επίσης να προσθέσετε πολλαπλά ID στην ίδια εντολή ‘docker rm’ για να διαγράψετε ταυτόχρονα πολλά Docker Container.

Επίλογος

Σε αυτό το μέρος, μάθαμε πώς να δημιουργήσουμε ένα Container και να το χρησιμοποιήσουμε με έναν πρακτικό τρόπο για να δημιουργήσουμε ένα προσωπικό σημειωματάριο με βάση είτε το WordPress είτε το DokuWiki. Εξετάσαμε κάποιες βασικές εντολές σχετικά με τον τρόπο εκκίνησης και τερματισμού των Container και πώς να διαγράψουμε τα Docker Images και τα Docker Container.

Στο επόμενο μέρος, θα ρίξουμε μια ματιά στο πώς δημιουργούνται τα Docker Images δημιουργώντας ένα δικό μας.

Όσοι ενδιαφέρεστε μπορείτε :

Εγγραφείτε στο Newsletter του Cerebrux.net για να λαμβάνετε ειδοποίηση για νέα άρθρα

Advertisements

Απορίες, παρατηρήσεις, ιδέες... Ελεύθερα ! Πες την άποψή σου... έστω και Ανώνυμα:

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s