Τι είναι το Docker Container; - Περιέχετε την εφαρμογή σας χρησιμοποιώντας το Docker

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

Λοιπόν, ελπίζω να έχετε διαβάσει τα προηγούμενα ιστολόγιά μου Λιμενεργάτης όπου έχω καλύψει τα βασικά του Docker. Εδώ, σε αυτό το blog του Docker Container θα συζητήσω για το τι είναι το Docker Containers και πώς λειτουργεί. Κυρίως, θα επικεντρωθούμε στις περιπτώσεις Hands-on και χρήσης του Docker.



Έχω παραθέσει τα θέματα για αυτό το blog Docker Container:



  • Γιατί χρειαζόμαστε κοντέινερ Docker;
  • Πώς λειτουργούν τα κοντέινερ Docker;
  • Χρήση-Θήκες του Docker Container

Γιατί χρειαζόμαστε κοντέινερ Docker;

Το θυμάμαι ακόμα σωστά, δούλευα σε ένα έργο. Σε αυτό το έργο ακολουθούσαμε την αρχιτεκτονική της μικρο-υπηρεσίας. Για όσους από εσάς δεν γνωρίζετε τι είναι η μικροϋπηρεσία, μην ανησυχείτε, θα σας δώσω μια εισαγωγή σε αυτό.

Η ιδέα πίσω από τις μικροϋπηρεσίες είναι ότι ορισμένοι τύποι εφαρμογών γίνονται ευκολότερα στην κατασκευή και τη συντήρηση όταν χωρίζονται σε μικρότερα, συνθέσιμα κομμάτια που συνεργάζονται. Κάθε στοιχείο αναπτύσσεται χωριστά και η εφαρμογή είναι τότε απλώς το άθροισμα των συστατικών του στοιχείων.



Εξετάστε το παρακάτω παράδειγμα:

Εφαρμογή διαδικτυακών αγορών - Docker Container - Edureka

πώς να φτιάξετε μια σειρά αντικειμένων στην Java

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



Λοιπόν, αυτή η αρχιτεκτονική έχει πολλά οφέλη:

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

Υπάρχουν επίσης πολλά άλλα οφέλη, δεν θα αναφερθώ σε πολλές λεπτομέρειες σχετικά με τις μικροϋπηρεσίες σε αυτήν την ανάρτηση. Όμως, σύντομα θα έρθω με μερικά blogs σε μικροϋπηρεσίες επίσης.

Σε αυτήν την αρχιτεκτονική, χρησιμοποιούσαμε το CentOS Virtual Machines. Αυτές οι εικονικές μηχανές διαμορφώθηκαν γράφοντας μεγάλα σενάρια. Λοιπόν, η διαμόρφωση αυτών των VM δεν ήταν το μόνο πρόβλημα.

Η ανάπτυξη τέτοιων εφαρμογών απαιτεί την εκκίνηση πολλών μικροϋπηρεσιών σε ένα μηχάνημα. Έτσι, εάν ξεκινάτε πέντε από αυτές τις υπηρεσίες, χρειάζεστε πέντε VM σε αυτό το μηχάνημα. Εξετάστε το παρακάτω διάγραμμα:

Το άλλο πρόβλημα είναι πολύ κοινό, ξέρω ότι πολλοί από εσάς μπορείτε να το συσχετίσετε. Η εφαρμογή λειτουργεί σε φορητό υπολογιστή προγραμματιστή αλλά όχι σε δοκιμές ή παραγωγή. Αυτό μπορεί να οφείλεται στο ότι δεν διατηρούμε ένα συνεπές περιβάλλον υπολογιστών. Εξετάστε το παρακάτω διάγραμμα:

Υπήρχαν και πολλά άλλα προβλήματα εκτός από αυτό, αλλά πιστεύω ότι αυτά τα προβλήματα είναι αρκετά για να σας εξηγήσω την ανάγκη των Docker Containers.

Μάθετε πώς τα κοντέινερ Docker είναι καλύτερα από τα εικονικά μηχανήματα

