Constantine
3 years ago
1 changed files with 0 additions and 253 deletions
@ -1,253 +0,0 @@ |
|||||
= 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] |
|
||||
Το πρώτο σκέλος της εντολής θα ενημερώσει τα αποθετήρια του λειτουργικού |
|
||||
συστήματος και στην συνέχεια θα γίνει η εγκατάσταση των απαιτούμενων |
|
||||
πακέτων χωρίς την προτροπή επιβαιβέωσης. |
|
||||
|
|
Loading…
Reference in new issue