After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 122 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 231 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 220 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 128 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 575 KiB |
After Width: | Height: | Size: 187 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 68 KiB |
@ -0,0 +1,253 @@ |
|||||
|
= Docker Intro |
||||
|
Docker |
||||
|
:idprefix: |
||||
|
:idseparator: - |
||||
|
:!example-caption: |
||||
|
:!table-caption: |
||||
|
:page-pagination: |
||||
|
:experimental: |
||||
|
|
||||
|
== Docker Engine ή Docker |
||||
|
=== Τι είναι το docker. |
||||
|
[.text-justify] |
||||
|
To Docker είναι μια πλατφόρμα λογισμικού ανοιχτού κώδικα που υλοποιεί |
||||
|
εικονικοποίηση (virtualization) σε επίπεδο λειτουργικού Συστήματος. |
||||
|
Ουσιαστικά το Docker προσφέρει την δυνατότητα της άμεσης ανάπτυξης |
||||
|
εφαρμογών στα Container του χωρίς την ανάγκη εγκατάστασης αυτών στον |
||||
|
υπολογιστή μας. Το Docker χρησιμοποιεί στοιχεία από το λειτουργικό |
||||
|
σύστημα που είναι εγκατεστημένο. Λειτουργεί ως μία υπηρεσία στον |
||||
|
υπολογιστή μας που χρησιμοποιεί πόρους μόνο όταν τους χρειάζεται αρκεί |
||||
|
να τρέχει σε λειτουργικό σύστημα Linux. Αυτή είναι και μία από τις |
||||
|
μεγαλύτερες διαφορές του με μία εικονική μηχανή (virtual machine) που |
||||
|
δεσμεύει μόνιμα πόρους ανεξάρτητα από το ποσοστό λειτουργίας της (εικόνα |
||||
|
2). Προσφέρει και αυτό πλήρη απομόνωση μεταξύ των εφαρμογών που υπάρχουν |
||||
|
στα Container εξασφαλίζοντας έτσι ασφάλεια παρόμοια με αυτή των |
||||
|
συμβατικών εικονικών μηχανών. |
||||
|
|
||||
|
[.text-center] |
||||
|
.Docker vs Virtual Machine |
||||
|
image::intro:docker_various_os2.png[] |
||||
|
|
||||
|
==== Container. |
||||
|
[.text-justify] |
||||
|
Το Container είναι είναι ένα πακέτο λογισμικού που προέρχονται από |
||||
|
Docker images και σε συνδυασμό με ρυθμίσεις που κάνει ο προγραμματιστής |
||||
|
δημιουργείται ένα Container |
||||
|
|
||||
|
==== _Docker Images_ |
||||
|
[.text-justify] |
||||
|
Τα Docker images είναι έτοιμα Container ή βάσεις για να δημιουργήσουμε |
||||
|
τα δικά μας containers και υπάρχει μεγάλη ποικιλία τους στο διαδίκτυο. Ο |
||||
|
επίσημος χώρος αποθήκευσης των Docker images είναι το https://hub.docker.com/[Docker hub] |
||||
|
αλλά υπάρχουν και πολλά άλλα ανεπίσημα, αυτοί οι χώροι αποθήκευσης των images |
||||
|
ονομάζονται Docker registries. |
||||
|
[.text-justify] |
||||
|
Όταν ο προγραμματιστής εκτελέσει την εντολή δημιουργίας Container, το |
||||
|
Docker θα αναζητήσει το image πρώτα τοπικά στον υπολογιστή που |
||||
|
εκτελείται εάν υπάρχει, εάν δεν το βρει θα το αναζητήσει στο registry |
||||
|
που έχουμε δηλώσει, το Docker Hub είναι το προκαθορισμένο registry του |
||||
|
Docker κατά την εγκατάσταση του. Τέλος αφού βρεθεί με επιτυχία το image |
||||
|
που αναζητήθηκε θα το κατεβάσει από το registry στον υπολογιστή μας και |
||||
|
θα δημιουργήσει το Container (εικόνα 3). |
||||
|
|
||||
|
[.text-center] |
||||
|
.Διαδικασία Δημιουργίας Container |
||||
|
image::intro:small_container_creation2.png[700,700] |
||||
|
|
||||
|
[.text-justify] |
||||
|
Το Docker δίνει την δυνατότητα να κατεβούν από το registry τοπικά στον |
||||
|
υπολογιστή images χωρίς την δημιουργία Container (Docker pull), αλλά και |
||||
|
να ανεβούν στο registry τροποποιημένα από προγραμματιστές images (Docker |
||||
|
push). |
||||
|
|
||||
|
=== Εγκατάσταση Docker |
||||
|
[.text-justify] |
||||
|
Χρησιμοποιώντας κάποιο πρόγραμμα που επιτρέπει συνδέσεις μέσω |
||||
|
πρωτοκόλλου SSH εγκαθιδρύουμε μία σύνδεση με το Raspberry. |
||||
|
[.text-justify] |
||||
|
Αφού γίνει η σύνδεση και πριν ξεκινήσει η διαδικασία εγκατάστασης του |
||||
|
Docker πρέπει να πληκτρολογηθεί παρακάτω εντολή για ενημέρωση του |
||||
|
συστήματος: |
||||
|
|
||||
|
sudo apt-get update && sudo apt-get -y upgrade |
||||
|
|
||||
|
[.text-justify] |
||||
|
Με την ολοκλήρωση της διαδικασίας εκτελούμε την ακόλουθη εντολή ώστε να |
||||
|
γίνει η λήψη από την επίσημη ιστοσελίδα το αυτοματοποιημένο script |
||||
|
εγκατάστασης του Docker. |
||||
|
|
||||
|
curl -fsSL https://get.docker.com -o get-docker.sh |
||||
|
|
||||
|
Στην συνέχεια εκτελούμε το script. |
||||
|
|
||||
|
sudo sh get-docker.sh |
||||
|
|
||||
|
[.text-justify] |
||||
|
και με την ολοκλήρωση του θα μας εμφανίσει την έκδοση Docker που |
||||
|
εγκατέστησε και θα μας προτείνει να εισάγουμε τον χρήστη στην ομάδα του |
||||
|
Docker ώστε να μην είναι αναγκαία η χρήση του SUDO για την χρήση του |
||||
|
Docker (εικόνα: 4). |
||||
|
|
||||
|
[.text-center] |
||||
|
.Ολοκλήρωση εγκατάστασης Docker |
||||
|
image::intro:docker_install2.png[] |
||||
|
|
||||
|
Για την πρόσθεση του χρήση στην ομάδα του Docker πληκτρολογούμε. |
||||
|
|
||||
|
sudo usermod -aG docker username |
||||
|
|
||||
|
[.text-justify] |
||||
|
Σε αυτό το σημείο πρέπει να γίνει αποσύνδεση και επανασύνδεση από το |
||||
|
σύστημα ώστε να γίνει οι φόρτωση των αναγκαίων μεταβλητών συστήματος για |
||||
|
την χρήση του Docker. Ένας άλλος τρόπος για να αποφευχθεί η διαδικασία |
||||
|
αυτή είναι να πληκτρολογήσουμε |
||||
|
|
||||
|
su username |
||||
|
|
||||
|
exit |
||||
|
|
||||
|
[.text-justify] |
||||
|
με αυτόν τον τρόπο αναγκάζουμε το σύστημα να φορτώσει εκ νέου τις |
||||
|
μεταβλητές χωρίς την ανάγκη να κλείσουμε και να εγκαθιδρύσουμε την |
||||
|
σύνδεση με το Raspberry εκ νέου. |
||||
|
|
||||
|
==== Δοκιμή λειτουργίας |
||||
|
[.text-justify] |
||||
|
Για την δοκιμή της εγκατάστασης ως προς την λειτουργικότητα της θα |
||||
|
εκτελέσουμε την πρώτη μας εντολή που συσχετίζεται με το Docker που είναι |
||||
|
η δημιουργία ενός δοκιμαστικού Container με το όνομα Hello-World. |
||||
|
|
||||
|
docker run hello-world |
||||
|
|
||||
|
[.text-center] |
||||
|
.Δοκιμαστικό Container Hello World |
||||
|
image::intro:docker_hello-world2.png[] |
||||
|
|
||||
|
[.text-justify] |
||||
|
Όπως βλέπουμε στην γραμμή 2 το Docker αναζήτησε το image τοπικά και αφού |
||||
|
δεν το βρήκε συνέχισε την αναζήτηση του στο προεπιλεγμένο registry |
||||
|
(Docker Hub), όπου και αναζήτησε εκεί πλέον το image με το όνομα που |
||||
|
αυτό, το κατέβασε στο Raspberry και δημιούργησε ένα Container όπου και |
||||
|
το εκτέλεσε. Στην οθόνη βλέπουμε τα αποτελέσματα των προκαθορισμένων |
||||
|
ρυθμίσεων του image. Όπως βλέπουμε στην εικόνα: 5 η εκτέλεση του |
||||
|
Container μας εμφανίζει τα βασικά βήματα που ακολουθήθηκαν 1-4, από την |
||||
|
στιγμή που πληκτρολογήσαμε την εντολή μέχρι την εμφάνιση του μηνύματος . |
||||
|
|
||||
|
==== Λήψη image |
||||
|
[.text-justify] |
||||
|
Στην συνέχεια για τις ανάγκες μας θα χρειαστούμε να κατεβάσουμε ένα |
||||
|
image από από το repository του λειτουργικού συστήματος Ubuntu 16.04 |
||||
|
server. |
||||
|
|
||||
|
docker pull ubuntu:16.04 |
||||
|
|
||||
|
[.text-center] |
||||
|
.Λήψη του Ubuntu Image |
||||
|
image::intro:ubuntu_pull2.png[] |
||||
|
|
||||
|
[.text-justify] |
||||
|
Με την ολοκλήρωση του μπορούμε να επιβεβαιώσουμε ότι το image βρίσκεται |
||||
|
τοπικά στον υπολογιστή μας με την εντολή |
||||
|
|
||||
|
docker images |
||||
|
|
||||
|
[.text-justify] |
||||
|
Βλέπουμε το image με όνομα Ubuntu και με ετικέτα 16.04 βρίσκεται στην |
||||
|
κορυφή της λίστας μας (εικόνα: 7). Η εμφάνιση από τα image γίνεται πάντα |
||||
|
από το νεότερο προς το παλαιότερο. |
||||
|
|
||||
|
[.text-center] |
||||
|
.Προβολή όλων των Images στο σύστημα |
||||
|
image::intro:docker_images2_2.png[] |
||||
|
|
||||
|
==== Δημιουργία container_ |
||||
|
|
||||
|
[.text-justify] |
||||
|
Μετά από την λήψη του image η δημιουργία του Container θα γίνει με την |
||||
|
παρακάτω εντολή |
||||
|
|
||||
|
docker run -it -d ubuntu:16.04 |
||||
|
|
||||
|
[.text-justify] |
||||
|
Με την εισαγωγή του -i το Docker θα κρατήσει την δυνατότητα εισόδου |
||||
|
εντολών στο Container ανοιχτή ακόμα και εάν δεν γίνει άμεση σύνδεση σε |
||||
|
αυτό, το -t ενεργοποιεί μία κονσόλα τερματικού στο Container και το -d |
||||
|
δηλώνει την λειτουργία του Container παραμείνει στο παρασκήνιο, το |
||||
|
ubuntu:16.04 είναι το όνομα που έχει το image απ’ όπου θέλουμε να |
||||
|
δημιουργήσουμε το Container. Για να δούμε τα Container που είναι ενεργά |
||||
|
και τρέχουν στον υπολογιστή μας πληκτρολογώντας την εντολή |
||||
|
|
||||
|
docker ps |
||||
|
|
||||
|
[.text-center] |
||||
|
.Εμφάνιση ενεργών Container |
||||
|
image::intro:docker_ps2.png[] |
||||
|
|
||||
|
[.text-justify] |
||||
|
Όπως βλέπουμε και στην εικόνα: 8 η εντολή μας δίνει διάφορες πληροφορίες |
||||
|
για τα Container που είναι ενεργά στον υπολογιστή μας. Το πεδίο |
||||
|
Container ID είναι το μοναδικό αναγνωριστικό του Container, το πεδίο |
||||
|
IMAGE δηλώνει σε ποιο image είναι βασισμένο, το πεδίο COMMAND είναι η |
||||
|
εντολή/εντολές που θα εκτελεστούν κατά την έναρξη του Container, το |
||||
|
πεδίο CREATED πότε δημιουργήθηκε το Container, το πεδίο STATUS ποια από |
||||
|
τις 7 πιθανές καταστάσεις βρίσκεται ( created, restarting, running, |
||||
|
removing, paused, exited, dead), Το πεδίο PORTS δείχνει ποια/ποιες θύρες |
||||
|
του υπολογιστή μας έχουμε δεσμεύσει και αντιστοιχίσει με |
||||
|
αντίστοιχη/αντίστοιχες θύρες στο Container και τέλος το πεδίο NAME μας |
||||
|
δείχνει το τυχαίο όνομα που έδωσε το docker όνομα στο Container που |
||||
|
δημιουργήθηκε. |
||||
|
|
||||
|
==== Δημιουργία Container με αντιστοίχηση θύρας και απόδοση ονόματος _ |
||||
|
[.text-justify] |
||||
|
Για την δημιουργία ενός Container με αντιστοίχηση θύρας και δικός όνομα |
||||
|
θα πρέπει να συμπληρώσουμε στην προηγούμενη εντολή μας μερικά πεδία |
||||
|
ακόμα, -p θύρα_υπολογιστή:θύρα_container, --name=όνομα_επιλογής, έτσι η |
||||
|
εντολή θα διαμορφωθεί ως εξής. |
||||
|
|
||||
|
docker run -it -d -p 2000:22 –name=Server ubuntu:16.04 |
||||
|
|
||||
|
docker ps (εικόνα: 9). |
||||
|
[.text-center] |
||||
|
.Αντιστοίχιση θυρών ονοματοδοσία Container |
||||
|
image::intro:named_container_asigned_ports2.png[] |
||||
|
|
||||
|
[.text-justify] |
||||
|
Όπως βλέπουμε στην εικόνα: 9 δημιουργήθηκε ένα καινούργιο Container με |
||||
|
το όνομα Server και με την θύρα 2000 του υπολογιστή μας να αντιστοιχεί |
||||
|
στην θύρα 22 του Container. Η επιλογή των θυρών μπορεί να είναι |
||||
|
οποιαδήποτε ανάλογα με τις ανάγκες μας. |
||||
|
|
||||
|
=== Είσοδος στο Container |
||||
|
[.text-justify] |
||||
|
Αφού δημιουργήσαμε το Container μας πρέπει να συνδεθούμε σε αυτό για να |
||||
|
κάνουμε περαιτέρω ρυθμίσεις. Το image απ’ όπου δημιουργήθηκε το |
||||
|
Container μας δεν είναι έκδοση Ubuntu Server αλλά ούτε και Ubuntu |
||||
|
Desktop, δεν υπάρχουν σαν εκδόσεις στο Docker Hub είναι μόνο τα βασικά |
||||
|
στοιχεία και προγράμματα του λειτουργικού Ubuntu. Η σύνδεση στο |
||||
|
Container θα πραγματοποιηθεί με την παρακάτω εντολή |
||||
|
|
||||
|
docker exec -it Server /bin/bash |
||||
|
|
||||
|
[.text-justify] |
||||
|
Στην παραπάνω εντολή το όνομα του Container μπορεί να αντικατασταθεί με |
||||
|
το Container ID που βλέπουμε στην εκτέλεση της εντολής docker ps |
||||
|
|
||||
|
[.text-justify] |
||||
|
Με την εκτέλεση της εντολής θα επιστραφεί γραμμή εντολών μέσα από το |
||||
|
Container πλέον και η μορφή της θα είναι |
||||
|
root@fac448014031 (εικόνα: 10). |
||||
|
|
||||
|
[.text-center] |
||||
|
.Γραμμή εντολώ μέσα απο το Container |
||||
|
image::intro:command_line_container.png[] |
||||
|
|
||||
|
[.text-justify] |
||||
|
Εκτελούμε την εντολή |
||||
|
|
||||
|
apt-get update && sudo apt-get -y upgrade |
||||
|
|
||||
|
[.text-justify] |
||||
|
Το πρώτο σκέλος της εντολής θα ενημερώσει τα αποθετήρια του λειτουργικού |
||||
|
συστήματος και στην συνέχεια θα γίνει η εγκατάσταση των απαιτούμενων |
||||
|
πακέτων χωρίς την προτροπή επιβαιβέωσης. |
||||
|
|