Φανταστείτε λοιπόν αν δίνω 8 GB μνήμης RAM σε όλες τις VM μου και έχω 5 μικροϋπηρεσίες σε διαφορετικές εικονικές μηχανές. Σε αυτήν την περίπτωση, αυτά τα VM θα απαιτούν 40 GB μνήμης RAM. Λοιπόν, τώρα χρειάζομαι τις διαμορφώσεις του κεντρικού υπολογιστή μου να είναι πολύ υψηλές, σχεδόν 44 GB μνήμης RAM θα ​​πρέπει να υπάρχουν εκεί στον κεντρικό υπολογιστή μου. Προφανώς, αυτή δεν είναι μια βιώσιμη λύση για μια τέτοια αρχιτεκτονική γιατί, σπαταλώ πολλούς πόρους εδώ.

Ωραία, έχω πολλούς πόρους για σπατάλη, αλλά εξακολουθώ να έχω πρόβλημα ασυνέπειας στον κύκλο ζωής παράδοσης λογισμικού (SDLC). Πρέπει να διαμορφώσω αυτά τα VM τόσο σε δοκιμή όσο και σε περιβάλλον παραγωγής. Κάπου σε αυτήν τη διαδικασία, κάποιο λογισμικό δεν ενημερώθηκε στον δοκιμαστικό διακομιστή και η ομάδα Dev χρησιμοποιεί την ενημερωμένη έκδοση του λογισμικού. Αυτό οδηγεί σε συγκρούσεις.

Τι γίνεται αν χρησιμοποιώ 100 VM, τότε η διαμόρφωση κάθε VM θα διαρκέσει πολύ χρόνο, και ταυτόχρονα είναι επιρρεπές σε σφάλματα.

Τώρα, ας καταλάβουμε τι είναι το Docker Container και πώς λειτουργεί και πώς έλυσε το πρόβλημά μου.

Τι είναι το Docker Container;

Το Docker είναι ένα εργαλείο σχεδιασμένο για να διευκολύνει τη δημιουργία, ανάπτυξη και εκτέλεση εφαρμογών χρησιμοποιώντας κοντέινερ.

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

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

Ας καταλάβουμε τώρα, πώς λειτουργεί ένα Docker Container.

Πώς λειτουργεί ένα κοντέινερ Docker;

Το παρακάτω διάγραμμα είναι βασικά, ένας τρόπος χρήσης του Docker. Και υποθέτω ότι έχετε μια ιδέα για το Docker Image και το Dockerfile.

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

  • Ένας προγραμματιστής θα γράψει πρώτα τον κώδικα του έργου σε ένα αρχείο Docker και έπειτα θα δημιουργήσει μια εικόνα από αυτό το αρχείο.
  • Αυτή η εικόνα θα περιέχει ολόκληρο τον κωδικό έργου.
  • Τώρα, μπορείτε να εκτελέσετε αυτήν την εικόνα Docker για να δημιουργήσετε όσα κοντέινερ θέλετε.
  • Αυτή η εικόνα Docker μπορεί να μεταφορτωθεί στο Docker hub (Είναι βασικά ένα αποθετήριο cloud για τις εικόνες Docker, μπορείτε να το κρατήσετε δημόσιο ή ιδιωτικό).
  • Αυτή η εικόνα Docker στο κέντρο Docker μπορεί να τραβηχτεί από άλλες ομάδες, όπως η QA ή η Prod.

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

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

Ακολουθεί η εξήγηση του διαγράμματος:

  • Πρώτον, γράψαμε τις περίπλοκες απαιτήσεις σε ένα Dockerfile.
  • Στη συνέχεια, το σπρώξαμε στο GitHub.
  • Μετά από αυτό χρησιμοποιήσαμε έναν διακομιστή CI (Jenkins).
  • Αυτός ο διακομιστής της Jenkins θα τον τραβήξει από το Git και θα δημιουργήσει το ακριβές περιβάλλον. Αυτό θα χρησιμοποιηθεί τόσο στους διακομιστές παραγωγής όσο και στους διακομιστές δοκιμών.
  • Το αναπτύξαμε σε στάδια (αναφέρεται στην ανάπτυξη του λογισμικού σας σε διακομιστές για δοκιμαστικούς σκοπούς, πριν από την πλήρη ανάπτυξη τους σε περιβάλλοντα).
  • Βασικά, κυλήσαμε ακριβώς αυτό που είχαμε στην ανάπτυξη, τη δοκιμή και τη σταδιοποίηση στην παραγωγή.

Θα είναι πραγματικά δίκαιο να πούμε ότι, ο Ντόκερ έκανε τη ζωή μου εύκολη.

διαφορά μεταξύ κλάσης και διεπαφής στο java

Λοιπόν, αυτή ήταν η ιστορία της εταιρείας μου, ας δούμε τη μελέτη περίπτωσης του Πανεπιστημίου της Ιντιάνα. Πώς ο Docker έλυσε τα προβλήματά τους.

Μελέτη περίπτωσης Πανεπιστημίου της Ιντιάνα:

Το Πανεπιστήμιο της Ιντιάνα είναι ένα δημόσιο πανεπιστημιακό σύστημα πολλαπλών πανεπιστημίων στην πολιτεία της Ιντιάνα, Ηνωμένες Πολιτείες.

Δήλωση προβλήματος

Χρησιμοποιούσαν προσαρμοσμένα σενάρια για να αναπτύξουν τις εφαρμογές στο VM.

Το περιβάλλον τους βελτιστοποιήθηκε για τις παλαιότερες εφαρμογές που βασίζονται σε Java. Το αναπτυσσόμενο περιβάλλον τους περιλαμβάνει νέα προϊόντα που δεν βασίζονται αποκλειστικά σε Java. Για να δώσει στους μαθητές τους την καλύτερη δυνατή εμπειρία, το Πανεπιστήμιο έπρεπε να ξεκινήσει τον εκσυγχρονισμό των εφαρμογών.

Το Πανεπιστήμιο ήθελε να βελτιώσει τον τρόπο με τον οποίο δημιουργούν εφαρμογές, μεταβαίνοντας σε αρχιτεκτονική που βασίζεται σε μικροσυσκευές για τις εφαρμογές τους.

Απαιτήθηκε ασφάλεια για τα δεδομένα των μαθητών, όπως SSN και δεδομένα για την υγεία των μαθητών.

Λύση:

Όλα τα προβλήματα αντιμετωπίστηκαν από το Docker Data Center (DDC), εξετάστε το παρακάτω διάγραμμα:

Αξιόπιστο μητρώο Docker - Αποθηκεύει τις εικόνες Docker.

UCP Ιστού UCP (Universal Control Plane) - Βοηθά στη διαχείριση ολόκληρου του συμπλέγματος από ένα μόνο μέρος. Οι υπηρεσίες αναπτύσσονται χρησιμοποιώντας UI ιστού UCP, χρησιμοποιώντας εικόνες Docker που είναι αποθηκευμένες στο DTR (Docker Trusted Registry).

Οι ομάδες IT ops αξιοποιούν το Universal Control Plane για την παροχή λογισμικού εγκατεστημένου στο Docker σε κεντρικούς υπολογιστές και, στη συνέχεια, αναπτύσσουν τις εφαρμογές τους χωρίς να χρειάζεται να κάνουν πολλά χειροκίνητα βήματα για να ρυθμίσουν όλη την υποδομή τους.

Το UCP και το DTR ενοποιούνται με το διακομιστή LDAP για γρήγορη πρόσβαση στις εφαρμογές τους.

Ελπίζω να έχετε διαβάσει τα προηγούμενα ιστολόγια για να μάθετε τα βασικά του Docker.

Τώρα, θα σας εξηγήσω πώς μπορούμε να χρησιμοποιήσουμε το Docker Compose για εφαρμογή πολλαπλών κοντέινερ.

Docker Hands-On:

Υποθέτω ότι έχετε εγκαταστήσει το Docker.Θα χρησιμοποιήσω το Docker Compose σε αυτήν την ανάρτηση, παρακάτω έχω δώσει μια μικρή εισαγωγή στο Docker Compose.

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

Ας υποθέσουμε ότι έχετε πολλές εφαρμογές σε διάφορα δοχεία και όλα αυτά τα δοχεία είναι συνδεδεμένα μεταξύ τους. Επομένως, δεν θέλετε να εκτελέσετε ένα από αυτά τα κοντέινερ ένα προς ένα. Ωστόσο, θέλετε να εκτελέσετε αυτά τα κοντέινερ με μία μόνο εντολή. Εκεί μπαίνει το Docker Compose στην εικόνα. Με αυτό μπορείτε να εκτελέσετε πολλές εφαρμογές σε διάφορα κοντέινερ με μία μόνο εντολή. δηλ. σύνθετος λιμενεργάτης.

Παράδειγμα: Φανταστείτε ότι έχετε διαφορετικά κοντέινερ, το ένα εκτελεί μια εφαρμογή ιστού, ένα άλλο τρέχει postgres και ένα άλλο τρέχει redis, σε ένα αρχείο YAML. Αυτό ονομάζεται αρχείο σύνθεσης docker, από εκεί μπορείτε να εκτελέσετε αυτά τα κοντέινερ με μία μόνο εντολή.

Ας πάρουμε ένα ακόμη παράδειγμα:

Ας υποθέσουμε ότι θέλετε να δημοσιεύσετε ένα ιστολόγιο, για αυτό θα χρησιμοποιήσετε το CMS (Content Management System) και το wordpress είναι το πιο ευρέως χρησιμοποιούμενο CMS. Βασικά, χρειάζεστε ένα κοντέινερ για το WordPress και χρειάζεστε ένα ακόμη κοντέινερ ως MySQL για back end, το οποίο πρέπει να συνδέεται με το κοντέινερ wordpress. Χρειαζόμαστε επίσης ένα ακόμη κοντέινερ για το Php Myadmin που θα συνδεθεί με τη βάση δεδομένων MySQL, βασικά, χρησιμοποιείται για πρόσβαση στη βάση δεδομένων MySQL.

Τι λες για να κάνω πρακτικά το παραπάνω αναφερόμενο παράδειγμα.

Βήματα που εμπλέκονται:

  1. Εγκαταστήστε το Docker Compose :
  2. Εγκαταστήστε το WordPress: Θα χρησιμοποιήσουμε τον επίσημο WordPress και MariaDB Εικόνες Docker.
  3. Εγκατάσταση MariaDB: Είναι ένας από τους πιο δημοφιλείς διακομιστές βάσεων δεδομένων στον κόσμο. Είναι κατασκευασμένο από τους αρχικούς προγραμματιστές της MySQL. Το MariaDB έχει αναπτυχθεί ως λογισμικό ανοιχτού κώδικα και ως σχεσιακή βάση δεδομένων παρέχει μια διεπαφή SQL για πρόσβαση σε δεδομένα.
  4. Εγκαταστήστε το PhpMyAdmin: Πρόκειται για ένα εργαλείο ελεύθερου λογισμικού γραμμένο σε PHP, το οποίο προορίζεται να διαχειριστεί τη διαχείριση της MySQL μέσω του Διαδικτύου.
  5. Δημιουργήστε τον ιστότοπο του WordPress:

Ας αρχίσουμε!

Εγκατάσταση Docker Compose:

Εγκαταστήστε πρώτα το Python Pip:

sudo apt-get εγκατάσταση python-pip

Τώρα, μπορείτε να εγκαταστήσετε το Docker Compose:

sudo pip install docker-compose

Εγκατάσταση WordPress:

Δημιουργήστε έναν κατάλογο wordpress:

mkdir wordpress

Εισαγάγετε αυτόν τον κατάλογο wordpress:

cd wordpress /

Σε αυτόν τον κατάλογο δημιουργήστε ένα αρχείο Docker Compose YAML και, στη συνέχεια, επεξεργαστείτε το χρησιμοποιώντας το gedit:

χύτευση διπλά σε int στην Ιάβα
sudo gedit docker-compose.yml

Επικολλήστε τις παρακάτω γραμμές κώδικα σε αυτό το αρχείο yaml:

wordpress: image: wordpress links: - wordpress_db: mysql ports: - 8080: 80 wordpress_db: image: mariadb environment: MYSQL_ROOT_PASSWORD: edureka phpmyadmin: image: corbinu / docker-phpmyadmin links: - wordpress_db: mysql ports: - 8181: 80 περιβάλλον: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

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

wordpress_db: ... περιβάλλον: MYSQL_ROOT_PASSWORD: edureka ...

Αυτό θα ορίσει μια μεταβλητή περιβάλλοντος μέσα στο κοντέινερ wordpress_db που ονομάζεται MYSQL_ROOT_PASSWORD με τον κωδικό πρόσβασης που θέλετε. Η εικόνα MariaDB Docker έχει ρυθμιστεί ώστε να ελέγχει αυτήν τη μεταβλητή περιβάλλοντος όταν ξεκινά και θα φροντίσει να ρυθμίσει το DB με έναν ριζικό λογαριασμό με τον κωδικό πρόσβασης που ορίζεται ως MYSQL_ROOT_PASSWORD.

wordpress: ... θύρες: - 8080: 80 ...

Ο πρώτος αριθμός θύρας είναι ο αριθμός θύρας στον κεντρικό υπολογιστή και ο δεύτερος αριθμός θύρας είναι η θύρα μέσα στο δοχείο. Έτσι, αυτή η διαμόρφωση προωθεί αιτήσεις στη θύρα 8080 του κεντρικού υπολογιστή στην προεπιλεγμένη θύρα διακομιστή ιστού 80 μέσα στο κοντέινερ.

phpmyadmin: image: corbinu / docker-phpmyadmin links: - wordpress_db: mysql ports: - 8181: 80 environment: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Αυτό αρπάζει το docker-phpmyadmin από το μέλος της κοινότητας corbinu, το συνδέει με το κοντέινερ wordpress_db με το όνομα mysql (που σημαίνει μέσα από το κοντέινερ phpmyadmin αναφορές στο όνομα κεντρικού υπολογιστή mysql θα προωθηθεί στο κοντέινερ wordpress_db μας), εκθέτει τη θύρα 80 του στη θύρα 8181 του σύστημα κεντρικού υπολογιστή, και τελικά ορίζει μερικές μεταβλητές περιβάλλοντος με το όνομα χρήστη και τον κωδικό πρόσβασης MariaDB. Αυτή η εικόνα δεν αρπάζει αυτόματα τη μεταβλητή περιβάλλοντος MYSQL_ROOT_PASSWORD από το περιβάλλον wordpress_dbcontainer, όπως κάνει η εικόνα wordpress. Πρέπει πραγματικά να αντιγράψουμε τη γραμμή MYSQL_ROOT_PASSWORD: edureka από το κοντέινερ wordpress_db και να ορίσουμε το όνομα χρήστη σε root.

Τώρα ξεκινήστε την ομάδα εφαρμογών:

docker-compose up -d

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

Τώρα, στο πρόγραμμα περιήγησης μεταβείτε στη θύρα 8080, χρησιμοποιώντας το δημόσιο IP ή το όνομα κεντρικού υπολογιστή σας, όπως φαίνεται παρακάτω:

localhost: 8080

Συμπληρώστε αυτήν τη φόρμα και κάντε κλικ στην εγκατάσταση του WordPress.

Μόλις ολοκληρωθεί, επισκεφτείτε ξανά τη διεύθυνση IP του διακομιστή σας (αυτή τη φορά χρησιμοποιώντας τη θύρα 8181, π.χ. localhost: 8181). Θα σας υποδεχτεί η οθόνη σύνδεσης phpMyAdmin:

Προχωρήστε και συνδεθείτε χρησιμοποιώντας το όνομα χρήστη και τον κωδικό πρόσβασης που ορίσατε στο αρχείο YAML και θα μπορείτε να περιηγηθείτε στη βάση δεδομένων σας. Θα παρατηρήσετε ότι ο διακομιστής περιλαμβάνει μια βάση δεδομένων wordpress, η οποία περιέχει όλα τα δεδομένα από την εγκατάσταση του WordPress.

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

Εάν θεωρήσατε σχετικό αυτό το ιστολόγιο κοντέινερ Docker, ρίξτε μια ματιά στο από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία εκμάθησης με δίκτυο περισσότερων από 250.000 ικανοποιημένων μαθητών σε όλο τον κόσμο. Το μάθημα Εκπαίδευσης Πιστοποίησης Edureka DevOps βοηθά τους μαθητές να αποκτήσουν εμπειρία σε διάφορες διαδικασίες και εργαλεία DevOps, όπως Puppet, Jenkins, Docker, Nagios, Ansible, Chef, Saltstack και GIT για την αυτοματοποίηση πολλαπλών βημάτων στο SDLC.

Έχεις μια ερώτηση για μένα; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων και θα επικοινωνήσω μαζί σας.